From 35e6905ed8319d083c29f2eac0cfd63e59fcf694 Mon Sep 17 00:00:00 2001 From: Peter Li Date: Fri, 2 May 2025 23:05:36 -0700 Subject: [PATCH] videoplay --- README.md | 2 + engine/core/src/scene.zig | 4 +- engine/rend/shaders/lit_mesh.frag.hlsl | 47 +++----- engine/rend/shaders/lit_mesh.frag.json | 55 +++++++-- engine/rend/shaders/meshes.vert.hlsl | 4 + engine/rend/shaders/meshes.vert.json | 15 +++ engine/rend/src/meshes/MeshComponent.zig | 8 +- engine/rend/src/sgpu/embedded/plane.obj | 14 +++ engine/rend/src/sgpu/mesh-pool.zig | 6 +- engine/rend/src/sgpu/renderer.zig | 24 +++- extras/videoplayer/src/videoplayer.zig | 51 ++++++++- .../content/_shaders/dxil/lit_mesh.frag.dxil | Bin 6896 -> 7436 bytes .../content/_shaders/msl/lit_mesh.frag.msl | 107 +++++++++--------- projects/content/_shaders/msl/meshes.vert.msl | 4 +- .../content/_shaders/spv/lit_mesh.frag.spv | Bin 5708 -> 6740 bytes projects/content/_shaders/spv/meshes.vert.spv | Bin 2200 -> 2332 bytes projects/content/meshes/plane.obj | 14 +++ projects/sampleGame/main.zig | 35 +++--- 18 files changed, 267 insertions(+), 123 deletions(-) create mode 100644 engine/rend/src/sgpu/embedded/plane.obj create mode 100644 projects/content/meshes/plane.obj diff --git a/README.md b/README.md index 198500b..bff8d17 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,5 @@ zig version: 0.14 Backlog Labs Game Engine. run tools/scripts/first-time-setup.py + +ffmpeg -i INPUT.mp4 -c:v libtheora -q:v 7 -c:a libvorbis -q:a 4 OUTPUT.ogv diff --git a/engine/core/src/scene.zig b/engine/core/src/scene.zig index 8c6ca97..95323ca 100644 --- a/engine/core/src/scene.zig +++ b/engine/core/src/scene.zig @@ -30,8 +30,8 @@ pub const SceneObjectPosRot = struct { pub inline fn toTransform(self: @This()) core.Transform { var transform = core.zm.mul( - core.zm.scalingV(self.scale.toZm()), core.zm.matFromQuat(self.rotation.quat), + core.zm.scalingV(self.scale.toZm()), ); transform = core.zm.mul( @@ -317,8 +317,8 @@ pub const SceneSystem = struct { core.zm.mul( core.zm.translationV(posRot.position.toZm()), core.zm.mul( - core.zm.matFromQuat(posRot.rotation.quat), core.zm.scalingV(posRot.scale.toZm()), + core.zm.matFromQuat(posRot.rotation.quat), ), ), final, diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index 1a3a020..8493587 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -26,9 +26,12 @@ struct Scene uint textureMode; // 0 = regular triple, // 0x10 = video yuv, + uint pad0; // 0 = regular triple, + uint pad1; // 0 = regular triple, + uint pad2; // 0 = regular triple, }; -StructuredBuffer scene: register(t0, space0); +StructuredBuffer scene: register(t4, space2); // from learnopengl.com float3 BlinnPhong(float3 normal, float3 fragPos, float3 lightPos, float3 lightColor) @@ -186,7 +189,6 @@ float4 main( float4 s; - float alpha = s.w; int texMode = scene[Instance].textureMode; if (texMode == 0x10) // YUV @@ -196,44 +198,27 @@ float4 main( float3 Gcoeff = float3(1.164, -0.213, -0.533); float3 Bcoeff = float3(1.164, 2.112, 0.000); - float3 yuv, rgb; - - yuv.x =Texture0.Sample(Sampler0, UV).r; - yuv.y =Texture1.Sample(Sampler1, UV).r; - yuv.z =Texture2.Sample(Sampler2, UV).r; + float3 yuv; + float3 rgb; + float2 uv = UV; + yuv.x = Texture0.Sample(Sampler0, uv).r; + yuv.y = Texture1.Sample(Sampler1, uv).r; + yuv.z = Texture2.Sample(Sampler2, uv).r; yuv += offset; - rgb.r = dot(yuv, Rcoeff); - rgb.g = dot(yuv, Gcoeff); - rgb.b = dot(yuv, Bcoeff); - // " gl_FragColor = vec4(rgb, 1.0);\n" - // "uniform sampler2D samp0;\n" - // "uniform sampler2D samp1;\n" - // "uniform sampler2D samp2;\n" - // "const vec3 offset = vec3(-0.0625, -0.5, -0.5);\n" - // "const vec3 Rcoeff = vec3(1.164, 0.000, 1.793);\n" - // "const vec3 Gcoeff = vec3(1.164, -0.213, -0.533);\n" - // "const vec3 Bcoeff = vec3(1.164, 2.112, 0.000);\n" - // "void main() {\n" - // " vec2 tcoord;\n" - // " vec3 yuv, rgb;\n" - // " tcoord = gl_TexCoord[0].xy;\n" - // " yuv.x = texture2D(samp0, tcoord).r;\n" - // " yuv.y = texture2D(samp1, tcoord).r;\n" - // " yuv.z = texture2D(samp2, tcoord).r;\n" - // " yuv += offset;\n" - // " rgb.r = dot(yuv, Rcoeff);\n" - // " rgb.g = dot(yuv, Gcoeff);\n" - // " rgb.b = dot(yuv, Bcoeff);\n" - // " gl_FragColor = vec4(rgb, 1.0);\n" - // "}\n"; + rgb.x = dot(yuv, Rcoeff); + rgb.y = dot(yuv, Gcoeff); + rgb.z = dot(yuv, Bcoeff); + + s = float4(rgb, 1.0); } else if(texMode == 0) { s = Texture0.Sample(Sampler0, UV); } + float alpha = s.w; if(alpha < 0.01) { discard; diff --git a/engine/rend/shaders/lit_mesh.frag.json b/engine/rend/shaders/lit_mesh.frag.json index d242f78..3d4f16b 100644 --- a/engine/rend/shaders/lit_mesh.frag.json +++ b/engine/rend/shaders/lit_mesh.frag.json @@ -6,7 +6,7 @@ } ], "types" : { - "_15" : { + "_19" : { "name" : "type.Uniforms", "members" : [ { @@ -41,7 +41,7 @@ } ] }, - "_18" : { + "_22" : { "name" : "Scene", "members" : [ { @@ -55,15 +55,30 @@ "name" : "textureMode", "type" : "uint", "offset" : 64 + }, + { + "name" : "pad0", + "type" : "uint", + "offset" : 68 + }, + { + "name" : "pad1", + "type" : "uint", + "offset" : 72 + }, + { + "name" : "pad2", + "type" : "uint", + "offset" : 76 } ] }, - "_17" : { + "_21" : { "name" : "type.StructuredBuffer.Scene", "members" : [ { "name" : "_m0", - "type" : "_18", + "type" : "_22", "array" : [ 0 ], @@ -117,6 +132,18 @@ "set" : 2, "binding" : 0 }, + { + "type" : "texture2D", + "name" : "Texture1", + "set" : 2, + "binding" : 1 + }, + { + "type" : "texture2D", + "name" : "Texture2", + "set" : 2, + "binding" : 2 + }, { "type" : "texture2D", "name" : "DirectionalShadowDepthMap", @@ -131,6 +158,18 @@ "set" : 2, "binding" : 0 }, + { + "type" : "sampler", + "name" : "Sampler1", + "set" : 2, + "binding" : 1 + }, + { + "type" : "sampler", + "name" : "Sampler2", + "set" : 2, + "binding" : 2 + }, { "type" : "sampler", "name" : "DirectionalShadowSampler", @@ -140,17 +179,17 @@ ], "ssbos" : [ { - "type" : "_17", + "type" : "_21", "name" : "scene", "readonly" : true, "block_size" : 0, - "set" : 0, - "binding" : 0 + "set" : 2, + "binding" : 4 } ], "ubos" : [ { - "type" : "_15", + "type" : "_19", "name" : "type.Uniforms", "block_size" : 76, "set" : 3, diff --git a/engine/rend/shaders/meshes.vert.hlsl b/engine/rend/shaders/meshes.vert.hlsl index 6025cc7..7760044 100644 --- a/engine/rend/shaders/meshes.vert.hlsl +++ b/engine/rend/shaders/meshes.vert.hlsl @@ -29,6 +29,10 @@ struct Scene uint textureMode; // 0 = regular triple, // 0x10 = video yuv, + + uint pad0; // 0 = regular triple, + uint pad1; // 0 = regular triple, + uint pad2; // 0 = regular triple, }; StructuredBuffer scene: register(t0, space0); diff --git a/engine/rend/shaders/meshes.vert.json b/engine/rend/shaders/meshes.vert.json index 8437d7c..78f7a09 100644 --- a/engine/rend/shaders/meshes.vert.json +++ b/engine/rend/shaders/meshes.vert.json @@ -20,6 +20,21 @@ "name" : "textureMode", "type" : "uint", "offset" : 64 + }, + { + "name" : "pad0", + "type" : "uint", + "offset" : 68 + }, + { + "name" : "pad1", + "type" : "uint", + "offset" : 72 + }, + { + "name" : "pad2", + "type" : "uint", + "offset" : 76 } ] }, diff --git a/engine/rend/src/meshes/MeshComponent.zig b/engine/rend/src/meshes/MeshComponent.zig index 23a574c..b184590 100644 --- a/engine/rend/src/meshes/MeshComponent.zig +++ b/engine/rend/src/meshes/MeshComponent.zig @@ -11,7 +11,8 @@ entity: core.Entity = undefined, textureMode: u32 = 0, // DEBUG for-fun function, completely override what happens when the renderer tries to render this mesh. -cmrf: ?*rend.renderer.CustomMeshRenderFunc = null, +cmrf: ?rend.renderer.CustomMeshRenderFunc = null, +cmrf_ctx: ?*anyopaque = null, pub const textureMode_default = 0; pub const textureMode_videoYUV = 0x10; @@ -41,13 +42,16 @@ pub fn updateMesh(self: *@This()) void { pub fn updateTexture(self: *@This()) void { if (self.textureName.handle() != 0) { - self.setMeshByName(&self.textureName); + self.setTextureByName(&self.textureName); } } pub fn setMeshByName(self: *@This(), meshName: *core.Name) void { self.mesh = rend.getMeshByName(meshName); self.meshName = meshName.*; + + core.engine_log("getMeshByName {d} {s}", .{ meshName.handle(), meshName.utf8() }); + // core.engine_log("late bind of mesh {s}", .{meshName.utf8()}); } // script function diff --git a/engine/rend/src/sgpu/embedded/plane.obj b/engine/rend/src/sgpu/embedded/plane.obj new file mode 100644 index 0000000..b23ed94 --- /dev/null +++ b/engine/rend/src/sgpu/embedded/plane.obj @@ -0,0 +1,14 @@ +# Blender 4.4.3 +# www.blender.org +o Plane +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +vn -0.0000 1.0000 -0.0000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +s 0 +f 1/1/1 2/2/1 4/3/1 3/4/1 diff --git a/engine/rend/src/sgpu/mesh-pool.zig b/engine/rend/src/sgpu/mesh-pool.zig index 2002631..ad89fa8 100644 --- a/engine/rend/src/sgpu/mesh-pool.zig +++ b/engine/rend/src/sgpu/mesh-pool.zig @@ -69,14 +69,14 @@ pub const MeshPool = struct { switch (u) { .new => |new| { var name = new.name; - // core.engine_log("uploading mesh => {s}", .{name.utf8()}); + core.engine_log("uploading mesh => {s}", .{name.utf8()}); const indexSpan = try self.addTransfer(copyPass, self.indexBuffer, u32, &self.indexSpans, new.indices); const vertexSpan = try self.addTransfer(copyPass, self.vertexBuffer, meshes.MeshVertex, &self.vertexSpans, new.vertices); - // core.graphics_log("uploading {d} vertices and {d} indices", .{ vertexSpan.size, indexSpan.size }); + core.graphics_log("uploading {d} vertices and {d} indices", .{ vertexSpan.size, indexSpan.size }); - // core.engine_log("install mesh by name {d}", .{name.handle()}); + core.engine_log("install mesh by name {d}", .{name.handle()}); try self.installedMeshes.put(self.allocator, name.handle(), .{ .vertex = vertexSpan, .index = indexSpan, diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index 41089bc..dd6f7c5 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -360,7 +360,10 @@ pub const Renderer = struct { // todo.. sparse uploads self.ssboScene = self.device.createGPUBuffer(&.{ - .usage = .{ .bufferusageGraphicsStorageRead = true, .bufferusageVertex = true }, + .usage = .{ + .bufferusageGraphicsStorageRead = true, + .bufferusageVertex = true, + }, .size = MaxObjectCount * @sizeOf(meshes_vert.Scene), .props = 0, }); @@ -638,8 +641,11 @@ pub const Renderer = struct { self.state.pass = cmd.beginGPURenderPass(&targetInfo, 1, &depthTarget); const renderpass = self.state.pass.?; //renderpass.bindGPUGraphicsPipeline(self.testPipeline); + renderpass.bindGPUFragmentSamplers(1, &.{ .sampler = self.blockySampler, .texture = self.defaultTexture.texture }, 1); + renderpass.bindGPUFragmentSamplers(2, &.{ .sampler = self.blockySampler, .texture = self.defaultTexture.texture }, 1); renderpass.bindGPUVertexStorageBuffers(0, &self.ssboScene, 1); + renderpass.bindGPUFragmentStorageBuffers(0, &self.ssboScene, 1); renderpass.bindGPUVertexBuffers(0, &.{ .buffer = self.meshPool.vertexBuffer, .offset = 0 }, 1); renderpass.bindGPUIndexBuffer(&.{ .buffer = self.meshPool.indexBuffer, .offset = 0 }, .indexelementsize32bit); @@ -653,6 +659,8 @@ pub const Renderer = struct { try self.uploadUniforms(cmd); //rendering each mesh { + // placeholder textures + const container = rend.MeshComponent.BaseContainer; const uploadCount: usize = @min(container.dense.items.len, MaxObjectCount); for (0..uploadCount) |i| { @@ -663,11 +671,15 @@ pub const Renderer = struct { t = self.defaultTexture; } - renderpass.bindGPUFragmentSamplers(0, &.{ .texture = t.?.texture, .sampler = self.blockySampler }, 1); - if (component.mesh) |mesh| { + renderpass.bindGPUFragmentSamplers(0, &.{ .texture = t.?.texture, .sampler = self.blockySampler }, 1); + + if (component.cmrf) |cmrf| { + cmrf(component.cmrf_ctx); + } + renderpass.drawGPUIndexedPrimitives(mesh.index.size, 1, mesh.index.start, @intCast(mesh.vertex.start), @intCast(i)); - } + } else {} } } @@ -792,7 +804,7 @@ pub const RendererState = struct { swapchainTexture: ?*gpu.GPUTexture = null, }; -pub const CustomMeshRenderFunc = *const fn (mesh: *rend.MeshComponent, renderState: *RendererState) void; +pub const CustomMeshRenderFunc = *const fn (?*anyopaque) void; pub const GPUTextureType = gpu.GPUTexture; -const skybox_mesh_obj align(8) = @embedFile("embedded/plane.obj").*; +const plane_obj align(8) = @embedFile("embedded/plane.obj").*; diff --git a/extras/videoplayer/src/videoplayer.zig b/extras/videoplayer/src/videoplayer.zig index aec028c..030a265 100644 --- a/extras/videoplayer/src/videoplayer.zig +++ b/extras/videoplayer/src/videoplayer.zig @@ -36,6 +36,10 @@ yTexture: *gpu.GPUTexture = undefined, uTexture: *gpu.GPUTexture = undefined, vTexture: *gpu.GPUTexture = undefined, +ySampler: *gpu.GPUSampler = undefined, +uSampler: *gpu.GPUSampler = undefined, +vSampler: *gpu.GPUSampler = undefined, + gpuTransferBuffer: *gpu.GPUTransferBuffer = undefined, fn log(comptime fmt: []const u8, args: anytype) void { @@ -134,7 +138,7 @@ fn releaseAndUploadFrameBuffer(self: *@This(), cmd: *gpu.GPUCommandBuffer) void .rows_per_layer = @intCast(self.uvHeight), }, &std.mem.zeroInit(gpu.GPUTextureRegion, .{ - .texture = self.yTexture, + .texture = self.uTexture, .w = @as(u32, @intCast(self.uvWidth)), .h = @as(u32, @intCast(self.uvHeight)), .d = 1, @@ -151,7 +155,7 @@ fn releaseAndUploadFrameBuffer(self: *@This(), cmd: *gpu.GPUCommandBuffer) void .rows_per_layer = @intCast(self.uvHeight), }, &std.mem.zeroInit(gpu.GPUTextureRegion, .{ - .texture = self.yTexture, + .texture = self.vTexture, .w = @as(u32, @intCast(self.uvWidth)), .h = @as(u32, @intCast(self.uvHeight)), .d = 1, @@ -189,6 +193,10 @@ pub fn createTextures(self: *@This()) !void { .size = @as(u32, @intCast(self.width * self.height * 2)), .props = 0, }); + + self.ySampler = createVideoSampler(); + self.uSampler = createVideoSampler(); + self.vSampler = createVideoSampler(); } pub fn tick(self: *@This(), dt: f64) void { @@ -225,8 +233,45 @@ pub fn tick(self: *@This(), dt: f64) void { } } +fn bindVideoTextures(p: ?*anyopaque) void { + const self: *@This() = @ptrCast(@alignCast(p)); + const ctx = rend.context(); + const renderpass: *gpu.GPURenderPass = ctx.state.pass.?; + renderpass.bindGPUFragmentSamplers(0, &.{ .sampler = self.ySampler, .texture = self.yTexture }, 1); + renderpass.bindGPUFragmentSamplers(1, &.{ .sampler = self.uSampler, .texture = self.uTexture }, 1); + renderpass.bindGPUFragmentSamplers(2, &.{ .sampler = self.vSampler, .texture = self.vTexture }, 1); +} + +fn createVideoSampler() *gpu.GPUSampler { + return rend.context().device.createGPUSampler(&std.mem.zeroInit(gpu.GPUSamplerCreateInfo, .{ + .min_filter = .filterLinear, + .mag_filter = .filterLinear, + .mipmap_mode = .samplermipmapmodeNearest, + .address_mode_u = .sampleraddressmodeRepeat, + .address_mode_v = .sampleraddressmodeRepeat, + .address_mode_w = .sampleraddressmodeRepeat, + })); +} + // creates a video player entity -pub fn createVideoPlayerEntity() !core.Entity {} +pub fn createVideoPlayerEntity(self: *@This()) !core.Entity { + const entity = try core.createEntity(); + const scene = entity.addComponent(core.Scene).?; + const size = 5.0; + const h: f32 = @floatFromInt(self.height); + const w: f32 = @floatFromInt(self.width); + + scene.setScale(size, size, size * (h / w)); + scene.setRotation(core.Rotation.eulerX(core.radians(90.0))); + + if (entity.addComponent(rend.MeshComponent)) |mesh| { + mesh.cmrf = bindVideoTextures; + mesh.cmrf_ctx = self; + mesh.textureMode = 0x10; + mesh.setMesh("m_plane"); + } + return entity; +} pub fn destroy(self: *@This()) void { core.engine_logs("[Videoplayer] destroying player"); diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index 3a5c3ace158f02bdb461f8e8baa3a397a1fcb672..603e43070dda9a47846c0b5ba1e6d081bcf900a7 100644 GIT binary patch delta 3720 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 diff --git a/projects/content/_shaders/msl/lit_mesh.frag.msl b/projects/content/_shaders/msl/lit_mesh.frag.msl index b82398b..e9c4bca 100644 --- a/projects/content/_shaders/msl/lit_mesh.frag.msl +++ b/projects/content/_shaders/msl/lit_mesh.frag.msl @@ -17,7 +17,9 @@ struct Scene { float4x4 Model; uint textureMode; - char _m0_final_padding[12]; + uint pad0; + uint pad1; + uint pad2; }; struct type_StructuredBuffer_Scene @@ -25,8 +27,8 @@ struct type_StructuredBuffer_Scene Scene _m0[1]; }; -constant float4 _68 = {}; -constant float3 _70 = {}; +constant float4 _83 = {}; +constant float3 _85 = {}; struct main0_out { @@ -42,93 +44,94 @@ struct main0_in uint in_var_TEXCOORD4 [[user(locn4)]]; }; -fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(4294967295)]], texture2d Texture0 [[texture(0)]], texture2d DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler DirectionalShadowSampler [[sampler(3)]]) +fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], texture2d Texture0 [[texture(0)]], texture2d Texture1 [[texture(1)]], texture2d Texture2 [[texture(2)]], texture2d DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]], sampler DirectionalShadowSampler [[sampler(3)]]) { main0_out out = {}; - int _80 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); - float4 _93; - if (_80 == 16) + int _94 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); + float4 _128; + if (_94 == 16) { - _93 = _68; + float3 _115 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5); + _128 = float4(dot(_115, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_115, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_115, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0); } else { - float4 _92; - if (_80 == 0) + float4 _127; + if (_94 == 0) { - _92 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); + _127 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); } else { - _92 = _68; + _127 = _83; } - _93 = _92; + _128 = _127; } - if (_68.w < 0.00999999977648258209228515625) + if (_128.w < 0.00999999977648258209228515625) { discard_fragment(); } - float3 _146; + float3 _182; do { - float3 _103 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; - float _104 = length(_103); - float _105 = _104 * _104; - float _111; - if (_104 > 2.0) + float3 _139 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; + float _140 = length(_139); + float _141 = _140 * _140; + float _147; + if (_140 > 2.0) { - _111 = 0.5 / _105; + _147 = 0.5 / _141; } else { - _111 = 1.0 / _105; + _147 = 1.0 / _141; } - float _116; - if (_104 > 4.0) + float _152; + if (_140 > 4.0) { - _116 = _111 * 0.5; + _152 = _147 * 0.5; } else { - _116 = _111; + _152 = _147; } - float _118 = (_104 > 15.0) ? 0.0 : _116; - float _120 = (_118 > 1.0) ? 1.0 : _118; + float _154 = (_140 > 15.0) ? 0.0 : _152; + float _156 = (_154 > 1.0) ? 1.0 : _154; if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) { - _146 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _120; + _182 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _156; break; } - float3 _127 = fast::normalize(_103); - _146 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_127, in.in_var_TEXCOORD2), 0.0)) * _120) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_127 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _120); + float3 _163 = fast::normalize(_139); + _182 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_163, in.in_var_TEXCOORD2), 0.0)) * _156) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_163 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _156); break; } while(false); - float3 _163 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); - float3 _165; - _165.x = _163.x; - float2 _166 = _165.xy; - _166.y = -_163.y; - float _173; - int _176; - int _178; - _173 = 0.0; - _176 = 0; - _178 = -4; - float _174; - int _177; - for (; _178 <= 4; _173 = _174, _176 = _177, _178++) + float3 _199 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); + float3 _201; + _201.x = _199.x; + float2 _202 = _201.xy; + _202.y = -_199.y; + float _209; + int _212; + int _214; + _209 = 0.0; + _212 = 0; + _214 = -4; + float _210; + int _213; + for (; _214 <= 4; _209 = _210, _212 = _213, _214++) { - _177 = _176; - _174 = _173; - for (int _187 = -4; _187 <= 4; ) + _213 = _212; + _210 = _209; + for (int _223 = -4; _223 <= 4; ) { - _177++; - _174 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_166 + float2(float(_187) * 0.000244140625, float(_178) * 0.000244140625))).x); - _187++; + _213++; + _210 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_202 + float2(float(_223) * 0.000244140625, float(_214) * 0.000244140625))).x); + _223++; continue; } } - out.out_var_SV_Target0 = float4(powr(_93.xyz * ((float3(0.100000001490116119384765625) + _146) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_173 / float(_176))))), float3(0.4545454680919647216796875)), _68.w); + out.out_var_SV_Target0 = float4(powr(_128.xyz * ((float3(0.100000001490116119384765625) + _182) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_209 / float(_212))))), float3(0.4545454680919647216796875)), _128.w); return out; } diff --git a/projects/content/_shaders/msl/meshes.vert.msl b/projects/content/_shaders/msl/meshes.vert.msl index cadffb3..f98d6ae 100644 --- a/projects/content/_shaders/msl/meshes.vert.msl +++ b/projects/content/_shaders/msl/meshes.vert.msl @@ -7,7 +7,9 @@ struct Scene { float4x4 Model; uint textureMode; - char _m0_final_padding[12]; + uint pad0; + uint pad1; + uint pad2; }; struct type_StructuredBuffer_Scene diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index 0a38e131bac67b1911c14545ea80eb7e406086ad..7eb41f0f8db29b6644e69f317e7767bc7b76a000 100644 GIT binary patch literal 6740 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 QOZXiynqJ$ZtU3=o28`aa^8f$< literal 5708 zcmZve>3dyO6^BofHYIH-D5awLR49LfAN}HtPkrBW_e#%`$KB`GHSV?7T6>*+)6u?mUY50G zS+*#9mj7MP%i0Ugf~>QkyZVRvE0fKU%Erqs*1jm~kQBBvvIW^3_;xT>t&OYKs%|dm z1RRi^2F}EypK=HPwC_hT7q2e(=4}&s<F9RU8u@UuRv)j94jrnF)Q{}QCz^+LS0{>nUDWe`d{Q7x zMSf>Mi~MdJuN|m2#wL+Fv8Z<)uH{Dt>yzl_6*@aQT03~CiL&O|$enaSe|s=;DyM$k zP+{*X?DlWAeS3YhZlRt0Glu=09B$q9V_5Zg#QH`&tcL%HEB#y-~IfW#cQG zyR!R~jiu~9Wph+^Dfp?3~3L4<#K%Q zTf57Al*4`v)yFrow(!WZ(6u3}GhXQ0ldij@^IZM7rWrqbrLMQ6v(M_T0p3x3YsQZG z)$S_m?0+kV*4%41e)vS5z38m(Y^ZlQ2=wuLa-E7jXGXUSy}9Vq0nTRs5@{k2vR4S9VbPtV9bEqNyIiwgO#efF&aZ>>?cceDXG2a$*KXFY*9 z#|LZvi3c|==WX?O%sAeav0^E^x`|jkV(|K|z{}q=^~D1QuWU{}TE;Sm)#)x6c)J-#S;=ecN2h_RDX`n9A1e+ZD2Pns*z}Zk_hBEc@n!Y@d7=LbeaSEg{fP@Z8ChC#`QgyuPjZ=_u;lfgE$T6F$qPuWTcNy}lY;&ii8z&Dmv7|B18< zx|x{Xk?)~rD!cDmU>zY}2X7t9_V#*U9m?KEKd_D)@G`gEz`TsvhsC>l8L)T0Tl)K6 z#r^?!?ROB*nteCbJxsh_=nX)fZ`wbIx(Dj|H~!j&z+PZo^8bSBqpUvS+z4+Rb1=?6 zsLMFoZUXAuCvSev)_&j|Df{ic95_e&$Zs+96+j>LH_;h;^h%)K-nz^wVoU!s#5yPQX7E9@ii<|$lZH>bR%%Kig?4*UUN4$`~H!T1M(XE=ik z>80~@2pDG@(0&iT>T5uoxHsu;f$ss@j-u;@z8>ha4w%O%)Man9jRAG$A|J8F;nxCV zc_-l`^-j#84m{Hu^ml)pI|1*x>w)LK0qXKxZ4IE#bLFG1NqFOWw&#YAG|p`%A9K;) z{c-LTyyspB9!fnt46l9_aBuh?f!Edp!uM8q_3E_6J=_K#_i!D2%--$r+Rg*k`9`SA zI96VY;8Y z;Pv&pp9a<+XT1g9v-OE@;BI)ofn~t&-EZKnKz+>kJxQnDWqiMZnBljATVL4T4X-Te_&@{pj@7R=&3!*_rj;J^;L5XFz}NH1>ZG{(PWM+{OLy z-bFWvyZ8{i`nZb^!>bc6>-8?8XCHyr$G$~hJ_;W_({9h=%#Xo)=28%6ejHwXocRfO zb;1>AMt?quP9M*SJ)eTVJ^?bb$8)zMe;RaxICmxdXOey}&HV#Or(XC@+1Jkk<39i* zhtI*Q_YH|2KM1e>Vi3R8pNCiP+LO-t0=)XGRk8-SzY6q=K$~z`cf|P;ym8ds$#-M^ zUk2)p>;8w5&N%u-?GM9SdpEG>?)?f-?<{>4>Kh=9_wQ@)-dhg74!!}jErEU$`2A}8 z7AV`kjl3<{9!a)G=wmPZcYyW{;P2$|U8s9qzGd3K2h^L7y!m}U$di`B7Tfc+X=JJhoK7J3JkxM}Qmi-~=^^f1OWAN&Gfb(Kb?zivWgZ623_TGE) z-jOu^!2SAb-wn3#cfe^-ZU5!eE5QE%b*C#d diff --git a/projects/content/_shaders/spv/meshes.vert.spv b/projects/content/_shaders/spv/meshes.vert.spv index 27f8e9d2c085f3a88df120c67c2330df883922d5..954489e4a3d7042f5d11273a0c131d20dbe7a300 100644 GIT binary patch delta 158 zcmbOsI7ev01#312Rt8=M1_mY|E=Wu<08$JvF=mLEA+i_?M9c_CZ9Kn~X|ezdiz!UM sGEmS3h&`ZYg7kyLJdngd`axnon;V$}8HL%wmP-HyBw={-O_u%40HC}O{Qv*} delta 29 lcmbOuG(&L0h0Q#STbMTgVfJHWXJO!FU|^8g9Lu_&832&I2sQu! diff --git a/projects/content/meshes/plane.obj b/projects/content/meshes/plane.obj new file mode 100644 index 0000000..b23ed94 --- /dev/null +++ b/projects/content/meshes/plane.obj @@ -0,0 +1,14 @@ +# Blender 4.4.3 +# www.blender.org +o Plane +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +vn -0.0000 1.0000 -0.0000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +s 0 +f 1/1/1 2/2/1 4/3/1 3/4/1 diff --git a/projects/sampleGame/main.zig b/projects/sampleGame/main.zig index c4c650d..9389091 100644 --- a/projects/sampleGame/main.zig +++ b/projects/sampleGame/main.zig @@ -16,6 +16,7 @@ showWindow: bool = true, fpcamera: *FpCamera = undefined, videoplayer: *VideoPlayer = undefined, +videoplayerObject: core.Entity = undefined, pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This()); @@ -48,11 +49,11 @@ const assetReferences = [_]assets.AssetImportReference{ // "t_fox", // .{ .path = "gltf-samples/Fox/glTF/Texture.png" }, // ), - // assets.MakeImportRefOptions( - // "Texture", - // "t_empire", - // .{ .path = "textures/lost_empire-RGBA.png" }, - // ), + assets.MakeImportRefOptions( + "Texture", + "t_empire", + .{ .path = "textures/lost_empire-RGBA.png" }, + ), // assets.MakeImportRefOptions( // "Texture", // "t_skybox", @@ -80,7 +81,9 @@ pub fn prepare(self: *@This()) !void { try assets.loadList(assetReferences); self.videoplayer = try VideoPlayer.create(self.allocator); - try self.videoplayer.startPlayback("OUTPUT3.ogv"); + try self.videoplayer.startPlayback("LAPWING2.ogv"); + + self.videoplayerObject = try self.videoplayer.createVideoPlayerEntity(); // rend.setSkyboxTexture("t_skybox"); @@ -98,16 +101,18 @@ pub fn prepare(self: *@This()) !void { } self.fpcamera = try FpCamera.create(self.allocator); - self.fpcamera.setPosition(.{ .z = -15, .y = 20 }); + self.fpcamera.setPosition(.{ .z = 15 }); self.fpcamera.activateCamera(); { + core.engine_log("creating empire", .{}); + const lostEmpire = try core.createEntity(); const scene = lostEmpire.addComponent(core.Scene).?; scene.setPosition(.{ .y = -20 }); const empireMesh = lostEmpire.addComponent(rend.MeshComponent).?; empireMesh.setMesh("m_empire"); - // empireMesh.setTexture("t_empire"); + empireMesh.setTexture("t_empire"); } { @@ -121,13 +126,13 @@ pub fn prepare(self: *@This()) !void { } { - const lightbox = try core.createEntity(); - const scene = lightbox.addComponent(core.Scene).?; - scene.setPosition(.{ .y = 2 }); - scene.setScale(0.1, 0.1, 0.1); - const mesh = lightbox.addComponent(rend.MeshComponent).?; - mesh.setMesh("m_default_cube"); - mesh.setTexture("t_default"); + // const lightbox = try core.createEntity(); + // const scene = lightbox.addComponent(core.Scene).?; + // scene.setPosition(.{ .z = 20 }); + // scene.setScale(0.1, 0.1, 0.1); + // const mesh = lightbox.addComponent(rend.MeshComponent).?; + // mesh.setMesh("m_default_cube"); + // mesh.setTexture("t_default"); } const moveInput = try core.Axis2dBinding.create(core.MakeName("movement"));