Update shader load

This commit is contained in:
luboslenco 2019-04-15 13:47:51 +02:00
parent a8961dcb4e
commit d4680b5e1a

View file

@ -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());
});
}