From 95c08e3424f24c3ae9f3d297c340c87deeb100e9 Mon Sep 17 00:00:00 2001 From: Onek8 Date: Wed, 28 May 2025 22:15:48 +0000 Subject: [PATCH] t3du - Fix draw camera texture node --- .../leenkx/logicnode/DrawCameraTextureNode.hx | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/leenkx/Sources/leenkx/logicnode/DrawCameraTextureNode.hx b/leenkx/Sources/leenkx/logicnode/DrawCameraTextureNode.hx index e367709..58eff7c 100644 --- a/leenkx/Sources/leenkx/logicnode/DrawCameraTextureNode.hx +++ b/leenkx/Sources/leenkx/logicnode/DrawCameraTextureNode.hx @@ -2,6 +2,9 @@ package leenkx.logicnode; import iron.Scene; import iron.object.CameraObject; +import iron.math.Vec4; +import iron.math.Quat; +import leenkx.math.Helper; import leenkx.renderpath.RenderPathCreator; @@ -27,11 +30,19 @@ class DrawCameraTextureNode extends LogicNode { final c = inputs[2].get(); assert(Error, Std.isOfType(c, CameraObject), "Camera must be a camera object!"); cam = cast(c, CameraObject); - rt = kha.Image.createRenderTarget(iron.App.w(), iron.App.h()); + rt = kha.Image.createRenderTarget(iron.App.w(), iron.App.h(), + kha.graphics4.TextureFormat.RGBA32, + kha.graphics4.DepthStencilFormat.NoDepthAndStencil); assert(Error, mo.materials[matSlot].contexts[0].textures != null, 'Object "${mo.name}" has no diffuse texture to render to'); - mo.materials[matSlot].contexts[0].textures[0] = rt; // Override diffuse texture + final n = inputs[5].get(); + for (i => node in mo.materials[matSlot].contexts[0].raw.bind_textures){ + if (node.name == n){ + mo.materials[matSlot].contexts[0].textures[i] = rt; // Override diffuse texture + break; + } + } tree.notifyOnRender(render); runOutput(0); @@ -48,8 +59,20 @@ class DrawCameraTextureNode extends LogicNode { iron.Scene.active.camera = cam; cam.renderTarget = rt; + #if kha_html5 + var q: Quat = new Quat(); + q.fromAxisAngle(new Vec4(0, 0, 1, 1), Helper.degToRad(180)); + cam.transform.rot.mult(q); + cam.transform.buildMatrix(); + #end + cam.renderFrame(g); + #if kha_html5 + cam.transform.rot.mult(q); + cam.transform.buildMatrix(); + #end + cam.renderTarget = oldRT; iron.Scene.active.camera = sceneCam; }