depth, normals i guess

This commit is contained in:
2026-02-19 22:06:21 +02:00
parent 4dd2e13c48
commit 04b0f02e7f
18 changed files with 129 additions and 55 deletions

View File

@@ -9,11 +9,13 @@
struct ViewBuffer_t
{
mat4 m_matCameraProjection;
vec4 m_vCameraPosition;
};
struct PerMeshData_t
{
mat4 m_matTranslation;
mat4 m_matRotation;
};
class CFunnyMeshInstance;
@@ -35,11 +37,15 @@ public:
void CFunnyMesh::ConfigureShader( IShader *pShader )
{
pShader->AddLayout(0, 12);
pShader->AddLayout(0, 32);
pShader->AddAttribute(0, 0, VERTEX_FORMAT_XYZ32_SFLOAT, 0);
// color
pShader->AddAttribute(0, 1, VERTEX_FORMAT_XY32_SFLOAT, 12);
pShader->AddAttribute(0, 2, VERTEX_FORMAT_XYZ32_SFLOAT, 20);
// albedo
pShader->AddOutputImage(0, IMAGE_FORMAT_RGBA8_UNORM);
pShader->SetMultisampling(MULTISAMPLE_TYPE_1_SAMPLES);
pShader->SetDepthImage(IMAGE_FORMAT_D32_SFLOAT);
}
@@ -70,7 +76,7 @@ public:
PerMeshData_t m_data = {};
Quat m_vRotation = {};
Vector m_vPosition = {};
Vector m_vScale = {};
Vector m_vScale = { 1, 1, 1 };
};
@@ -91,7 +97,27 @@ void CFunnyMeshInstance::SetScale( Vector vScale )
}
void CFunnyMeshInstance::Frame()
{
vec3 v;
versor q;
mat4 m;
glm_mat4_identity(m_data.m_matTranslation);
glm_mat4_identity(m_data.m_matRotation);
v[0] = m_vPosition.x;
v[1] = m_vPosition.y;
v[2] = m_vPosition.z;
glm_translate(m_data.m_matTranslation, v);
q[0] = m_vRotation.x;
q[1] = m_vRotation.y;
q[2] = m_vRotation.z;
q[3] = m_vRotation.w;
glm_quat_mat4(q, m);
glm_mat4_mul(m_data.m_matTranslation, m, m_data.m_matTranslation);
glm_mat4_mul(m_data.m_matRotation, m, m_data.m_matRotation);
v[0] = m_vScale.x;
v[1] = m_vScale.y;
v[2] = m_vScale.z;
glm_scale_make(m, v);
glm_mat4_mul(m_data.m_matTranslation, m, m_data.m_matTranslation);
}
@@ -164,7 +190,8 @@ void CFunnyWorldRenderer::Frame( float fDelta )
*/
m_pViewBufferData = (ViewBuffer_t*)m_pViewBuffer->Map();
m_pViewBuffer->Lock();
V_memcpy(m_pViewBufferData, matCamera, sizeof(matCamera));
V_memcpy(&m_pViewBufferData->m_matCameraProjection, matCamera, sizeof(matCamera));
V_memcpy(&m_pViewBufferData->m_vCameraPosition, m_vPos, sizeof(vec3));
m_pViewBuffer->Unlock();
m_pViewBuffer->Unmap();
@@ -222,7 +249,7 @@ void CFunnyWorldRenderer::Frame( float fDelta )
continue;
m_pRasterCommandList->SetMaterial(mesh->m_pMaterial);
m_pRasterCommandList->SetVertexBuffer(0, mesh->m_pVertexBuffer);
m_pRasterCommandList->DrawPrimitives(mesh->m_pVertexBuffer->GetSize()/12, 0, mesh->m_instances.GetSize(), 0);
m_pRasterCommandList->DrawPrimitives(mesh->m_pVertexBuffer->GetSize()/32, 0, mesh->m_instances.GetSize(), 0);
}
m_pRasterCommandList->EndRecording();