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