improved physics, added better caching
This commit is contained in:
@@ -26,6 +26,7 @@ public:
|
||||
|
||||
void SetVertexBuffer( IVertexBuffer *pBuffer ) override;
|
||||
void SetIndexBuffer( IIndexBuffer *pBuffer ) override;
|
||||
void SetMaterial( IMaterial *pMaterial ) override;
|
||||
void Draw() override;
|
||||
|
||||
Material_t m_material;
|
||||
@@ -76,14 +77,17 @@ void CMesh::SetIndexBuffer( IIndexBuffer *pBuffer )
|
||||
m_pIndexBuffer = (CIndexBuffer*)pBuffer;
|
||||
}
|
||||
|
||||
void CMesh::SetMaterial( IMaterial *pMaterial )
|
||||
{
|
||||
if (pMaterial == 0)
|
||||
return;
|
||||
m_material = pMaterial->m;
|
||||
}
|
||||
|
||||
CUtlVector<CMesh> g_drawnMeshes;
|
||||
|
||||
void CMesh::Draw()
|
||||
{
|
||||
if (!g_pCurrentMaterial)
|
||||
m_material = {};
|
||||
else
|
||||
m_material = g_pCurrentMaterial->m;
|
||||
g_drawnMeshes.AppendTail(*this);
|
||||
}
|
||||
|
||||
@@ -365,7 +369,7 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
for (auto &mesh: g_drawnMeshes)
|
||||
{
|
||||
VkDeviceSize offset = 0;
|
||||
uint32_t textureID = 0;
|
||||
uint32_t textureID = mesh.m_material.albedo;
|
||||
vkCmdPushConstants(g_vkCommandBuffer, g_meshPipeline.m_layout, VK_SHADER_STAGE_ALL, 0, 64, &mesh.m_matrix);
|
||||
vkCmdPushConstants(g_vkCommandBuffer, g_meshPipeline.m_layout, VK_SHADER_STAGE_ALL, 64, 4, &textureID);
|
||||
vkCmdBindVertexBuffers(g_vkCommandBuffer, 0, 1, &mesh.m_pVertexBuffer->m_buffer.m_buffer, &offset);
|
||||
@@ -391,7 +395,7 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
.dstAccessMask = 0,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||
.image = g_meshColor.m_image,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
};
|
||||
@@ -400,22 +404,6 @@ void IMeshRenderer::Frame( float fDelta )
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
0, 0, NULL, 0, NULL, 1, &barrier);
|
||||
|
||||
barrier = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
.dstAccessMask = 0,
|
||||
.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
|
||||
.image = g_meshColor.m_image,
|
||||
.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}
|
||||
};
|
||||
|
||||
vkCmdPipelineBarrier(g_vkCommandBuffer,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
0, 0, NULL, 0, NULL, 1, &barrier);
|
||||
|
||||
|
||||
g_drawnMeshes = CUtlVector<CMesh>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user