Fixed BlinnPhong shading

This commit is contained in:
Dynamitos
2023-02-27 13:52:57 +01:00
parent f46262b66e
commit f1062e5bcb
15 changed files with 131 additions and 316 deletions
+27 -4
View File
@@ -18,6 +18,29 @@ Scene::Scene(Gfx::PGraphics graphics)
: graphics(graphics)
, physics(registry)
{
StructuredBufferCreateInfo structInfo = {
.resourceData = {
.size = sizeof(DirectionalLight) * MAX_DIRECTIONAL_LIGHTS,
.data = nullptr,
},
.stride = sizeof(DirectionalLight),
.bDynamic = true,
};
lightEnv.directionalLights = graphics->createStructuredBuffer(structInfo);
structInfo.resourceData.size = sizeof(PointLight) * MAX_POINT_LIGHTS;
lightEnv.pointLights = graphics->createStructuredBuffer(structInfo);
UniformBufferCreateInfo uniformInfo = {
.resourceData = {
.size = sizeof(uint32),
.data = nullptr
},
.bDynamic = true
};
lightEnv.numDirectional = graphics->createUniformBuffer(uniformInfo);
lightEnv.numPoints = graphics->createUniformBuffer(uniformInfo);
}
Scene::~Scene()
@@ -84,12 +107,12 @@ Array<MeshBatch> Scene::getStaticMeshes()
LightEnv Scene::getLightBuffer() const
{
LightEnv result;
result.directionalLights[0].color = Vector4(0.4, 0.3, 0.5, 1.0);
result.directionalLights[0].direction = Vector4(0.5, -0.5, 0, 0);
result.directionalLights[0].intensity = Vector4(1.0, 0.9, 0.7, 0.5);
result.numDirectionalLights = 1;
result.numPointLights = 0;
result.numDirectionalLights = 0;
result.pointLights[0].positionWS = Vector4(0, 50, 0, 0);
result.pointLights[0].colorRange = Vector4(0.2, 0.4, 0.7, 100);
result.numPointLights = 1;
return result;
}
+6 -6
View File
@@ -15,7 +15,6 @@ struct DirectionalLight
{
Vector4 color;
Vector4 direction;
Vector4 intensity;
};
struct PointLight
@@ -29,10 +28,10 @@ struct PointLight
#define MAX_POINT_LIGHTS 256
struct LightEnv
{
DirectionalLight directionalLights[MAX_DIRECTIONAL_LIGHTS];
PointLight pointLights[MAX_POINT_LIGHTS];
uint32 numDirectionalLights;
uint32 numPointLights;
Gfx::PStructuredBuffer directionalLights;
Gfx::PUniformBuffer numDirectional;
Gfx::PStructuredBuffer pointLights;
Gfx::PUniformBuffer numPoints;
};
class Scene
@@ -83,7 +82,8 @@ private:
Vector4 actorLocation;
};
Array<PrimitiveSceneData> sceneData;
Gfx::PStructuredBuffer sceneDataBuffer;
Gfx::PStructuredBuffer sceneDataBuffer;
LightEnv lightEnv;
PhysicsSystem physics;
Gfx::PGraphics graphics;
};