diff --git a/Sources/armory/renderpath/RenderPathRaytracer.hx b/Sources/armory/renderpath/RenderPathRaytracer.hx index 9a24a174..7ca90043 100644 --- a/Sources/armory/renderpath/RenderPathRaytracer.hx +++ b/Sources/armory/renderpath/RenderPathRaytracer.hx @@ -37,59 +37,54 @@ class RenderPathRaytracer { public static function init(_path:RenderPath) { path = _path; - kha.Assets.loadBlobFromPath("pt_raygeneration.o", function(rayShader:kha.Blob) { - kha.Assets.loadBlobFromPath("pt_closesthit.o", function(hitShader:kha.Blob) { - kha.Assets.loadBlobFromPath("pt_miss.o", function(missShader:kha.Blob) { - - ready = true; - - // Command list - commandList = new CommandList(); - for (i in 0...bufferCount) { - framebuffers[i] = new kha.graphics5.RenderTarget(iron.App.w(), iron.App.h(), 16, false, TextureFormat.RGBA32, - -1, -i - 1 /* hack in an index for backbuffer render targets */); - } - commandList.end(); // TODO: Otherwise "Reset fails because the command list was not closed" + kha.Assets.loadBlobFromPath("raytrace.cso", function(rayTraceShader:kha.Blob) { + ready = true; + + // Command list + commandList = new CommandList(); + for (i in 0...bufferCount) { + framebuffers[i] = new kha.graphics5.RenderTarget(iron.App.w(), iron.App.h(), 16, false, TextureFormat.RGBA32, + -1, -i - 1 /* hack in an index for backbuffer render targets */); + } + commandList.end(); // TODO: Otherwise "Reset fails because the command list was not closed" - // Pipeline - constantBuffer = new ConstantBuffer(21 * 4); - pipeline = new RayTracePipeline(commandList, rayShader, hitShader, missShader, constantBuffer); + // Pipeline + constantBuffer = new ConstantBuffer(21 * 4); + pipeline = new RayTracePipeline(commandList, rayTraceShader, constantBuffer); - // Acceleration structure - var structure = new VertexStructure(); - structure.add("pos", VertexData.Float3); - structure.add("nor", VertexData.Float3); - structure.add("tex", VertexData.Float2); - var md = iron.Scene.active.meshes[0].data; - var geom = md.geom; - var verts = Std.int(geom.positions.length / 4); - var vb = new VertexBuffer(verts, structure, kha.graphics5.Usage.StaticUsage); - var vba = vb.lock(); - // iron.data.Geometry.buildVertices(vba, geom.positions, geom.normals); - for (i in 0...verts) { - vba[i * 8 ] = (geom.positions[i * 4 ] / 32767) * md.scalePos; - vba[i * 8 + 1] = (geom.positions[i * 4 + 1] / 32767) * md.scalePos; - vba[i * 8 + 2] = (geom.positions[i * 4 + 2] / 32767) * md.scalePos; - vba[i * 8 + 3] = geom.normals [i * 2 ] / 32767; - vba[i * 8 + 4] = geom.normals [i * 2 + 1] / 32767; - vba[i * 8 + 5] = geom.positions[i * 4 + 3] / 32767; - vba[i * 8 + 6] = (geom.uvs[i * 2 ] / 32767) * md.scaleTex; - vba[i * 8 + 7] = (geom.uvs[i * 2 + 1] / 32767) * md.scaleTex; - } - vb.unlock(); + // Acceleration structure + var structure = new VertexStructure(); + structure.add("pos", VertexData.Float3); + structure.add("nor", VertexData.Float3); + structure.add("tex", VertexData.Float2); + var md = iron.Scene.active.meshes[0].data; + var geom = md.geom; + var verts = Std.int(geom.positions.length / 4); + var vb = new VertexBuffer(verts, structure, kha.graphics5.Usage.StaticUsage); + var vba = vb.lock(); + // iron.data.Geometry.buildVertices(vba, geom.positions, geom.normals); + for (i in 0...verts) { + vba[i * 8 ] = (geom.positions[i * 4 ] / 32767) * md.scalePos; + vba[i * 8 + 1] = (geom.positions[i * 4 + 1] / 32767) * md.scalePos; + vba[i * 8 + 2] = (geom.positions[i * 4 + 2] / 32767) * md.scalePos; + vba[i * 8 + 3] = geom.normals [i * 2 ] / 32767; + vba[i * 8 + 4] = geom.normals [i * 2 + 1] / 32767; + vba[i * 8 + 5] = geom.positions[i * 4 + 3] / 32767; + vba[i * 8 + 6] = (geom.uvs[i * 2 ] / 32767) * md.scaleTex; + vba[i * 8 + 7] = (geom.uvs[i * 2 + 1] / 32767) * md.scaleTex; + } + vb.unlock(); - var id = geom.indices[0]; - var ib = new IndexBuffer(id.length, kha.graphics5.Usage.StaticUsage); - var iba = ib.lock(); - for (i in 0...iba.length) iba[i] = id[i]; - ib.unlock(); + var id = geom.indices[0]; + var ib = new IndexBuffer(id.length, kha.graphics5.Usage.StaticUsage); + var iba = ib.lock(); + for (i in 0...iba.length) iba[i] = id[i]; + ib.unlock(); - accel = new AccelerationStructure(commandList, vb, ib); + accel = new AccelerationStructure(commandList, vb, ib); - // Output - target = new RayTraceTarget(iron.App.w(), iron.App.h()); - }); - }); + // Output + target = new RayTraceTarget(iron.App.w(), iron.App.h()); }); }