Moved frameIndex to KRSurface
This commit is contained in:
@@ -72,6 +72,7 @@ KRPipeline* KRPipelineManager::getPipeline(KRSurface& surface, KRRenderPass& ren
|
||||
key.second.push_back(surface.m_swapChainExtent.height);
|
||||
key.second.push_back(vertexAttributes);
|
||||
key.second.push_back(modelFormat);
|
||||
// TODO - Add renderPass unique identifier to key
|
||||
PipelineMap::iterator itr = m_pipelines.find(key);
|
||||
if (itr != m_pipelines.end()) {
|
||||
return itr->second;
|
||||
|
||||
@@ -96,9 +96,6 @@ void KRPresentationThread::run()
|
||||
|
||||
void KRPresentationThread::renderFrame()
|
||||
{
|
||||
// TODO - Eliminate this and use system wide index once Vulkan path is working
|
||||
static uint64_t frameIndex = 0;
|
||||
|
||||
// TODO - We should use fences to eliminate this mutex
|
||||
const std::lock_guard<std::mutex> surfaceLock(KRContext::g_SurfaceInfoMutex);
|
||||
|
||||
@@ -155,7 +152,7 @@ void KRPresentationThread::renderFrame()
|
||||
}
|
||||
|
||||
KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass();
|
||||
forwardOpaquePass.begin(commandBuffer, surface, frameIndex);
|
||||
forwardOpaquePass.begin(commandBuffer, surface);
|
||||
|
||||
KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES;
|
||||
bool haveMesh = testVertices.isVBOReady();
|
||||
@@ -209,7 +206,7 @@ void KRPresentationThread::renderFrame()
|
||||
presentInfo.pImageIndices = &imageIndex;
|
||||
presentInfo.pResults = nullptr;
|
||||
vkQueuePresentKHR(device.m_graphicsQueue, &presentInfo);
|
||||
}
|
||||
|
||||
frameIndex++;
|
||||
surface.endFrame();
|
||||
}
|
||||
}
|
||||
@@ -117,7 +117,7 @@ void KRRenderPass::destroy(KRDevice &device)
|
||||
}
|
||||
}
|
||||
|
||||
void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface, uint64_t frameIndex)
|
||||
void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
||||
{
|
||||
std::array<VkClearValue, 2> clearValues{};
|
||||
clearValues[0].color = { {0.0f, 0.0f, 0.0f, 1.0f} };
|
||||
@@ -126,7 +126,7 @@ void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface, uin
|
||||
VkRenderPassBeginInfo renderPassInfo{};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
renderPassInfo.renderPass = m_renderPass;
|
||||
renderPassInfo.framebuffer = surface.m_swapChainFramebuffers[frameIndex % surface.m_swapChainFramebuffers.size()];
|
||||
renderPassInfo.framebuffer = surface.m_swapChainFramebuffers[surface.m_frameIndex % surface.m_swapChainFramebuffers.size()];
|
||||
renderPassInfo.renderArea.offset = { 0, 0 };
|
||||
renderPassInfo.renderArea.extent = surface.m_swapChainExtent;
|
||||
renderPassInfo.clearValueCount = static_cast<uint32_t>(clearValues.size());
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
void create(KRDevice& device, VkFormat swapChainImageFormat, VkFormat depthImageFormat);
|
||||
void destroy(KRDevice& device);
|
||||
|
||||
void begin(VkCommandBuffer &commandBuffer, KRSurface& surface, uint64_t frameIndex);
|
||||
void begin(VkCommandBuffer &commandBuffer, KRSurface& surface);
|
||||
void end(VkCommandBuffer& commandBuffer);
|
||||
|
||||
// private:
|
||||
|
||||
@@ -52,6 +52,7 @@ KRSurface::KRSurface(KRContext& context)
|
||||
, m_depthImageView(VK_NULL_HANDLE)
|
||||
, m_imageAvailableSemaphore(VK_NULL_HANDLE)
|
||||
, m_renderFinishedSemaphore(VK_NULL_HANDLE)
|
||||
, m_frameIndex(0)
|
||||
{
|
||||
m_forwardOpaquePass = std::make_unique<KRRenderPass>(context);
|
||||
}
|
||||
@@ -416,3 +417,8 @@ KRRenderPass& KRSurface::getForwardOpaquePass()
|
||||
{
|
||||
return *m_forwardOpaquePass;
|
||||
}
|
||||
|
||||
void KRSurface::endFrame()
|
||||
{
|
||||
m_frameIndex++;;
|
||||
}
|
||||
|
||||
@@ -61,6 +61,8 @@ public:
|
||||
void createRenderPasses();
|
||||
KRRenderPass& getForwardOpaquePass();
|
||||
|
||||
void endFrame();
|
||||
|
||||
#ifdef WIN32
|
||||
HWND m_hWnd;
|
||||
#endif
|
||||
@@ -81,6 +83,9 @@ public:
|
||||
|
||||
std::unique_ptr<KRRenderPass> m_forwardOpaquePass;
|
||||
|
||||
// TODO - This needs to be advanced per swap chain
|
||||
uint64_t m_frameIndex;
|
||||
|
||||
private:
|
||||
void destroySwapChain();
|
||||
KrResult createSwapChain();
|
||||
|
||||
Reference in New Issue
Block a user