GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
attribute_quantization_transform.h
Go to the documentation of this file.
1// Copyright 2017 The Draco Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15#ifndef DRACO_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_
16#define DRACO_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_
17
18#include <vector>
19
23
24namespace draco {
25
26// Attribute transform for quantized attributes.
28 public:
29 AttributeQuantizationTransform() : quantization_bits_(-1), range_(0.f) {}
30 // Return attribute transform type.
34 // Try to init transform from attribute.
35 bool InitFromAttribute(const PointAttribute &attribute) override;
36 // Copy parameter values into the provided AttributeTransformData instance.
38 AttributeTransformData *out_data) const override;
39
40 bool TransformAttribute(const PointAttribute &attribute,
41 const std::vector<PointIndex> &point_ids,
42 PointAttribute *target_attribute) override;
43
44 bool InverseTransformAttribute(const PointAttribute &attribute,
45 PointAttribute *target_attribute) override;
46
47 bool SetParameters(int quantization_bits, const float *min_values,
48 int num_components, float range);
49
50 bool ComputeParameters(const PointAttribute &attribute,
51 const int quantization_bits);
52
53 // Encode relevant parameters into buffer.
54 bool EncodeParameters(EncoderBuffer *encoder_buffer) const override;
55
56 bool DecodeParameters(const PointAttribute &attribute,
57 DecoderBuffer *decoder_buffer) override;
58
59 int32_t quantization_bits() const { return quantization_bits_; }
60 float min_value(int axis) const { return min_values_[axis]; }
61 const std::vector<float> &min_values() const { return min_values_; }
62 float range() const { return range_; }
63 bool is_initialized() const { return quantization_bits_ != -1; }
64
65 protected:
66 // Create portable attribute using 1:1 mapping between points in the input and
67 // output attribute.
68 void GeneratePortableAttribute(const PointAttribute &attribute,
69 int num_points,
70 PointAttribute *target_attribute) const;
71
72 // Create portable attribute using custom mapping between input and output
73 // points.
74 void GeneratePortableAttribute(const PointAttribute &attribute,
75 const std::vector<PointIndex> &point_ids,
76 int num_points,
77 PointAttribute *target_attribute) const;
78
80 const PointAttribute &attribute) const override {
81 return DT_UINT32;
82 }
84 const PointAttribute &attribute) const override {
85 return attribute.num_components();
86 }
87
89
90 private:
91 int32_t quantization_bits_;
92
93 // Minimal dequantized value for each component of the attribute.
94 std::vector<float> min_values_;
95
96 // Bounds of the dequantized attribute (max delta over all components).
97 float range_;
98};
99
100} // namespace draco
101
102#endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTE_DEQUANTIZATION_TRANSFORM_H_
void CopyToAttributeTransformData(AttributeTransformData *out_data) const override
Definition attribute_quantization_transform.cc:43
float range() const
Definition attribute_quantization_transform.h:62
bool InverseTransformAttribute(const PointAttribute &attribute, PointAttribute *target_attribute) override
Definition attribute_quantization_transform.cc:66
float min_value(int axis) const
Definition attribute_quantization_transform.h:60
bool TransformAttribute(const PointAttribute &attribute, const std::vector< PointIndex > &point_ids, PointAttribute *target_attribute) override
Definition attribute_quantization_transform.cc:53
AttributeTransformType Type() const override
Definition attribute_quantization_transform.h:31
bool DecodeParameters(const PointAttribute &attribute, DecoderBuffer *decoder_buffer) override
Definition attribute_quantization_transform.cc:187
void GeneratePortableAttribute(const PointAttribute &attribute, int num_points, PointAttribute *target_attribute) const
Definition attribute_quantization_transform.cc:208
const std::vector< float > & min_values() const
Definition attribute_quantization_transform.h:61
int GetTransformedNumComponents(const PointAttribute &attribute) const override
Definition attribute_quantization_transform.h:83
bool InitFromAttribute(const PointAttribute &attribute) override
Definition attribute_quantization_transform.cc:22
bool is_initialized() const
Definition attribute_quantization_transform.h:63
bool SetParameters(int quantization_bits, const float *min_values, int num_components, float range)
Definition attribute_quantization_transform.cc:110
bool EncodeParameters(EncoderBuffer *encoder_buffer) const override
Definition attribute_quantization_transform.cc:175
static bool IsQuantizationValid(int quantization_bits)
Definition attribute_quantization_transform.cc:104
AttributeQuantizationTransform()
Definition attribute_quantization_transform.h:29
bool ComputeParameters(const PointAttribute &attribute, const int quantization_bits)
Definition attribute_quantization_transform.cc:123
DataType GetTransformedDataType(const PointAttribute &attribute) const override
Definition attribute_quantization_transform.h:79
int32_t quantization_bits() const
Definition attribute_quantization_transform.h:59
Definition attribute_transform_data.h:30
Definition attribute_transform.h:27
Definition decoder_buffer.h:30
Definition encoder_buffer.h:29
uint8_t num_components() const
Definition geometry_attribute.h:263
Definition point_attribute.h:33
Definition attribute_octahedron_transform.cc:21
AttributeTransformType
Definition attribute_transform_type.h:21
@ ATTRIBUTE_QUANTIZATION_TRANSFORM
Definition attribute_transform_type.h:24
DataType
Definition draco_types.h:26
@ DT_UINT32
Definition draco_types.h:34