mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-12 17:39:07 +08:00
parent
ee618da82e
commit
4efc3d27cc
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
DecodeAttributesDecoderData(buffer) {
|
DecodeAttributesDecoderData(buffer) {
|
||||||
num_attributes I32
|
num_attributes varUI32
|
||||||
point_attribute_ids_.resize(num_attributes);
|
point_attribute_ids_.resize(num_attributes);
|
||||||
for (i = 0; i < num_attributes; ++i) {
|
for (i = 0; i < num_attributes; ++i) {
|
||||||
att_type UI8
|
att_type UI8
|
||||||
|
@ -5,8 +5,11 @@
|
|||||||
~~~~~
|
~~~~~
|
||||||
Decode() {
|
Decode() {
|
||||||
DecodeHeader()
|
DecodeHeader()
|
||||||
|
if (flags & METADATA_FLAG_MASK)
|
||||||
|
DecodeGeometryMetadata(metadata)
|
||||||
DecodeConnectivityData()
|
DecodeConnectivityData()
|
||||||
DecodeAttributeData()}
|
DecodeAttributeData()
|
||||||
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
{:.draco-syntax}
|
{:.draco-syntax}
|
||||||
|
|
||||||
|
@ -1,31 +1,22 @@
|
|||||||
## EdgeBreaker Decoder
|
## EdgeBreaker Decoder
|
||||||
|
|
||||||
### InitializeDecoder()
|
### DecodeConnectivityData()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
InitializeDecoder() {
|
DecodeConnectivityData() {
|
||||||
edgebreaker_decoder_type UI8
|
edgebreaker_traversal_type UI8
|
||||||
}
|
num_new_verts varUI32
|
||||||
~~~~~
|
num_encoded_vertices varUI32
|
||||||
{:.draco-syntax }
|
num_faces varUI32
|
||||||
|
|
||||||
|
|
||||||
### DecodeConnectivity()
|
|
||||||
|
|
||||||
~~~~~
|
|
||||||
DecodeConnectivity() {
|
|
||||||
num_new_verts UI32
|
|
||||||
num_encoded_vertices UI32
|
|
||||||
num_faces UI32
|
|
||||||
num_attribute_data I8
|
num_attribute_data I8
|
||||||
num_encoded_symbols UI32
|
num_encoded_symbols varUI32
|
||||||
num_encoded_split_symbols UI32
|
num_encoded_split_symbols varUI32
|
||||||
encoded_connectivity_size UI32
|
encoded_connectivity_size varUI32
|
||||||
// file pointer must be set to current position
|
// file pointer must be set to current position
|
||||||
// + encoded_connectivity_size
|
// + encoded_connectivity_size
|
||||||
hole_and_split_bytes = DecodeHoleAndTopologySplitEvents()
|
hole_and_split_bytes = DecodeHoleAndTopologySplitEvents()
|
||||||
// file pointer must be set to old current position
|
// file pointer must be set to old current position
|
||||||
EdgeBreakerTraversalValence_Start()
|
EdgeBreakerTraversalValence_Start(num_encoded_vertices)
|
||||||
DecodeConnectivity(num_symbols)
|
DecodeConnectivity(num_symbols)
|
||||||
if (attribute_data_.size() > 0) {
|
if (attribute_data_.size() > 0) {
|
||||||
for (ci = 0; ci < corner_table_->num_corners(); ci += 3) {
|
for (ci = 0; ci < corner_table_->num_corners(); ci += 3) {
|
||||||
@ -39,11 +30,12 @@ DecodeConnectivity() {
|
|||||||
}
|
}
|
||||||
// Decode attribute connectivity.
|
// Decode attribute connectivity.
|
||||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||||
attribute_data_[i].connectivity_data.InitEmpty(corner_table_.get());
|
attribute_data_[i].connectivity_data.InitEmpty(corner_table_);
|
||||||
for (int32_t c : attribute_data_[i].attribute_seam_corners) {
|
for (int32_t c : attribute_data_[i].attribute_seam_corners) {
|
||||||
attribute_data_[i].connectivity_data.AddSeamEdge(c);
|
attribute_data_[i].connectivity_data.AddSeamEdge(c);
|
||||||
}
|
}
|
||||||
attribute_data_[i].connectivity_data.RecomputeVertices(nullptr, nullptr);
|
attribute_data_[i].connectivity_data.RecomputeVertices(nullptr,
|
||||||
|
nullptr);
|
||||||
}
|
}
|
||||||
// Preallocate vertex to value mapping
|
// Preallocate vertex to value mapping
|
||||||
AssignPointsToCorners()
|
AssignPointsToCorners()
|
||||||
@ -83,7 +75,8 @@ AssignPointsToCorners() {
|
|||||||
act_c = corner_table_->SwingRight(c);
|
act_c = corner_table_->SwingRight(c);
|
||||||
seam_found = false;
|
seam_found = false;
|
||||||
while (act_c != c) {
|
while (act_c != c) {
|
||||||
if (attribute_data_[i].connectivity_data.Vertex(act_c) != vert_id) {
|
if (attribute_data_[i].connectivity_data.Vertex(act_c) !=
|
||||||
|
vert_id) {
|
||||||
deduplication_first_corner = act_c;
|
deduplication_first_corner = act_c;
|
||||||
seam_found = true;
|
seam_found = true;
|
||||||
break;
|
break;
|
||||||
@ -165,7 +158,8 @@ DecodeConnectivity(num_symbols) {
|
|||||||
} else {
|
} else {
|
||||||
new_active_corner = corner_table_->Previous(act_top_corner);
|
new_active_corner = corner_table_->Previous(act_top_corner);
|
||||||
}
|
}
|
||||||
decoder_split_symbol_id = num_symbols - encoder_split_symbol_id - 1;
|
decoder_split_symbol_id = num_symbols -
|
||||||
|
encoder_split_symbol_id - 1;
|
||||||
topology_split_active_corners[decoder_split_symbol_id] =
|
topology_split_active_corners[decoder_split_symbol_id] =
|
||||||
new_active_corner;
|
new_active_corner;
|
||||||
}
|
}
|
||||||
@ -186,7 +180,6 @@ DecodeConnectivity(num_symbols) {
|
|||||||
init_corners_.push_back(corner);
|
init_corners_.push_back(corner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Return num_vertices;
|
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
{:.draco-syntax }
|
{:.draco-syntax }
|
||||||
|
@ -6,22 +6,22 @@
|
|||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
DecodeHoleAndTopologySplitEvents() {
|
DecodeHoleAndTopologySplitEvents() {
|
||||||
num_topologoy_splits UI32
|
num_topologoy_splits varUI32
|
||||||
source_symbol_id = 0
|
source_symbol_id = 0
|
||||||
for (i = 0; i < num_topologoy_splits; ++i) {
|
for (i = 0; i < num_topologoy_splits; ++i) {
|
||||||
DecodeVarint<UI32>(&delta)
|
delta varUI32
|
||||||
split_data[i].source_symbol_id = delta + source_symbol_id
|
split_data[i].source_symbol_id = delta + source_symbol_id
|
||||||
DecodeVarint<UI32>(&delta)
|
delta varUI32
|
||||||
split_data[i].split_symbol_id = source_symbol_id - delta
|
split_data[i].split_symbol_id = source_symbol_id - delta
|
||||||
}
|
}
|
||||||
for (i = 0; i < num_topologoy_splits; ++i) {
|
for (i = 0; i < num_topologoy_splits; ++i) {
|
||||||
split_data[i].split_edge bits1
|
split_data[i].split_edge bits1
|
||||||
split_data[i].source_edge bits1
|
split_data[i].source_edge bits1
|
||||||
}
|
}
|
||||||
num_hole_events UI32
|
num_hole_events varUI32
|
||||||
symbol_id = 0
|
symbol_id = 0
|
||||||
for (i = 0; i < num_hole_events; ++i) {
|
for (i = 0; i < num_hole_events; ++i) {
|
||||||
DecodeVarint<UI32>(&delta)
|
delta varUI32
|
||||||
hole_data[i].symbol_id = delta + symbol_id
|
hole_data[i].symbol_id = delta + symbol_id
|
||||||
}
|
}
|
||||||
return bytes_decoded;
|
return bytes_decoded;
|
||||||
|
@ -9,10 +9,10 @@ EdgebreakerTraversal_Start() {
|
|||||||
symbol_buffer_ size * UI8
|
symbol_buffer_ size * UI8
|
||||||
size UI64
|
size UI64
|
||||||
start_face_buffer_ size * UI8
|
start_face_buffer_ size * UI8
|
||||||
if (num_attribute_data_ > 0) {
|
if (num_attribute_data > 0) {
|
||||||
attribute_connectivity_decoders_ = std::unique_ptr<BinaryDecoder[]>(
|
attribute_connectivity_decoders_ =
|
||||||
new BinaryDecoder[num_attribute_data_]);
|
new BinaryDecoder[num_attribute_data]
|
||||||
for (i = 0; i < num_attribute_data_; ++i) {
|
for (i = 0; i < num_attribute_data; ++i) {
|
||||||
attribute_connectivity_decoders_[i].StartDecoding()
|
attribute_connectivity_decoders_[i].StartDecoding()
|
||||||
// RansBitDecoder_StartDecoding
|
// RansBitDecoder_StartDecoding
|
||||||
}
|
}
|
||||||
|
@ -4,24 +4,22 @@
|
|||||||
### EdgeBreakerTraversalValence_Start()
|
### EdgeBreakerTraversalValence_Start()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
EdgeBreakerTraversalValence_Start(num_vertices, num_attribute_data) {
|
EdgeBreakerTraversalValence_Start(traversal_num_vertices) {
|
||||||
out_buffer = EdgebreakerTraversal_Start()
|
EdgebreakerTraversal_Start()
|
||||||
num_split_symbols I32
|
num_split_symbols varUI32
|
||||||
mode == 0 I8
|
mode == 0 I8
|
||||||
num_vertices_ += num_split_symbols
|
traversal_num_vertices += num_split_symbols
|
||||||
vertex_valences_ init to 0
|
vertex_valences_ init to 0
|
||||||
vertex_valences_.resize(num_vertices_, 0);
|
|
||||||
min_valence_ = 2;
|
min_valence_ = 2;
|
||||||
max_valence_ = 7;
|
max_valence_ = 7;
|
||||||
num_unique_valences = 6 (max_valence_ - min_valence_ + 1)
|
num_unique_valences = 6 (max_valence_ - min_valence_ + 1)
|
||||||
for (i = 0; i < num_unique_valences; ++i) {
|
for (i = 0; i < num_unique_valences; ++i) {
|
||||||
DecodeVarint<UI32>(&num_symbols, out_buffer)
|
num_symbols varUI32
|
||||||
If (num_symbols > 0) {
|
if (num_symbols > 0) {
|
||||||
DecodeSymbols(num_symbols, out_buffer, &context_symbols_[i])
|
DecodeSymbols(num_symbols, context_symbols_[i])
|
||||||
}
|
}
|
||||||
context_counters_[i] = num_symbols
|
context_counters_[i] = num_symbols
|
||||||
}
|
}
|
||||||
return out_buffer;
|
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
{:.draco-syntax }
|
{:.draco-syntax }
|
||||||
|
@ -17,6 +17,7 @@ version_date: Released 2017-xx-xx
|
|||||||
{% include_relative 03.00.00.symbols.md %}
|
{% include_relative 03.00.00.symbols.md %}
|
||||||
{% include_relative 04.00.00.conventions.md %}
|
{% include_relative 04.00.00.conventions.md %}
|
||||||
{% include_relative draco.decoder.md %}
|
{% include_relative draco.decoder.md %}
|
||||||
|
{% include_relative metadata.decoder.md %}
|
||||||
{% include_relative mesh.decoder.md %}
|
{% include_relative mesh.decoder.md %}
|
||||||
{% include_relative edgebreaker.decoder.md %}
|
{% include_relative edgebreaker.decoder.md %}
|
||||||
{% include_relative edgebreaker.hole.and.topology.md %}
|
{% include_relative edgebreaker.hole.and.topology.md %}
|
||||||
@ -40,7 +41,7 @@ version_date: Released 2017-xx-xx
|
|||||||
{% include_relative rans.decoding.md %}
|
{% include_relative rans.decoding.md %}
|
||||||
{% include_relative rans.bit.decoder.md %}
|
{% include_relative rans.bit.decoder.md %}
|
||||||
{% include_relative core.functions.md %}
|
{% include_relative core.functions.md %}
|
||||||
|
{% include_relative variable.descriptions.md %}
|
||||||
|
|
||||||
{% comment %}
|
{% comment %}
|
||||||
{% include_relative 99.00.01.testing.md %}
|
{% include_relative 99.00.01.testing.md %}
|
||||||
|
@ -1,11 +1,2 @@
|
|||||||
## Mesh Decoder
|
## Mesh Decoder
|
||||||
|
|
||||||
### DecodeConnectivityData()
|
|
||||||
|
|
||||||
~~~~~
|
|
||||||
DecodeConnectivityData()
|
|
||||||
InitializeDecoder()
|
|
||||||
DecodeConnectivity()
|
|
||||||
}
|
|
||||||
~~~~~
|
|
||||||
{:.draco-syntax }
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
Decode(...) {
|
Decode(...) {
|
||||||
this->transform().InitializeDecoding(num_components);
|
this->transform().InitializeDecoding(num_components);
|
||||||
// restore the first value
|
// restore the first value
|
||||||
this->transform().ComputeOriginalValue(pred_vals.get(),
|
this->transform().ComputeOriginalValue(pred_vals,
|
||||||
in_corr, out_data, 0);
|
in_corr, out_data, 0);
|
||||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||||
corner_map_size = this->mesh_data().data_to_corner_map()->size();
|
corner_map_size = this->mesh_data().data_to_corner_map()->size();
|
||||||
@ -16,14 +16,14 @@ Decode(...) {
|
|||||||
dst_offset = p * num_components;
|
dst_offset = p * num_components;
|
||||||
b= ComputeParallelogramPrediction(p, corner_id, table,
|
b= ComputeParallelogramPrediction(p, corner_id, table,
|
||||||
*vertex_to_data_map, out_data,
|
*vertex_to_data_map, out_data,
|
||||||
num_components, pred_vals.get())
|
num_components, pred_vals)
|
||||||
if (!b) {
|
if (!b) {
|
||||||
src_offset = (p - 1) * num_components;
|
src_offset = (p - 1) * num_components;
|
||||||
this->transform().ComputeOriginalValue(out_data + src_offset, in_corr,
|
this->transform().ComputeOriginalValue(out_data + src_offset, in_corr,
|
||||||
out_data + dst_offset, dst_offset);
|
out_data + dst_offset, dst_offset);
|
||||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||||
} else {
|
} else {
|
||||||
this->transform().ComputeOriginalValue(pred_vals.get(), in_corr,
|
this->transform().ComputeOriginalValue(pred_vals, in_corr,
|
||||||
out_data + dst_offset, dst_offset);
|
out_data + dst_offset, dst_offset);
|
||||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||||
}
|
}
|
||||||
|
52
docs/spec/metadata.decoder.md
Normal file
52
docs/spec/metadata.decoder.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
## Metadata Decoder
|
||||||
|
|
||||||
|
### DecodeGeometryMetadata()
|
||||||
|
|
||||||
|
~~~~~
|
||||||
|
DecodeGeometryMetadata(metadata) {
|
||||||
|
num_att_metadata varUI32
|
||||||
|
for (i = 0; i < num_att_metadata; ++i) {
|
||||||
|
att_id varUI32
|
||||||
|
att_metadata = new AttributeMetadata(att_id)
|
||||||
|
DecodeMetadata(att_metadata)
|
||||||
|
metadata.att_metadata.push_back(att_metadata)
|
||||||
|
}
|
||||||
|
DecodeMetadata(metadata)
|
||||||
|
}
|
||||||
|
~~~~~
|
||||||
|
{:.draco-syntax}
|
||||||
|
|
||||||
|
|
||||||
|
### DecodeMetadata()
|
||||||
|
|
||||||
|
~~~~~
|
||||||
|
DecodeMetadata(metadata) {
|
||||||
|
num_entries varUI32
|
||||||
|
for (i = 0; i < num_entries; ++i) {
|
||||||
|
DecodeEntry(metadata)
|
||||||
|
}
|
||||||
|
num_sub_metadata varUI32
|
||||||
|
for (i = 0; i < num_sub_metadata; ++i) {
|
||||||
|
size UI8
|
||||||
|
name size * UI8
|
||||||
|
temp_metadata = new Metadata()
|
||||||
|
DecodeMetadata(temp_metadata)
|
||||||
|
metadata.sub_metadata[name] = temp_metadata
|
||||||
|
}
|
||||||
|
}
|
||||||
|
~~~~~
|
||||||
|
{:.draco-syntax}
|
||||||
|
|
||||||
|
|
||||||
|
### DecodeEntry()
|
||||||
|
|
||||||
|
~~~~~
|
||||||
|
DecodeEntry(metadata) {
|
||||||
|
size UI8
|
||||||
|
name size * UI8
|
||||||
|
size varUI32
|
||||||
|
value size * UI8
|
||||||
|
metadata.entries.insert(name, value)
|
||||||
|
}
|
||||||
|
~~~~~
|
||||||
|
{:.draco-syntax}
|
@ -4,11 +4,11 @@
|
|||||||
### RansBitDecoder_StartDecoding()
|
### RansBitDecoder_StartDecoding()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
RansBitDecoder_StartDecoding(DecoderBuffer *source_buffer) {
|
RansBitDecoder_StartDecoding() {
|
||||||
prob_zero_ UI8
|
prob_zero_ UI8
|
||||||
size UI32
|
size UI32
|
||||||
buffer_ size * UI8
|
buffer_ size * UI8
|
||||||
ans_read_init(&ans_decoder_, buffer_, size)
|
ans_read_init(ans_decoder_, buffer_, size)
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
{:.draco-syntax }
|
{:.draco-syntax }
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
### ans_read_init()
|
### ans_read_init()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
ans_read_init(struct AnsDecoder *const ans, const uint8_t *const buf,
|
ans_read_init(AnsDecoder ans, buf, int offset) {
|
||||||
int offset) {
|
|
||||||
x = buf[offset - 1] >> 6
|
x = buf[offset - 1] >> 6
|
||||||
If (x == 0) {
|
If (x == 0) {
|
||||||
ans->buf_offset = offset - 1;
|
ans->buf_offset = offset - 1;
|
||||||
@ -17,8 +16,7 @@ ans_read_init(struct AnsDecoder *const ans, const uint8_t *const buf,
|
|||||||
ans->buf_offset = offset - 3;
|
ans->buf_offset = offset - 3;
|
||||||
ans->state = mem_get_le24(buf + offset - 3) & 0x3FFFFF;
|
ans->state = mem_get_le24(buf + offset - 3) & 0x3FFFFF;
|
||||||
} else if (x == 3) {
|
} else if (x == 3) {
|
||||||
// x == 3 implies this byte is a superframe marker
|
// ERROR
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
ans->state += l_base;
|
ans->state += l_base;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ Initialize(...) {
|
|||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
DecodeIntegerValues(point_ids) {
|
DecodeIntegerValues(point_ids) {
|
||||||
|
// REMOVE < DRACO_BITSTREAM_VERSION(2, 0)
|
||||||
// DecodeQuantizedDataInfo()
|
// DecodeQuantizedDataInfo()
|
||||||
num_components = attribute()->components_count();
|
num_components = attribute()->components_count();
|
||||||
for (i = 0; i < num_components; ++i) {
|
for (i = 0; i < num_components; ++i) {
|
||||||
@ -20,6 +21,7 @@ DecodeIntegerValues(point_ids) {
|
|||||||
}
|
}
|
||||||
max_value_dif_ F32
|
max_value_dif_ F32
|
||||||
quantization_bits_ UI8
|
quantization_bits_ UI8
|
||||||
|
// REMOVE < DRACO_BITSTREAM_VERSION(2, 0)
|
||||||
SequentialIntegerAttributeDecoder::DecodeIntegerValues()
|
SequentialIntegerAttributeDecoder::DecodeIntegerValues()
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
@ -41,7 +43,7 @@ DequantizeValues(num_values) {
|
|||||||
value = value + min_value_[c];
|
value = value + min_value_[c];
|
||||||
att_val[c] = value;
|
att_val[c] = value;
|
||||||
}
|
}
|
||||||
attribute()->buffer()->Write(out_byte_pos, att_val.get(), entry_size);
|
attribute()->buffer()->Write(out_byte_pos, att_val, entry_size);
|
||||||
out_byte_pos += entry_size;
|
out_byte_pos += entry_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,12 @@
|
|||||||
### DecodeSymbols()
|
### DecodeSymbols()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
DecodeSymbols(num_symbols, out_buffer, out_values) {
|
DecodeSymbols(num_symbols, out_values) {
|
||||||
scheme UI8
|
scheme UI8
|
||||||
If (scheme == 0) {
|
If (scheme == 0) {
|
||||||
DecodeTaggedSymbols<>(num_symbols, src_buffer, out_values)
|
DecodeTaggedSymbols(num_symbols, out_values)
|
||||||
} else if (scheme == 1) {
|
} else if (scheme == 1) {
|
||||||
DecodeRawSymbols<>(num_symbols, src_buffer, out_values)
|
DecodeRawSymbols(num_symbols, out_values)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
@ -29,19 +29,8 @@ DecodeTaggedSymbols() {
|
|||||||
### DecodeRawSymbols()
|
### DecodeRawSymbols()
|
||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
DecodeRawSymbols() {
|
DecodeRawSymbols(num_values, out_values) {
|
||||||
max_bit_length UI8
|
max_bit_length UI8
|
||||||
DecodeRawSymbolsInternal(max_bit_length, out_values)
|
|
||||||
return symbols
|
|
||||||
}
|
|
||||||
~~~~~
|
|
||||||
{:.draco-syntax }
|
|
||||||
|
|
||||||
|
|
||||||
### DecodeRawSymbolsInternal()
|
|
||||||
|
|
||||||
~~~~~
|
|
||||||
DecodeRawSymbolsInternal(max_bit_length, out_values) {
|
|
||||||
decoder = CreateRansSymbolDecoder(max_bit_length)
|
decoder = CreateRansSymbolDecoder(max_bit_length)
|
||||||
decoder.StartDecoding()
|
decoder.StartDecoding()
|
||||||
// RansSymbolDecoder_StartDecoding
|
// RansSymbolDecoder_StartDecoding
|
||||||
@ -103,7 +92,7 @@ RansSymbolDecoder_StartDecoding() {
|
|||||||
|
|
||||||
~~~~~
|
~~~~~
|
||||||
RansSymbolDecoder_DecodeSymbol() {
|
RansSymbolDecoder_DecodeSymbol() {
|
||||||
ans_.rans_read()
|
return ans_.rans_read()
|
||||||
}
|
}
|
||||||
~~~~~
|
~~~~~
|
||||||
{:.draco-syntax }
|
{:.draco-syntax }
|
||||||
|
8
docs/spec/variable.descriptions.md
Normal file
8
docs/spec/variable.descriptions.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
## Descriptions
|
||||||
|
|
||||||
|
### Variabless
|
||||||
|
|
||||||
|
* edgebreaker_traversal_type
|
||||||
|
* 0: MeshEdgeBreakerTraversalDecoder
|
||||||
|
* 1: MeshEdgeBreakerTraversalPredictiveDecoder
|
||||||
|
* 2: MeshEdgeBreakerTraversalValenceDecoder
|
Loading…
x
Reference in New Issue
Block a user