KRRenderPass now selected by KRCamera

This commit is contained in:
2022-03-27 22:37:15 -07:00
parent 5e8c9223ac
commit c58487c00f
5 changed files with 32 additions and 31 deletions

View File

@@ -33,6 +33,7 @@
#include "KRCamera.h" #include "KRCamera.h"
#include "KRStockGeometry.h" #include "KRStockGeometry.h"
#include "KRDirectionalLight.h" #include "KRDirectionalLight.h"
#include "KRRenderPass.h"
/* static */ /* static */
void KRCamera::InitNodeInfo(KrNodeInfo* nodeInfo) void KRCamera::InitNodeInfo(KrNodeInfo* nodeInfo)
@@ -101,7 +102,7 @@ const std::string KRCamera::getSkyBox() const
return m_skyBox; return m_skyBox;
} }
void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight) void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight)
{ {
// ----====---- Record timing information for measuring FPS ----====---- // ----====---- Record timing information for measuring FPS ----====----
uint64_t current_time = m_pContext->getAbsoluteTimeMilliseconds(); uint64_t current_time = m_pContext->getAbsoluteTimeMilliseconds();
@@ -252,8 +253,6 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi
GL_POP_GROUP_MARKER; GL_POP_GROUP_MARKER;
} else { } else {
// ----====---- Opaque Geometry, Forward Rendering ----====---- // ----====---- Opaque Geometry, Forward Rendering ----====----
// TODO - Vulkan refactoring...
/* /*
GL_PUSH_GROUP_MARKER("Forward Rendering - Opaque"); GL_PUSH_GROUP_MARKER("Forward Rendering - Opaque");
@@ -290,14 +289,29 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi
GLDEBUG(glDepthRangef(0.0, 1.0)); GLDEBUG(glDepthRangef(0.0, 1.0));
*/ */
KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass();
forwardOpaquePass.begin(commandBuffer, surface);
// Render the geometry // Render the geometry
scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false); scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false);
// TODO - Vulkan refactoring...
/* // ---------- Start: Vulkan Debug Code ----------
GL_POP_GROUP_MARKER; KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES;
*/ bool haveMesh = testVertices.isVBOReady();
if (haveMesh) {
KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, forwardOpaquePass, "vulkan_test", testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP);
testPipeline->bind(commandBuffer);
testVertices.bind(commandBuffer);
vkCmdDraw(commandBuffer, 4, 1, 0, 0);
}
// ---------- End: Vulkan Debug Code ----------
forwardOpaquePass.end(commandBuffer);
} }
// ----====---- Sky Box ----====---- // ----====---- Sky Box ----====----

View File

@@ -46,6 +46,7 @@
class KRModel; class KRModel;
class KRScene; class KRScene;
class KRViewport; class KRViewport;
class KRSurface;
class KRCamera : public KRNode { class KRCamera : public KRNode {
public: public:
@@ -53,7 +54,7 @@ public:
KRCamera(KRScene &scene, std::string name); KRCamera(KRScene &scene, std::string name);
virtual ~KRCamera(); virtual ~KRCamera();
void renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight); void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight);
KRRenderSettings settings; KRRenderSettings settings;

View File

@@ -151,32 +151,17 @@ void KRPresentationThread::renderFrame()
// TODO - Add error handling... // TODO - Add error handling...
} }
KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass(); // TODO - This needs to be moved to the Render thread...
forwardOpaquePass.begin(commandBuffer, surface); float deltaTime = 0.005; // TODO - Replace dummy value
if (scene) {
KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; scene->renderFrame(commandBuffer, surface, 0, deltaTime, surface.m_swapChainExtent.width, surface.m_swapChainExtent.height);
bool haveMesh = testVertices.isVBOReady();
if (haveMesh) {
KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, forwardOpaquePass, "vulkan_test", testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP);
testPipeline->bind(commandBuffer);
testVertices.bind(commandBuffer);
vkCmdDraw(commandBuffer, 4, 1, 0, 0);
} }
forwardOpaquePass.end(commandBuffer);
if (vkEndCommandBuffer(commandBuffer) != VK_SUCCESS) { if (vkEndCommandBuffer(commandBuffer) != VK_SUCCESS) {
m_activeState = PresentThreadState::error; m_activeState = PresentThreadState::error;
// TODO - Add error handling... // TODO - Add error handling...
} }
// TODO - This needs to be moved to the Render thread...
float deltaTime = 0.005; // TODO - Replace dummy value
if (scene) {
scene->renderFrame(commandBuffer, 0, deltaTime, surface.m_swapChainExtent.width, surface.m_swapChainExtent.height);
}
VkSubmitInfo submitInfo{}; VkSubmitInfo submitInfo{};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;

View File

@@ -54,7 +54,7 @@ KRScene::~KRScene() {
m_pRootNode = NULL; m_pRootNode = NULL;
} }
void KRScene::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, float deltaTime, int width, int height) { void KRScene::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, float deltaTime, int width, int height) {
getContext().startFrame(deltaTime); getContext().startFrame(deltaTime);
KRCamera *camera = find<KRCamera>("default_camera"); KRCamera *camera = find<KRCamera>("default_camera");
if(camera == NULL) { if(camera == NULL) {
@@ -70,7 +70,7 @@ void KRScene::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, floa
getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length); getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length);
getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy); getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy);
camera->renderFrame(commandBuffer, defaultFBO, width, height); camera->renderFrame(commandBuffer, surface, defaultFBO, width, height);
getContext().endFrame(deltaTime); getContext().endFrame(deltaTime);
physicsUpdate(deltaTime); physicsUpdate(deltaTime);
} }

View File

@@ -45,6 +45,7 @@
#include "KROctree.h" #include "KROctree.h"
class KRModel; class KRModel;
class KRLight; class KRLight;
class KRSurface;
using std::vector; using std::vector;
@@ -69,7 +70,7 @@ public:
bool rayCast(const Vector3 &v0, const Vector3 &dir, HitInfo &hitinfo, unsigned int layer_mask); bool rayCast(const Vector3 &v0, const Vector3 &dir, HitInfo &hitinfo, unsigned int layer_mask);
bool sphereCast(const Vector3 &v0, const Vector3 &v1, float radius, HitInfo &hitinfo, unsigned int layer_mask); bool sphereCast(const Vector3 &v0, const Vector3 &v1, float radius, HitInfo &hitinfo, unsigned int layer_mask);
void renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, float deltaTime, int width, int height); void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, float deltaTime, int width, int height);
void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, unordered_map<AABB, int> &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame); void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, unordered_map<AABB, int> &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame);
void render(VkCommandBuffer& commandBuffer, KROctreeNode *pOctreeNode, unordered_map<AABB, int> &visibleBounds, KRCamera *pCamera, std::vector<KRPointLight *> &point_lights, std::vector<KRDirectionalLight *> &directional_lights, std::vector<KRSpotLight *>&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector<KROctreeNode *> &remainingOctrees, std::vector<KROctreeNode *> &remainingOctreesTestResults, std::vector<KROctreeNode *> &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly); void render(VkCommandBuffer& commandBuffer, KROctreeNode *pOctreeNode, unordered_map<AABB, int> &visibleBounds, KRCamera *pCamera, std::vector<KRPointLight *> &point_lights, std::vector<KRDirectionalLight *> &directional_lights, std::vector<KRSpotLight *>&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector<KROctreeNode *> &remainingOctrees, std::vector<KROctreeNode *> &remainingOctreesTestResults, std::vector<KROctreeNode *> &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly);