diff --git a/engine/core/src/scene.zig b/engine/core/src/scene.zig index 95323ca..ef04fe9 100644 --- a/engine/core/src/scene.zig +++ b/engine/core/src/scene.zig @@ -315,11 +315,11 @@ pub const SceneSystem = struct { // }); repr.transform = core.zm.mul( core.zm.mul( - core.zm.translationV(posRot.position.toZm()), core.zm.mul( core.zm.scalingV(posRot.scale.toZm()), core.zm.matFromQuat(posRot.rotation.quat), ), + core.zm.translationV(posRot.position.toZm()), ), final, ); diff --git a/engine/platform/src/windowing.zig b/engine/platform/src/windowing.zig index 13a821e..9d9fe30 100644 --- a/engine/platform/src/windowing.zig +++ b/engine/platform/src/windowing.zig @@ -3,7 +3,7 @@ const core = @import("core"); const platform = @import("platform.zig"); const RingQueue = core.RingQueue; -const sdl3 = @import("sdl3"); +pub const sdl3 = @import("sdl3"); const tracy = core.tracy; pub const InputListenerError = error{ diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index 8493587..f8771da 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -191,7 +191,7 @@ float4 main( float4 s; int texMode = scene[Instance].textureMode; - if (texMode == 0x10) // YUV + if ((texMode & 0xf0) == 0x10) // YUV { float3 offset = float3(-0.0625, -0.5, -0.5); float3 Rcoeff = float3(1.164, 0.000, 1.793); @@ -213,11 +213,16 @@ float4 main( s = float4(rgb, 1.0); } - else if(texMode == 0) + else if((texMode & 0xf0) == 0x0) { s = Texture0.Sample(Sampler0, UV); } + if((texMode & 0x1) == 1) // srgb correction bit + { + s = pow(s, 2.2); + } + float alpha = s.w; if(alpha < 0.01) { @@ -235,6 +240,7 @@ float4 main( + col * BlinnPhong(Normal, WorldPos, lightPos, lightColor) + col * DirectionalLight(Normal, WorldPos, DirectionalShadowFragPos); + float4 rv = float4(pow(c2, 1.0 / 2.2), alpha); // === debug bone zone diff --git a/engine/rend/src/meshes/MeshComponent.zig b/engine/rend/src/meshes/MeshComponent.zig index b184590..a8e9305 100644 --- a/engine/rend/src/meshes/MeshComponent.zig +++ b/engine/rend/src/meshes/MeshComponent.zig @@ -9,7 +9,7 @@ texture: ?*Texture = null, entity: core.Entity = undefined, -textureMode: u32 = 0, +textureMode: u32 = 0, // bit // DEBUG for-fun function, completely override what happens when the renderer tries to render this mesh. cmrf: ?rend.renderer.CustomMeshRenderFunc = null, cmrf_ctx: ?*anyopaque = null, diff --git a/projects/LAPWING2.ogv b/projects/LAPWING2.ogv new file mode 100644 index 0000000..faa0e06 Binary files /dev/null and b/projects/LAPWING2.ogv differ diff --git a/projects/build.zig b/projects/build.zig index 972ae1e..bc41a45 100644 --- a/projects/build.zig +++ b/projects/build.zig @@ -19,4 +19,5 @@ pub fn build(b: *std.Build) void { blbuild.addExtraModule(sampleGame, "gameExtras"); blbuild.addExtraModule(sampleGame, "videoplayer"); + blbuild.addExtraModule(sampleGame, "doomplayer"); } diff --git a/projects/build.zig.zon b/projects/build.zig.zon index a83e3d0..3eb342f 100644 --- a/projects/build.zig.zon +++ b/projects/build.zig.zon @@ -15,7 +15,8 @@ .Backlog = .{ .path = "../" }, .SpirvReflect = .{ .path = "../lib/spirv-reflect-zig" }, .gameExtras = .{.path = "../extras/gameExtras"}, - .videoplayer = .{.path = "../extras/videoplayer"} + .videoplayer = .{.path = "../extras/videoplayer"}, + .doomplayer = .{.path = "../extras/doomplayer"}, }, .paths = .{ "", diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index 603e430..92682aa 100644 Binary files a/projects/content/_shaders/dxil/lit_mesh.frag.dxil and b/projects/content/_shaders/dxil/lit_mesh.frag.dxil differ diff --git a/projects/content/_shaders/msl/lit_mesh.frag.msl b/projects/content/_shaders/msl/lit_mesh.frag.msl index e9c4bca..3555b42 100644 --- a/projects/content/_shaders/msl/lit_mesh.frag.msl +++ b/projects/content/_shaders/msl/lit_mesh.frag.msl @@ -27,8 +27,8 @@ struct type_StructuredBuffer_Scene Scene _m0[1]; }; -constant float4 _83 = {}; -constant float3 _85 = {}; +constant float4 _86 = {}; +constant float3 _88 = {}; struct main0_out { @@ -47,91 +47,101 @@ struct main0_in 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 _94 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); - float4 _128; - if (_94 == 16) + int _97 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); + int _98 = _97 & 240; + float4 _132; + if (_98 == 16) { - 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); + float3 _119 = 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); + _132 = float4(dot(_119, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_119, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_119, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0); } else { - float4 _127; - if (_94 == 0) + float4 _131; + if (_98 == 0) { - _127 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); + _131 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); } else { - _127 = _83; + _131 = _86; } - _128 = _127; + _132 = _131; } - if (_128.w < 0.00999999977648258209228515625) + float4 _138; + if ((_97 & 1) == 1) + { + _138 = powr(_132, float4(2.2000000476837158203125)); + } + else + { + _138 = _132; + } + if (_138.w < 0.00999999977648258209228515625) { discard_fragment(); } - float3 _182; + float3 _192; do { - float3 _139 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; - float _140 = length(_139); - float _141 = _140 * _140; - float _147; - if (_140 > 2.0) + float3 _149 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; + float _150 = length(_149); + float _151 = _150 * _150; + float _157; + if (_150 > 2.0) { - _147 = 0.5 / _141; + _157 = 0.5 / _151; } else { - _147 = 1.0 / _141; + _157 = 1.0 / _151; } - float _152; - if (_140 > 4.0) + float _162; + if (_150 > 4.0) { - _152 = _147 * 0.5; + _162 = _157 * 0.5; } else { - _152 = _147; + _162 = _157; } - float _154 = (_140 > 15.0) ? 0.0 : _152; - float _156 = (_154 > 1.0) ? 1.0 : _154; + float _164 = (_150 > 15.0) ? 0.0 : _162; + float _166 = (_164 > 1.0) ? 1.0 : _164; if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) { - _182 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _156; + _192 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _166; break; } - 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); + float3 _173 = fast::normalize(_149); + _192 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_173, in.in_var_TEXCOORD2), 0.0)) * _166) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_173 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _166); break; } while(false); - 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++) + float3 _209 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); + float3 _211; + _211.x = _209.x; + float2 _212 = _211.xy; + _212.y = -_209.y; + float _219; + int _222; + int _224; + _219 = 0.0; + _222 = 0; + _224 = -4; + float _220; + int _223; + for (; _224 <= 4; _219 = _220, _222 = _223, _224++) { - _213 = _212; - _210 = _209; - for (int _223 = -4; _223 <= 4; ) + _223 = _222; + _220 = _219; + for (int _233 = -4; _233 <= 4; ) { - _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++; + _220 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_212 + float2(float(_233) * 0.000244140625, float(_224) * 0.000244140625))).x); + _233++; continue; } } - 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); + out.out_var_SV_Target0 = float4(powr(_138.xyz * ((float3(0.100000001490116119384765625) + _192) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_219 / float(_222))))), float3(0.4545454680919647216796875)), _138.w); return out; } diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index 7eb41f0..c74ceb9 100644 Binary files a/projects/content/_shaders/spv/lit_mesh.frag.spv and b/projects/content/_shaders/spv/lit_mesh.frag.spv differ diff --git a/projects/sampleGame/main.zig b/projects/sampleGame/main.zig index 9389091..2b49966 100644 --- a/projects/sampleGame/main.zig +++ b/projects/sampleGame/main.zig @@ -16,7 +16,9 @@ showWindow: bool = true, fpcamera: *FpCamera = undefined, videoplayer: *VideoPlayer = undefined, +doomplayer: *DoomPlayer = undefined, videoplayerObject: core.Entity = undefined, +doomplayerObject: core.Entity = undefined, pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This()); @@ -82,9 +84,11 @@ pub fn prepare(self: *@This()) !void { try assets.loadList(assetReferences); self.videoplayer = try VideoPlayer.create(self.allocator); try self.videoplayer.startPlayback("LAPWING2.ogv"); - self.videoplayerObject = try self.videoplayer.createVideoPlayerEntity(); + self.doomplayer = try DoomPlayer.create(self.allocator); + self.doomplayerObject = try self.doomplayer.createEntity(); + // rend.setSkyboxTexture("t_skybox"); const exitInput = try core.ActionBinding.create(core.MakeName("exit")); @@ -266,6 +270,7 @@ pub fn tick(self: *@This(), dt: f64) void { const fdt: f32 = @floatCast(dt); self.videoplayer.tick(dt); + self.doomplayer.tick(dt); self.fpcamera.tick(dt); var movement = self.fpcamera.getForwardXZ().fmul(self.moveVector.z * fdt * self.cameraSpeed); @@ -294,7 +299,9 @@ pub fn tick(self: *@This(), dt: f64) void { } pub fn deinit(self: *@This()) void { + self.doomplayer.destroy(); self.fpcamera.destroy(); + self.videoplayer.destroy(); self.allocator.destroy(self); } @@ -309,6 +316,7 @@ pub fn main() anyerror!void { }); } +const DoomPlayer = @import("doomplayer"); const VideoPlayer = @import("videoplayer"); const FpCamera = @import("gameExtras").FpCamera; const std = @import("std");