feat: major engine overhaul - scene demo with lighting, sphere, ground

- Scene Demo: cube + sphere + ground plane with proper lighting
- Audio: XAudio2 dynamic loading + WAV playback
- Physics: expanded collision system
- Renderer: improved pipeline with materials
- UI: extended widget system
- VisualScript: enhanced serializer + block interactions
- ASM: optimized math/memory/profiling routines
- Window: mouse input + scroll support
This commit is contained in:
shuiyu1123 committed 2026-07-12 08:21:07 +08:00
1 parent 2653926d85
commit 0669d102ce
35 files changed
+1844 -314

No files matched your search

+17 -7
View File
@@ -1,22 +1,30 @@
#include "shader.h"
#include "../Core/logger.h"
#include <d3dcompiler.h>
#include <stdlib.h>
#include <string.h>
static const char* default_vs =
"struct VS_IN{float3 pos:POSITION;float3 n:NORMAL;float2 uv:TEXCOORD;float4 col:COLOR;};"
"struct PS_IN{float4 pos:SV_POSITION;float4 col:COLOR;};"
"cbuffer CB:register(b0){float4x4 WVP;};"
"PS_IN main(VS_IN i){PS_IN o;o.pos=mul(float4(i.pos,1),WVP);o.col=i.col;return o;}";
"struct PS_IN{float4 pos:SV_POSITION;float3 world_n:NORMAL;float2 uv:TEXCOORD;float4 col:COLOR;};"
"cbuffer CB:register(b0){float4x4 World;float4x4 WVP;float4 LightDir;float4 LightColor;float4 AmbientColor;float4 UseTexture;float4 DiffuseColor;};"
"PS_IN main(VS_IN i){PS_IN o;o.pos=mul(float4(i.pos,1),WVP);o.world_n=normalize(mul(float4(i.n,0),World).xyz);o.uv=i.uv;o.col=i.col*DiffuseColor;return o;}";
static const char* default_ps =
"struct PS_IN{float4 pos:SV_POSITION;float4 col:COLOR;};"
"float4 main(PS_IN i):SV_TARGET{return i.col;}";
"struct PS_IN{float4 pos:SV_POSITION;float3 world_n:NORMAL;float2 uv:TEXCOORD;float4 col:COLOR;};"
"cbuffer CB:register(b0){float4x4 World;float4x4 WVP;float4 LightDir;float4 LightColor;float4 AmbientColor;float4 UseTexture;float4 DiffuseColor;};"
"Texture2D tex:register(t0);SamplerState samp:register(s0);"
"float4 main(PS_IN i):SV_TARGET{float3 ld=normalize(LightDir.xyz);float diff=saturate(dot(i.world_n,ld));float4 light=AmbientColor+LightColor*diff;float4 albedo=i.col;if(UseTexture.x>0.5)albedo=albedo*tex.Sample(samp,i.uv);return albedo*light;}";
static ID3DBlob* compile_shader(const char* code, uint32_t len, const char* target) {
ID3DBlob *blob = NULL, *err = NULL;
D3DCompile(code, len, NULL, NULL, NULL, "main", target, D3DCOMPILE_OPTIMIZATION_LEVEL3, 0, &blob, &err);
if (err) err->lpVtbl->Release(err);
UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL3 | D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
D3DCompile(code, len, NULL, NULL, NULL, "main", target, flags, 0, &blob, &err);
if (err) {
const char* msg = (const char*)err->lpVtbl->GetBufferPointer(err);
LOG_ERROR("Shader compile error (%s): %s", target, msg);
err->lpVtbl->Release(err);
}
return blob;
}
@@ -41,6 +49,7 @@ int shader_compile(Shader* s, ID3D11Device* dev, const char* vs_code, const char
ID3DBlob* vs_blob = compile_shader(vs_code, vs_len, "vs_5_0");
ID3DBlob* ps_blob = compile_shader(ps_code, ps_len, "ps_5_0");
if (!vs_blob || !ps_blob) {
LOG_ERROR("Failed to compile default shader (vs=%p ps=%p)", (void*)vs_blob, (void*)ps_blob);
if (vs_blob) vs_blob->lpVtbl->Release(vs_blob);
if (ps_blob) ps_blob->lpVtbl->Release(ps_blob);
return 0;
@@ -67,6 +76,7 @@ void shader_bind(Shader* s, ID3D11DeviceContext* ctx) {
ctx->lpVtbl->PSSetShader(ctx, s->ps, NULL, 0);
ctx->lpVtbl->IASetInputLayout(ctx, s->layout);
ctx->lpVtbl->VSSetConstantBuffers(ctx, 0, 1, &s->cb);
ctx->lpVtbl->PSSetConstantBuffers(ctx, 0, 1, &s->cb);
}
void shader_set_matrix(Shader* s, ID3D11DeviceContext* ctx, const float* data) {