40 std::shared_ptr<StaticMeshResource> static_mesh;
41 std::shared_ptr<MorphMeshResource> morph_mesh;
42 std::shared_ptr<SkinnedMeshResource> skinned_mesh;
43 std::shared_ptr<SkinnedMorphMeshResource> skinned_morph_mesh;
44 std::shared_ptr<Image2D> base_color_texture;
45 std::vector<std::unique_ptr<StorageBuffer>> joint_palette_buffers;
46 std::vector<std::unique_ptr<StorageBuffer>> morph_weights_buffers;
48 void ResetResolvedBindings()
noexcept
53 skinned_morph_mesh.reset();
54 base_color_texture.reset();
57 [[nodiscard]] StorageBuffer* GetJointPaletteBuffer(
const uint32_t image_index)
const noexcept
59 return image_index < joint_palette_buffers.size() ? joint_palette_buffers[image_index].get() :
nullptr;
62 [[nodiscard]] StorageBuffer* GetMorphWeightsBuffer(
const uint32_t image_index)
const noexcept
64 return image_index < morph_weights_buffers.size() ? morph_weights_buffers[image_index].get() :
nullptr;
67 [[nodiscard]]
const Buffer* GetVertexBuffer()
const noexcept
71 return static_mesh->GetVertexBuffer();
75 return morph_mesh->GetVertexBuffer();
79 return skinned_mesh->GetVertexBuffer();
81 if (skinned_morph_mesh)
83 return skinned_morph_mesh->GetVertexBuffer();
88 [[nodiscard]]
const Buffer* GetIndexBuffer()
const noexcept
92 return static_mesh->GetIndexBuffer();
96 return morph_mesh->GetIndexBuffer();
100 return skinned_mesh->GetIndexBuffer();
102 if (skinned_morph_mesh)
104 return skinned_morph_mesh->GetIndexBuffer();
109 [[nodiscard]] uint32_t GetIndexCount()
const noexcept
113 return static_mesh->GetIndexCount();
117 return morph_mesh->GetIndexCount();
121 return skinned_mesh->GetIndexCount();
123 if (skinned_morph_mesh)
125 return skinned_morph_mesh->GetIndexCount();
130 [[nodiscard]]
bool HasRenderableMesh()
const noexcept
132 return GetVertexBuffer() !=
nullptr && GetIndexBuffer() !=
nullptr && GetIndexCount() > 0u;
136struct DirectionalShadowSceneMeshSubrenderImpl
138 DirectionalShadowSceneMeshSubrenderImpl(
const Subrender::Stage& stage,
RenderDevice& render_device,
Filesystem& filesystem,
141 void EnsureMeshCapacity(std::size_t mesh_count);
142 void InvalidateSlotState(std::size_t slot_index);
143 void ClearUnusedSlotState(std::size_t mesh_count);
147 RenderResourceResolver resource_resolver;
148 PipelineGraphics culled_pipeline;
149 PipelineGraphics double_sided_pipeline;
150 PipelineGraphics morph_culled_pipeline;
151 PipelineGraphics morph_double_sided_pipeline;
152 PipelineGraphics skinned_culled_pipeline;
153 PipelineGraphics skinned_double_sided_pipeline;
154 PipelineGraphics skinned_morph_culled_pipeline;
155 PipelineGraphics skinned_morph_double_sided_pipeline;
156 std::optional<BufferLayout> mesh_layout;
157 UniformHandler scene_uniforms;
158 std::vector<UniformHandler> mesh_uniforms;
159 std::vector<DescriptorsHandler> mesh_descriptors;
160 std::vector<DirectionalShadowResolvedResources> resolved_resources;
161 std::vector<DirectionalShadowMeshDrawKind> slot_draw_kinds;
162 std::vector<std::optional<std::string>> slot_mesh_paths;
170std::vector<std::size_t> CollectMatchingMeshSlotIndices(
const std::vector<std::optional<std::string>>& slot_mesh_paths,
Definition render_frame_context.h:17