@@ -22,6 +22,7 @@ void SceneEncoder::Add(const SceneCommand& command) {
2222}
2323
2424static void EncodeCommand (const SceneContext& scene_context,
25+ const Camera& camera,
2526 RenderPass& render_pass,
2627 const SceneCommand& scene_command) {
2728 auto & host_buffer = render_pass.GetTransientsBuffer ();
@@ -39,14 +40,16 @@ 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 = camera.GetTransform (render_pass.GetRenderTargetSize ()) *
44+ scene_command.transform ;
4345 GeometryVertexShader::BindVertInfo (cmd, host_buffer.EmplaceUniform (info));
4446
4547 render_pass.AddCommand (std::move (cmd));
4648}
4749
4850std::shared_ptr<CommandBuffer> SceneEncoder::BuildSceneCommandBuffer (
4951 const SceneContext& scene_context,
52+ const Camera& camera,
5053 const RenderTarget& render_target) const {
5154 auto command_buffer = scene_context.GetContext ()->CreateCommandBuffer ();
5255 if (!command_buffer) {
@@ -61,7 +64,7 @@ std::shared_ptr<CommandBuffer> SceneEncoder::BuildSceneCommandBuffer(
6164 }
6265
6366 for (auto & command : commands_) {
64- EncodeCommand (scene_context, *render_pass, command);
67+ EncodeCommand (scene_context, camera, *render_pass, command);
6568 }
6669
6770 if (!render_pass->EncodeCommands ()) {
0 commit comments