glTF exporter: Draco: fix normalized draco accessors

Fix exporting normalized accessor with Draco enabled.
json was ok, but accessor data itself was not flagged as normalized

Pull Request: https://projects.blender.org/blender/blender/pulls/122224
This commit is contained in:
Julien Duroure 2024-05-24 16:25:56 +02:00 committed by Julien Duroure
parent 105463e28a
commit 1e802d971a
4 changed files with 7 additions and 6 deletions

@ -222,7 +222,7 @@ draco::DataType getDataType(size_t componentType)
}
API(uint32_t)
encoderSetAttribute(Encoder *encoder, char *attributeName, size_t componentType, char *dataType, void *data)
encoderSetAttribute(Encoder *encoder, char *attributeName, size_t componentType, char *dataType, void *data, bool normalized)
{
auto buffer = std::make_unique<draco::DataBuffer>();
uint32_t count = encoder->mesh.num_points();
@ -232,7 +232,7 @@ encoderSetAttribute(Encoder *encoder, char *attributeName, size_t componentType,
draco::GeometryAttribute::Type semantics = getAttributeSemantics(attributeName);
draco::GeometryAttribute attribute;
attribute.Init(semantics, &*buffer, componentCount, getDataType(componentType), false, stride, 0);
attribute.Init(semantics, &*buffer, componentCount, getDataType(componentType), normalized, stride, 0);
auto id = static_cast<uint32_t>(encoder->mesh.AddAttribute(attribute, true, count));
auto dataBytes = reinterpret_cast<uint8_t *>(data);

@ -53,7 +53,7 @@ API(void)
encoderSetIndices(Encoder *encoder, size_t indexComponentType, uint32_t indexCount, void *indices);
API(uint32_t)
encoderSetAttribute(Encoder *encoder, char *attributeName, size_t componentType, char *dataType, void *data);
encoderSetAttribute(Encoder *encoder, char *attributeName, size_t componentType, char *dataType, void *data, bool normalized);
API(uint32_t)
encoderGetEncodedVertexCount(Encoder *encoder);

@ -5,7 +5,7 @@
bl_info = {
'name': 'glTF 2.0 format',
'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
"version": (4, 2, 39),
"version": (4, 2, 40),
'blender': (4, 2, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',

@ -34,7 +34,7 @@ def encode_scene_primitives(scenes, export_settings):
dll.encoderSetIndices.argtypes = [c_void_p, c_size_t, c_uint32, c_void_p]
dll.encoderSetAttribute.restype = c_uint32
dll.encoderSetAttribute.argtypes = [c_void_p, c_char_p, c_size_t, c_char_p, c_void_p]
dll.encoderSetAttribute.argtypes = [c_void_p, c_char_p, c_size_t, c_char_p, c_void_p, c_bool]
dll.encoderEncode.restype = c_bool
dll.encoderEncode.argtypes = [c_void_p, c_uint8]
@ -130,7 +130,8 @@ def __encode_primitive(primitive, dll, export_settings, encoded_primitives_cache
attr_name.encode(),
attr.component_type,
attr.type.encode(),
attr.buffer_view.data)
attr.buffer_view.data,
attr.normalized)
draco_ids[attr_name] = draco_id
dll.encoderSetIndices(encoder, indices.component_type, indices.count, indices.buffer_view.data)