@@ -22,6 +22,7 @@ void SceneEncoder::Add(const SceneCommand& command) {
2222}
2323
2424static void EncodeCommand (const SceneContext& scene_context,
25+ const Matrix& view_transform,
2526 RenderPass& render_pass,
2627 const SceneCommand& scene_command) {
2728 auto & host_buffer = render_pass.GetTransientsBuffer ();
@@ -39,14 +40,15 @@ static void EncodeCommand(const SceneContext& scene_context,
3940 scene_command.material ->BindToCommand (scene_context, host_buffer, cmd);
4041
4142 GeometryVertexShader::VertInfo info;
42- info.mvp = scene_command.transform ;
43+ info.mvp = view_transform * scene_command.transform ;
4344 GeometryVertexShader::BindVertInfo (cmd, host_buffer.EmplaceUniform (info));
4445
4546 render_pass.AddCommand (std::move (cmd));
4647}
4748
4849std::shared_ptr<CommandBuffer> SceneEncoder::BuildSceneCommandBuffer (
4950 const SceneContext& scene_context,
51+ const Camera& camera,
5052 const RenderTarget& render_target) const {
5153 auto command_buffer = scene_context.GetContext ()->CreateCommandBuffer ();
5254 if (!command_buffer) {
@@ -61,7 +63,9 @@ std::shared_ptr<CommandBuffer> SceneEncoder::BuildSceneCommandBuffer(
6163 }
6264
6365 for (auto & command : commands_) {
64- EncodeCommand (scene_context, *render_pass, command);
66+ Matrix view_transform =
67+ camera.GetTransform (render_pass->GetRenderTargetSize ());
68+ EncodeCommand (scene_context, view_transform, *render_pass, command);
6569 }
6670
6771 if (!render_pass->EncodeCommands ()) {
0 commit comments