This commit is contained in:
2026-02-20 19:35:09 +02:00
parent 3ed689f801
commit c00ecf4081
35 changed files with 576 additions and 99 deletions

View File

@@ -16,6 +16,7 @@ struct PerMeshData_t
{
mat4 m_matTranslation;
mat4 m_matRotation;
uint32_t m_uAlbedo;
};
class CFunnyMeshInstance;
@@ -43,6 +44,8 @@ void CFunnyMesh::ConfigureShader( IShader *pShader )
pShader->AddAttribute(0, 2, VERTEX_FORMAT_XYZ32_SFLOAT, 20);
// albedo
pShader->AddOutputImage(0, IMAGE_FORMAT_RGBA8_UNORM);
pShader->AddOutputImage(1, IMAGE_FORMAT_RGBA16_SFLOAT);
pShader->AddOutputImage(2, IMAGE_FORMAT_RGBA32_SFLOAT);
pShader->SetMultisampling(MULTISAMPLE_TYPE_1_SAMPLES);
@@ -117,6 +120,7 @@ void CFunnyMeshInstance::Frame()
v[2] = m_vScale.z;
glm_scale_make(m, v);
glm_mat4_mul(m_data.m_matTranslation, m, m_data.m_matTranslation);
m_data.m_uAlbedo = 1;
}
@@ -137,10 +141,14 @@ private:
CUtlVector<CFunnyMesh*> m_pMeshes;
IImage *m_pOutputImage = NULL;
IImage *m_pDepthImage = NULL;
IImage *m_pNormalImage = NULL;
IImage *m_pWorldSpaceImage = NULL;
IRenderCommandList *m_pRasterCommandList = NULL;
IBuffer *m_pViewBuffer;
ViewBuffer_t *m_pViewBufferData;
ITextureArray *m_pTextures;
vec3 m_vPos;
versor m_vRot;
};
@@ -156,6 +164,18 @@ void CFunnyWorldRenderer::Init()
IMAGE_FORMAT_RGBA8_UNORM,
MULTISAMPLE_TYPE_NONE
);
m_pNormalImage = g_pRenderContext->CreateRenderTarget(
100,
100,
IMAGE_FORMAT_RGBA16_SFLOAT,
MULTISAMPLE_TYPE_NONE
);
m_pWorldSpaceImage = g_pRenderContext->CreateRenderTarget(
100,
100,
IMAGE_FORMAT_RGBA32_SFLOAT,
MULTISAMPLE_TYPE_NONE
);
m_pDepthImage = g_pRenderContext->CreateRenderTarget(
100,
@@ -168,6 +188,7 @@ void CFunnyWorldRenderer::Init()
m_pRasterCommandList = g_pRenderContext->CreateCommandList();
m_pViewBuffer = g_pRenderContext->CreateConstantBuffer(sizeof(ViewBuffer_t));
m_pTextures = g_pRenderContext->CreateTextureArray();
}
void CFunnyWorldRenderer::Tick( float fDelta )
@@ -197,12 +218,28 @@ void CFunnyWorldRenderer::Frame( float fDelta )
if (g_pMainWindow->BRenderSizeUpdated())
{
g_pRenderContext->DestroyImage(m_pOutputImage);
g_pRenderContext->DestroyImage(m_pNormalImage);
g_pRenderContext->DestroyImage(m_pWorldSpaceImage);
g_pRenderContext->DestroyImage(m_pDepthImage);
m_pOutputImage = g_pRenderContext->CreateRenderTarget(
g_pMainWindow->GetRenderWidth(),
g_pMainWindow->GetRenderHeight(),
IMAGE_FORMAT_RGBA8_UNORM,
MULTISAMPLE_TYPE_NONE);
g_pRenderContext->DestroyImage(m_pOutputImage);
m_pNormalImage = g_pRenderContext->CreateRenderTarget(
g_pMainWindow->GetRenderWidth(),
g_pMainWindow->GetRenderHeight(),
IMAGE_FORMAT_RGBA16_SFLOAT,
MULTISAMPLE_TYPE_NONE
);
m_pWorldSpaceImage = g_pRenderContext->CreateRenderTarget(
g_pMainWindow->GetRenderWidth(),
g_pMainWindow->GetRenderHeight(),
IMAGE_FORMAT_RGBA32_SFLOAT,
MULTISAMPLE_TYPE_NONE
);
m_pDepthImage = g_pRenderContext->CreateRenderTarget(
g_pMainWindow->GetRenderWidth(),
g_pMainWindow->GetRenderHeight(),
@@ -213,6 +250,8 @@ void CFunnyWorldRenderer::Frame( float fDelta )
m_pRasterCommandList->StartRecording();
m_pRasterCommandList->SetRenderResolution(uWidth, uHeight);
m_pRasterCommandList->SetRenderTarget(0, m_pOutputImage);
m_pRasterCommandList->SetRenderTarget(1, m_pNormalImage);
m_pRasterCommandList->SetRenderTarget(2, m_pWorldSpaceImage);
m_pRasterCommandList->SetDepthTarget(m_pDepthImage);
m_pRasterCommandList->SetViewport(0, 0, uWidth, uHeight, 0, 1);
m_pRasterCommandList->SetScissors(0, 0, uWidth, uHeight);
@@ -240,6 +279,7 @@ void CFunnyWorldRenderer::Frame( float fDelta )
pDataBuffer->Unlock();
mesh->m_pMaterial->VSSetConstantsBuffer(0, m_pViewBuffer);
mesh->m_pMaterial->VSSetConstantsBuffer(1, pDataBuffer);
mesh->m_pMaterial->PSSetTextureArray(1, m_pTextures);
g_pRenderContext->DestroyBuffer(pDataBuffer);
}
for ( auto mesh: m_pMeshes)