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

@@ -57,7 +57,6 @@ float C_BaseEntity::GetScale( void )
void C_BaseEntity::SetThinkImpl( fnThink pfnThink )
{
m_pfnThink = pfnThink;
V_printf("%p\n", pfnThink);
}
void C_BaseEntity::SetNextThink( float fThink )

View File

@@ -12,7 +12,7 @@ public:
virtual void Think( float fDelta );
IMesh *m_pMesh;
IMeshInstance *m_pMeshInstance;
IMeshInstance *m_pMeshInstances[10];
};
void C_MOBAPlayer::Precache()
@@ -21,7 +21,6 @@ void C_MOBAPlayer::Precache()
IBuffer *pDataBuffer;
IShader *pShader;
IMaterial *pMaterial;
g_pWorldRenderer->Init();
pShader = g_pRenderContext->CreateShader("game/core/shaders/mesh_raster.shader_c");
IFileHandle *pHandle = filesystem->Open("game/core/meshes/spot.fmesh_c", FILEMODE_READ);
@@ -47,10 +46,13 @@ void C_MOBAPlayer::Precache()
m_pMesh->SetVertices(pBuffer);
m_pMesh->SetMaterial(pMaterial);
m_pMeshInstance = g_pWorldRenderer->CreateInstance(m_pMesh);
m_pMeshInstance->SetScale({5, 5, 5});
m_pMeshInstance->SetPosition({0,0,0});
m_pMeshInstance->SetRotation({1,0,0,0});
for (int i = 0; i < 10; i++)
{
m_pMeshInstances[i] = g_pWorldRenderer->CreateInstance(m_pMesh);
m_pMeshInstances[i]->SetScale({1, 1, 1});
m_pMeshInstances[i]->SetPosition({(float)i,0,0});
m_pMeshInstances[i]->SetRotation({1,0,0,0});
}
}
@@ -62,10 +64,13 @@ void C_MOBAPlayer::Spawn()
void C_MOBAPlayer::Think( float fDelta )
{
m_pMeshInstance->SetPosition({0,0,-(float)g_pEngineVars->m_fTime});
versor v;
glm_euler_zxy_quat((vec3){(float)g_pEngineVars->m_fTime,0,0}, v);
m_pMeshInstance->SetRotation({v[0], v[1], v[2], v[3]});
for (int i = 0; i < 10; i++)
{
m_pMeshInstances[i]->SetPosition({(float)i, 0 ,-(float)g_pEngineVars->m_fTime});
versor v;
glm_euler_zxy_quat((vec3){(float)g_pEngineVars->m_fTime,0,0}, v);
m_pMeshInstances[i]->SetRotation({v[0], v[1], v[2], v[3]});
}
};
LINK_ENTITY_TO_CLASS(player, C_MOBAPlayer)

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)