Blending and depth testing refactoring to Vulkan. Eliminating OpenGL state following.
This commit is contained in:
@@ -261,6 +261,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
info.shader_name = &shader_name;
|
info.shader_name = &shader_name;
|
||||||
info.pCamera = this;
|
info.pCamera = this;
|
||||||
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
|
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
|
||||||
|
info.rasterMode = PipelineInfo::RasterMode::kAlphaBlend;
|
||||||
KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, info, testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP);
|
KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, info, testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP);
|
||||||
testPipeline->bind(commandBuffer);
|
testPipeline->bind(commandBuffer);
|
||||||
testVertices.bind(commandBuffer);
|
testVertices.bind(commandBuffer);
|
||||||
@@ -316,9 +317,8 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
// ----====---- Transparent Geometry, Forward Rendering ----====----
|
// ----====---- Transparent Geometry, Forward Rendering ----====----
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
// TODO - Vulkan refactoring...
|
||||||
/*
|
|
||||||
GL_PUSH_GROUP_MARKER("Forward Rendering - Transparent");
|
GL_PUSH_GROUP_MARKER("Forward Rendering - Transparent");
|
||||||
|
/*
|
||||||
// Note: These parameters have already been set up by the skybox render above
|
// Note: These parameters have already been set up by the skybox render above
|
||||||
//
|
//
|
||||||
// // Set render target
|
// // Set render target
|
||||||
@@ -332,96 +332,48 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
GLDEBUG(glCullFace(GL_BACK));
|
GLDEBUG(glCullFace(GL_BACK));
|
||||||
GLDEBUG(glEnable(GL_CULL_FACE));
|
GLDEBUG(glEnable(GL_CULL_FACE));
|
||||||
|
|
||||||
// Disable z-buffer write
|
|
||||||
GLDEBUG(glDepthMask(GL_FALSE));
|
|
||||||
//
|
|
||||||
// // Enable z-buffer test
|
|
||||||
// GLDEBUG(glEnable(GL_DEPTH_TEST));
|
|
||||||
// GLDEBUG(glDepthFunc(GL_LEQUAL));
|
|
||||||
// GLDEBUG(glDepthRangef(0.0, 1.0));
|
|
||||||
|
|
||||||
// Enable alpha blending
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Render all transparent geometry
|
// Render all transparent geometry
|
||||||
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_TRANSPARENT, false);
|
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_TRANSPARENT, false);
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
|
||||||
/*
|
|
||||||
GL_POP_GROUP_MARKER;
|
GL_POP_GROUP_MARKER;
|
||||||
*/
|
|
||||||
|
|
||||||
// ----====---- Particle Occlusion Tests ----====----
|
// ----====---- Particle Occlusion Tests ----====----
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
|
||||||
/*
|
|
||||||
GL_PUSH_GROUP_MARKER("Particle Occlusion Tests");
|
GL_PUSH_GROUP_MARKER("Particle Occlusion Tests");
|
||||||
|
/*
|
||||||
// Set render target
|
// Set render target
|
||||||
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, compositeFramebuffer));
|
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, compositeFramebuffer));
|
||||||
GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, compositeDepthTexture, 0));
|
GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, compositeDepthTexture, 0));
|
||||||
|
|
||||||
// Disable backface culling
|
// Disable backface culling
|
||||||
GLDEBUG(glDisable(GL_CULL_FACE));
|
GLDEBUG(glDisable(GL_CULL_FACE));
|
||||||
|
|
||||||
// Disable z-buffer write
|
|
||||||
GLDEBUG(glDepthMask(GL_FALSE));
|
|
||||||
|
|
||||||
// Enable z-buffer test
|
|
||||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
|
||||||
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
|
||||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
|
||||||
|
|
||||||
// Enable additive blending
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE));
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// ----====---- Perform Occlusion Tests ----====----
|
// ----====---- Perform Occlusion Tests ----====----
|
||||||
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, RENDER_PASS_PARTICLE_OCCLUSION, false);
|
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, RENDER_PASS_PARTICLE_OCCLUSION, false);
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
|
||||||
/*
|
|
||||||
GL_POP_GROUP_MARKER;
|
GL_POP_GROUP_MARKER;
|
||||||
*/
|
|
||||||
|
|
||||||
// ----====---- Flares ----====----
|
// ----====---- Flares ----====----
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
|
||||||
/*
|
|
||||||
GL_PUSH_GROUP_MARKER("Additive Particles");
|
GL_PUSH_GROUP_MARKER("Additive Particles");
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
// Set render target
|
// Set render target
|
||||||
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, compositeFramebuffer));
|
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, compositeFramebuffer));
|
||||||
GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, compositeDepthTexture, 0));
|
GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, compositeDepthTexture, 0));
|
||||||
|
|
||||||
// Disable backface culling
|
// Disable backface culling
|
||||||
GLDEBUG(glDisable(GL_CULL_FACE));
|
GLDEBUG(glDisable(GL_CULL_FACE));
|
||||||
|
|
||||||
// Disable z-buffer write
|
|
||||||
GLDEBUG(glDepthMask(GL_FALSE));
|
|
||||||
|
|
||||||
// Disable z-buffer test
|
|
||||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
|
||||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
|
||||||
|
|
||||||
// Enable additive blending
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE));
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Render all flares
|
// Render all flares
|
||||||
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_ADDITIVE_PARTICLES, false);
|
scene.render(commandBuffer, surface, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_ADDITIVE_PARTICLES, false);
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
|
||||||
/*
|
|
||||||
GL_POP_GROUP_MARKER;
|
GL_POP_GROUP_MARKER;
|
||||||
*/
|
|
||||||
|
|
||||||
// ----====---- Volumetric Lighting ----====----
|
// ----====---- Volumetric Lighting ----====----
|
||||||
|
|
||||||
@@ -467,9 +419,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
// ----====---- Debug Overlay ----====----
|
// ----====---- Debug Overlay ----====----
|
||||||
|
|
||||||
// TODO - Vulkan refactoring...
|
// TODO - Vulkan refactoring...
|
||||||
/*
|
|
||||||
GL_PUSH_GROUP_MARKER("Debug Overlays");
|
GL_PUSH_GROUP_MARKER("Debug Overlays");
|
||||||
*/
|
|
||||||
|
|
||||||
if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) {
|
if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) {
|
||||||
|
|
||||||
@@ -495,11 +445,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
GL_POP_GROUP_MARKER;
|
GL_POP_GROUP_MARKER;
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
// fprintf(stderr, "VBO Mem: %i Kbyte Texture Mem: %i/%i Kbyte (active/total) Shader Handles: %i Visible Bounds: %i Max Texture LOD: %i\n", (int)m_pContext->getMeshManager()->getMemUsed() / 1024, (int)m_pContext->getTextureManager()->getActiveMemUsed() / 1024, (int)m_pContext->getTextureManager()->getMemUsed() / 1024, (int)m_pContext->getPipelineManager()->getShaderHandlesUsed(), (int)m_visibleBounds.size(), m_pContext->getTextureManager()->getLODDimCap());
|
// fprintf(stderr, "VBO Mem: %i Kbyte Texture Mem: %i/%i Kbyte (active/total) Shader Handles: %i Visible Bounds: %i Max Texture LOD: %i\n", (int)m_pContext->getMeshManager()->getMemUsed() / 1024, (int)m_pContext->getTextureManager()->getActiveMemUsed() / 1024, (int)m_pContext->getTextureManager()->getMemUsed() / 1024, (int)m_pContext->getPipelineManager()->getShaderHandlesUsed(), (int)m_visibleBounds.size(), m_pContext->getTextureManager()->getLODDimCap());
|
||||||
// TODO - Vulkan refactoring...
|
// TODO - Vulkan refactoring...
|
||||||
@@ -682,10 +628,6 @@ void KRCamera::destroyBuffers()
|
|||||||
|
|
||||||
void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
||||||
{
|
{
|
||||||
// Disable alpha blending
|
|
||||||
GLDEBUG(glDisable(GL_BLEND));
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
FINDME - Determine if we still need this...
|
FINDME - Determine if we still need this...
|
||||||
|
|
||||||
@@ -709,13 +651,14 @@ void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
|
|
||||||
|
|
||||||
GLDEBUG(glViewport(0, 0, (GLsizei)m_viewport.getSize().x, (GLsizei)m_viewport.getSize().y));
|
GLDEBUG(glViewport(0, 0, (GLsizei)m_viewport.getSize().x, (GLsizei)m_viewport.getSize().y));
|
||||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
|
||||||
|
|
||||||
PipelineInfo info{};
|
PipelineInfo info{};
|
||||||
std::string shader_name("PostShader");
|
std::string shader_name("PostShader");
|
||||||
info.shader_name = &shader_name;
|
info.shader_name = &shader_name;
|
||||||
info.pCamera = this;
|
info.pCamera = this;
|
||||||
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
|
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
|
||||||
|
info.rasterMode = PipelineInfo::RasterMode::kOpaqueNoTest;
|
||||||
|
|
||||||
KRPipeline *postShader = m_pContext->getPipelineManager()->getPipeline(surface, info);
|
KRPipeline *postShader = m_pContext->getPipelineManager()->getPipeline(surface, info);
|
||||||
|
|
||||||
@@ -888,7 +831,6 @@ void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Disable backface culling
|
// Disable backface culling
|
||||||
GLDEBUG(glDisable(GL_CULL_FACE));
|
GLDEBUG(glDisable(GL_CULL_FACE));
|
||||||
|
|
||||||
@@ -913,9 +855,6 @@ void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
|||||||
|
|
||||||
GLDEBUG(glDrawArrays(GL_TRIANGLES, 0, vertex_count));
|
GLDEBUG(glDrawArrays(GL_TRIANGLES, 0, vertex_count));
|
||||||
|
|
||||||
// Re-enable z-buffer write
|
|
||||||
GLDEBUG(glDepthMask(GL_TRUE));
|
|
||||||
|
|
||||||
m_debug_text_vertices.unlock();
|
m_debug_text_vertices.unlock();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -356,6 +356,7 @@ void KRLight::render(RenderInfo& ri) {
|
|||||||
info.directional_lights = &ri.directional_lights;
|
info.directional_lights = &ri.directional_lights;
|
||||||
info.spot_lights = &ri.spot_lights;
|
info.spot_lights = &ri.spot_lights;
|
||||||
info.renderPass = ri.renderPass;
|
info.renderPass = ri.renderPass;
|
||||||
|
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
|
||||||
|
|
||||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, info, ri.viewport, occlusion_test_sphere_matrix, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, info, ri.viewport, occlusion_test_sphere_matrix, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||||
|
|
||||||
|
|||||||
@@ -67,29 +67,6 @@ unordered_map<std::string, KRMaterial *> &KRMaterialManager::getMaterials()
|
|||||||
return m_materials;
|
return m_materials;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRMaterialManager::configure(bool blend_enable, GLenum blend_src, GLenum blend_dest, bool depth_test_enable, GLenum depth_func, bool depth_write_enable) {
|
|
||||||
if(blend_enable) {
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(blend_src, blend_dest));
|
|
||||||
} else {
|
|
||||||
GLDEBUG(glDisable(GL_BLEND));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(depth_test_enable) {
|
|
||||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
|
||||||
GLDEBUG(glDepthFunc(depth_func));
|
|
||||||
} else {
|
|
||||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(depth_write_enable) {
|
|
||||||
GLDEBUG(glDepthMask(GL_TRUE));
|
|
||||||
} else {
|
|
||||||
GLDEBUG(glDepthMask(GL_FALSE));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
KRMaterial *KRMaterialManager::getMaterial(const std::string &name) {
|
KRMaterial *KRMaterialManager::getMaterial(const std::string &name) {
|
||||||
std::string lowerName = name;
|
std::string lowerName = name;
|
||||||
std::transform(lowerName.begin(), lowerName.end(),
|
std::transform(lowerName.begin(), lowerName.end(),
|
||||||
|
|||||||
@@ -55,9 +55,6 @@ public:
|
|||||||
void add(KRMaterial *new_material);
|
void add(KRMaterial *new_material);
|
||||||
KRMaterial *getMaterial(const std::string &name);
|
KRMaterial *getMaterial(const std::string &name);
|
||||||
|
|
||||||
void configure(bool blend_enable, GLenum blend_src, GLenum blend_dest, bool depth_test_enable, GLenum depth_func, bool depth_write_enable);
|
|
||||||
|
|
||||||
|
|
||||||
unordered_map<std::string, KRMaterial *> &getMaterials();
|
unordered_map<std::string, KRMaterial *> &getMaterials();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -283,6 +283,7 @@ KRPipeline::KRPipeline(KRContext& context, KRSurface& surface, const PipelineInf
|
|||||||
switch (info.rasterMode) {
|
switch (info.rasterMode) {
|
||||||
case PipelineInfo::RasterMode::kOpaque:
|
case PipelineInfo::RasterMode::kOpaque:
|
||||||
case PipelineInfo::RasterMode::kOpaqueLessTest:
|
case PipelineInfo::RasterMode::kOpaqueLessTest:
|
||||||
|
case PipelineInfo::RasterMode::kOpaqueNoTest:
|
||||||
case PipelineInfo::RasterMode::kOpaqueNoDepthWrite:
|
case PipelineInfo::RasterMode::kOpaqueNoDepthWrite:
|
||||||
colorBlendAttachment.blendEnable = VK_FALSE;
|
colorBlendAttachment.blendEnable = VK_FALSE;
|
||||||
colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_ONE;
|
colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_ONE;
|
||||||
@@ -338,6 +339,10 @@ KRPipeline::KRPipeline(KRContext& context, KRSurface& surface, const PipelineInf
|
|||||||
depthStencil.depthTestEnable = VK_TRUE;
|
depthStencil.depthTestEnable = VK_TRUE;
|
||||||
depthStencil.depthWriteEnable = VK_TRUE;
|
depthStencil.depthWriteEnable = VK_TRUE;
|
||||||
break;
|
break;
|
||||||
|
case PipelineInfo::RasterMode::kOpaqueNoTest:
|
||||||
|
depthStencil.depthTestEnable = VK_FALSE;
|
||||||
|
depthStencil.depthWriteEnable = VK_TRUE;
|
||||||
|
break;
|
||||||
case PipelineInfo::RasterMode::kOpaqueNoDepthWrite:
|
case PipelineInfo::RasterMode::kOpaqueNoDepthWrite:
|
||||||
case PipelineInfo::RasterMode::kAlphaBlend:
|
case PipelineInfo::RasterMode::kAlphaBlend:
|
||||||
case PipelineInfo::RasterMode::kAdditive:
|
case PipelineInfo::RasterMode::kAdditive:
|
||||||
|
|||||||
@@ -92,6 +92,19 @@ public:
|
|||||||
glEnable(GL_DEPTH_TEST))
|
glEnable(GL_DEPTH_TEST))
|
||||||
glDepthFunc(GL_LESS);
|
glDepthFunc(GL_LESS);
|
||||||
glDepthRangef(0.0, 1.0);
|
glDepthRangef(0.0, 1.0);
|
||||||
|
*/
|
||||||
|
kOpaqueNoTest,
|
||||||
|
/*
|
||||||
|
kOpaqueNoTest is equivalent to:
|
||||||
|
|
||||||
|
// Disable blending
|
||||||
|
glDisable(GL_BLEND));
|
||||||
|
|
||||||
|
// Enable z-buffer write
|
||||||
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
|
// Disable z-buffer test
|
||||||
|
glDisable(GL_DEPTH_TEST)
|
||||||
*/
|
*/
|
||||||
kAlphaBlend,
|
kAlphaBlend,
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ void KRReverbZone::render(RenderInfo& ri)
|
|||||||
info.directional_lights = &ri.directional_lights;
|
info.directional_lights = &ri.directional_lights;
|
||||||
info.spot_lights = &ri.spot_lights;
|
info.spot_lights = &ri.spot_lights;
|
||||||
info.renderPass = ri.renderPass;
|
info.renderPass = ri.renderPass;
|
||||||
|
info.rasterMode = PipelineInfo::RasterMode::kAlphaBlend;
|
||||||
|
|
||||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||||
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
|
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
|
||||||
|
|||||||
Reference in New Issue
Block a user