improved font rendering

This commit is contained in:
2026-05-26 01:29:26 +03:00
parent f127ac3801
commit 5fdb17b773
21 changed files with 217 additions and 158 deletions

View File

@@ -101,7 +101,7 @@ void CVkRenderCommandList::SetMaterial( IMaterial *pMaterial )
pBeginCommand->nResolutionY = m_uHeight;
for ( auto &i: pBeginCommand->images)
{
pBeginCommand->AddDependency(i.m_stImage.m_pSingle, DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE);
pBeginCommand->AddDependency(i.m_stImage.m_pSingle, DEPENDENCY_MODE_DRAWCALL_MIXED_IMAGE);
}
if ( m_bDepthEnabled )
{
@@ -118,10 +118,6 @@ void CVkRenderCommandList::SetMaterial( IMaterial *pMaterial )
CVkSetShaderDataCommand *pSetShaderData = CREATE_COMMAND(m_pCommandBufferManager, SetShaderData);
pSetShaderData->pShaderData = pMaterial;
{
CVkTextureArray *pArray = (CVkTextureArray*)((CVkMaterial*)pMaterial)->m_pTextureArray;
}
m_pCurrentMaterialBuffer->AddCommand(pSetShaderData);
CVkSetScissorsCommand *pScissorsCommand = CREATE_COMMAND(m_pCommandBufferManager, SetScissors);
@@ -146,6 +142,7 @@ void CVkRenderCommandList::SetVertexBuffer( uint32_t uBinding, IVertexBuffer *pB
CVkSetVertexBufferCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, SetVertexBuffer);
pCmd->uBinding = uBinding;
pCmd->pBuffer = pBuffer;
pCmd->AddDependency(pBuffer, DEPENDENCY_MODE_BUFFER_SOURCE);
m_pCurrentMaterialBuffer->AddCommand(pCmd);
}
@@ -163,6 +160,34 @@ void CVkRenderCommandList::DrawPrimitives( uint32_t nVertexCount, uint32_t nFirs
pCmd->nFirstVertex = nFirstVertex;
pCmd->nInstanceCount = nInstanceCount;
pCmd->nFirstInstance = nFirstInstance;
for ( auto &b: m_barriers )
{
if (dynamic_cast<CVkBuffer*>(b.pObject))
{
if (b.m_bIsRead)
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_READ_WRITE);
else
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_READ);
else
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_WRITE);
}
if (dynamic_cast<CVkImage*>(b.pObject))
{
if (b.m_bIsRead)
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_READ_WRITE);
else
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_READ);
else
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_WRITE);
}
}
m_barriers = {};
m_pCurrentMaterialBuffer->AddCommand(pCmd);
}
@@ -182,8 +207,8 @@ void CVkRenderCommandList::ResolveImage( IImage *pOriginal, IImage *pResolved )
pCmd->stInputImage.m_pSingle = pOriginal;
pCmd->stOutputImage.m_eObjectType = FRAME_OBJECT_TYPE_SINGLE;
pCmd->stOutputImage.m_pSingle = pResolved;
pCmd->AddDependency(pOriginal, DEPENDENCY_MODE_IMAGE_SOURCE);
pCmd->AddDependency(pResolved, DEPENDENCY_MODE_IMAGE_DESTINATION);
pCmd->AddDependency(pOriginal, DEPENDENCY_MODE_IMAGE_RESOLVE_SOURCE);
pCmd->AddDependency(pResolved, DEPENDENCY_MODE_IMAGE_RESOLVE_DESTINATION);
m_pPostRaster->AddCommand(pCmd);
}
@@ -198,6 +223,11 @@ void CVkRenderCommandList::EndRecording()
SwitchRenderingStage(RENDERING_STAGE_FINISHED);
}
void CVkRenderCommandList::Barrier( IRenderingObject *pObject, bool bIsRead, bool bIsWrite )
{
m_barriers.AppendTail({pObject, bIsRead, bIsWrite});
}
void CVkRenderCommandList::Submit()
{
for ( auto m: m_pCommandBuffers)