Refactor and enhance graphics and audio systems
Updated target frameworks to .NET 10.0 across multiple projects for compatibility with the latest features. Refactored namespaces and introduced new classes for shader descriptors, FMOD integration, and DirectX 12 utilities using TerraFX. Replaced `Win32` bindings with TerraFX equivalents for DirectX 12. Added a C# wrapper for FMOD Studio API, including DSP and error handling. Enhanced entity queries, component storage, and query filters for better performance and type safety. Introduced new test projects and updated the solution structure. Added `meshoptimizer` bindings and integrated `meshoptimizer_native.dll`. Improved code readability, maintainability, and performance.
This commit is contained in:
58
Ghost.Shader/BuiltIn/Common.hlsl
Normal file
58
Ghost.Shader/BuiltIn/Common.hlsl
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef COMMON_HLSL
|
||||
#define COMMON_HLSL
|
||||
|
||||
#undef USE_TRADITIONAL_BINDLESS // Just for testing, this should be handled by engine feature level.
|
||||
|
||||
#if defined(USE_TRADITIONAL_BINDLESS)
|
||||
#define GLOBAL_TEXTURE2D_HEAP_SIZE 32768
|
||||
#define GLOBAL_TEXTURE3D_HEAP_SIZE 32
|
||||
#define GLOBAL_TEXTURECUBE_HEAP_SIZE 32
|
||||
#define GLOBAL_TEXTURE2D_ARRAY_HEAP_SIZE 256
|
||||
#define GLOBAL_TEXTURECUBE_ARRAY_HEAP_SIZE 32
|
||||
#define GLOBAL_SAMPLER_HEAP_SIZE 32
|
||||
|
||||
#define GLOBAL_TEXTURE2D_HEAP GlobalTexture2DHeap
|
||||
#define GLOBAL_TEXTURE3D_HEAP GlobalTexture3DHeap
|
||||
#define GLOBAL_TEXTURECUBE_HEAP GlobalTextureCubeHeap
|
||||
#define GLOBAL_TEXTURE2D_ARRAY_HEAP GlobalTexture2DArrayHeap
|
||||
#define GLOBAL_TEXTURECUBE_ARRAY_HEAP GlobalTextureCubeArrayHeap
|
||||
#define GLOBAL_SAMPLER_HEAP GlobalSamplerHeap
|
||||
#else
|
||||
#define GLOBAL_TEXTURE2D_HEAP ResourceDescriptorHeap
|
||||
#define GLOBAL_TEXTURE3D_HEAP ResourceDescriptorHeap
|
||||
#define GLOBAL_TEXTURECUBE_HEAP ResourceDescriptorHeap
|
||||
#define GLOBAL_TEXTURE2D_ARRAY_HEAP ResourceDescriptorHeap
|
||||
#define GLOBAL_TEXTURECUBE_ARRAY_HEAP ResourceDescriptorHeap
|
||||
#define GLOBAL_SAMPLER_HEAP SamplerDescriptorHeap
|
||||
#endif
|
||||
|
||||
|
||||
#define TEXTURE2D_BINDLESS uint
|
||||
#define TEXTURE3D_BINDLESS uint
|
||||
#define TEXTURECUBE_BINDLESS uint
|
||||
#define TEXTURE2D_ARRAY_BINDLESS uint
|
||||
#define TEXTURECUBE_ARRAY_BINDLESS uint
|
||||
|
||||
#define SAMPLER_BINDLESS uint
|
||||
|
||||
#define STRUCT_BUFFER_BINDLESS uint
|
||||
#define BYTE_ADDRESS_BUFFER_BINDLESS uint
|
||||
|
||||
|
||||
#define GET_TEXTURE2D_BINDLESS(id) GLOBAL_TEXTURE2D_HEAP[id]
|
||||
#define GET_TEXTURE2D_ARRAY_BINDLESS(id) GLOBAL_TEXTURE2D_ARRAY_HEAP[id]
|
||||
#define GET_TEXTURE3D_BINDLESS(id) GLOBAL_TEXTURE3D_HEAP[id]
|
||||
#define GET_TEXTURECUBE_BINDLESS(id) GLOBAL_TEXTURECUBE_HEAP[id]
|
||||
#define GET_TEXTURECUBE_ARRAY_BINDLESS(id) GLOBAL_TEXTURECUBE_ARRAY_HEAP[id]
|
||||
#define GET_SAMPLER_BINDLESS(id) GLOBAL_SAMPLER_HEAP[id]
|
||||
|
||||
|
||||
#define SAMPLE_TEXTURE2D(tex, samp, uv) tex.Sample(samp, uv)
|
||||
#define SAMPLE_TEXTURE2D_LEVEL(tex, samp, uv, level) tex.SampleLevel(samp, uv, level)
|
||||
#define SAMPLE_TEXTURE2D_BINDLESS(texId, sampId, uv) GET_TEXTURE2D_BINDLESS(texId).Sample(GET_BINDLESS_SAMPLER(sampId), uv)
|
||||
#define SAMPLE_TEXTURE2D_LEVEL_BINDLESS(texId, sampId, uv, level) GET_TEXTURE2D_BINDLESS(texId).SampleLevel(GET_BINDLESS_SAMPLER(sampId), uv, level)
|
||||
|
||||
#define SAMPLE_TEXTURE2D_ARRAY(tex, samp, uv, index) tex.Sample(samp, uv, index)
|
||||
#define SAMPLE_TEXTURE2D_ARRAY_BINDLESS(texId, sampId, uv, index) GET_TEXTURE2D_ARRAY_BINDLESS(texId).Sample(GET_BINDLESS_SAMPLER(sampId), uv, index)
|
||||
|
||||
#endif // COMMON_HLSL
|
||||
50
Ghost.Shader/BuiltIn/Properties.hlsl
Normal file
50
Ghost.Shader/BuiltIn/Properties.hlsl
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef PROPERTIES_HLSL
|
||||
#define PROPERTIES_HLSL
|
||||
|
||||
#include "F:/csharp/GhostEngine/Ghost.Shader/BuiltIn/Common.hlsl"
|
||||
|
||||
struct PerViewData
|
||||
{
|
||||
float4x4 cameraMatrix;
|
||||
float4 screenSize; // xy = size, zw = 1/size
|
||||
};
|
||||
|
||||
struct PerObjectData
|
||||
{
|
||||
float4x4 localToWorld;
|
||||
float3 worldBoundsMin;
|
||||
BYTE_ADDRESS_BUFFER_BINDLESS vertexBuffer;
|
||||
float3 worldBoundsMax;
|
||||
BYTE_ADDRESS_BUFFER_BINDLESS indexBuffer;
|
||||
};
|
||||
|
||||
cbuffer GlobalConstants : register(b0)
|
||||
{
|
||||
GlobalData g_GlobalData;
|
||||
};
|
||||
|
||||
cbuffer PerViewConstants : register(b1)
|
||||
{
|
||||
PerViewData g_PerViewData;
|
||||
};
|
||||
|
||||
cbuffer PerObjectConstants : register(b2)
|
||||
{
|
||||
PerObjectData g_PerObjectData;
|
||||
};
|
||||
|
||||
cbuffer PerMaterialConstants : register(b3)
|
||||
{
|
||||
PerMaterialData g_PerMaterialData;
|
||||
};
|
||||
|
||||
#if defined(USE_TRADITIONAL_BINDLESS)
|
||||
Texture2D GlobalTexture2DHeap[GLOBAL_TEXTURE2D_HEAP_SIZE] : register(t0);
|
||||
Texture3D GlobalTexture3DHeap[GLOBAL_TEXTURE3D_HEAP_SIZE] : register(t0);
|
||||
TextureCube GlobalTextureCubeHeap[GLOBAL_TEXTURECUBE_HEAP_SIZE] : register(t0);
|
||||
Texture2DArray GlobalTexture2DArrayHeap[GLOBAL_TEXTURE2D_ARRAY_HEAP_SIZE] : register(t0);
|
||||
TextureCubeArray GlobalTextureCubeArrayHeap[GLOBAL_TEXTURECUBE_ARRAY_HEAP_SIZE] : register(t0);
|
||||
SamplerState GlobalSamplerHeap[GLOBAL_SAMPLER_HEAP_SIZE] : register(s0);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user