Michael Hitchens

Results 25 issues of Michael Hitchens

Unlike `AppendIndex` and friends, `AppendIndicesU32` doesn't account for `INDEX_TYPE_UNDEFINED`. Consider: ```c++ Geometry geometry; Geometry::Create(GeometryCreateInfo{}.IndexType(grfx::INDEX_TYPE_UNDEFINED).AddPosition(), &geometry); std::array data = {0, 1, 2) geometry.AppendIndicesU32(data.size(), data.data()); EXPECT_EQ(geometry.GetIndexBuffer()->GetSize(), 0); ``` This test would fail...

`GltfLoader::LoadMeshData` currently complains when a mesh lacks `indices`. However, meshes are allowed to not have `indices`. [5.24.2](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_indices) says: > When this is undefined, the primitive defines non-indexed geometry This would...

enhancement
good first issue

`GltfLoader::LoadMeshData` will provide (0,0,0) for normals if not present. However [3.7.2.1](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/SimpleMaterial) says: > When normals are not specified, client implementations MUST calculate flat normals and the provided tangents (if present)...

enhancement
good first issue

Without extensions, Vulkan only supports UINT16 and UINT32 index buffers. However, glTF allows UINT8 index buffers. We can support scenes with UINT8 indices by repacking them into a UINT16 buffer...

All models loaded with `scene::GltfLoader` are assumed to be single-sided (back face culling is enabled). glTF supports double-sided materials. From [3.9.5](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#double-sided): > When this value is true, back-face culling is...

enhancement

The current implementation of `GltfLoader::LoadMeshData` assumes that each attribute is stored tightly packed. However, glTF allows for interleaved attributes, see [3.6.2](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#accessors-overview). Trying to load interleaved data like it is tightly...

enhancement

`GltfLoader::LoadMeshData` only loads meshes that use the triangle primitive mode. However, [5.24.4](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_mode) defines other support primitives like lines, points, triangle strips, and triangle fans. This would allow BigWheels to load...

enhancement

Some examples: - [Duck](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/Duck) is mostly off-screen | Expected | Actual | | --- | --- | | ![image](https://github.com/google/bigwheels/assets/3687359/47527983-2943-42f1-beb1-c221e4f29e19) | ![image](https://github.com/google/bigwheels/assets/3687359/973bdab2-73d5-4c67-bd0b-91a28493e692) | - [EnvironmentTest](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/EnvironmentTest) doesn't show anything: | Expected |...

bug

`GltfMaterialSelector::DetermineMaterial` will return the error material for materials that are not unlit and also lack `pbrMetallicRoughness`. However, the spec says that the defaults should be applied for `pbrMetallicRoughness` if not...

enhancement

`emissiveTexture` is loaded and passed to the StandardMaterial but is never referenced. The purpose is outlined in [3.9.3](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#additional-textures): > The emissive texture and factor control the color and intensity of...

enhancement