Combined depth test and depth write modes into PipelineInfo.rasterMode.
This commit is contained in:
@@ -142,14 +142,6 @@ void KRAmbientZone::render(RenderInfo& ri)
|
||||
KRPipeline *pPipeline = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||
|
||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pPipeline, ri.viewport, sphereModelMatrix, &ri.point_lights, &ri.directional_lights, &ri.spot_lights, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||
|
||||
// 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));
|
||||
std::vector<KRMesh *> sphereModels = getContext().getMeshManager()->getModel("__sphere");
|
||||
if(sphereModels.size()) {
|
||||
for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) {
|
||||
|
||||
@@ -209,14 +209,6 @@ void KRAudioSource::render(RenderInfo& ri)
|
||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||
|
||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pShader, ri.viewport, sphereModelMatrix, &ri.point_lights, &ri.directional_lights, &ri.spot_lights, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||
|
||||
// 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));
|
||||
std::vector<KRMesh *> sphereModels = getContext().getMeshManager()->getModel("__sphere");
|
||||
if(sphereModels.size()) {
|
||||
for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) {
|
||||
|
||||
@@ -80,12 +80,6 @@ void KRBone::render(RenderInfo& ri)
|
||||
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && bVisualize) {
|
||||
Matrix4 sphereModelMatrix = getModelMatrix();
|
||||
|
||||
// Disable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_FALSE));
|
||||
|
||||
// Disable z-buffer test
|
||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
||||
|
||||
PipelineInfo info{};
|
||||
std::string shader_name("visualize_overlay");
|
||||
info.shader_name = &shader_name;
|
||||
@@ -94,7 +88,7 @@ void KRBone::render(RenderInfo& ri)
|
||||
info.directional_lights = &ri.directional_lights;
|
||||
info.spot_lights = &ri.spot_lights;
|
||||
info.renderPass = ri.renderPass;
|
||||
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
|
||||
info.rasterMode = PipelineInfo::RasterMode::kAdditiveNoTest;
|
||||
|
||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||
|
||||
|
||||
@@ -525,11 +525,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
||||
GL_PUSH_GROUP_MARKER("Debug Overlays");
|
||||
*/
|
||||
|
||||
if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) {
|
||||
// Enable z-buffer test
|
||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
||||
|
||||
if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) {
|
||||
|
||||
// Enable backface culling
|
||||
GLDEBUG(glCullFace(GL_BACK));
|
||||
@@ -554,11 +550,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO - Vulkan refactoring...
|
||||
/*
|
||||
// Re-enable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_TRUE));
|
||||
|
||||
GL_POP_GROUP_MARKER;
|
||||
*/
|
||||
|
||||
@@ -954,19 +946,12 @@ void KRCamera::renderPost(VkCommandBuffer& commandBuffer, KRSurface& surface)
|
||||
// Disable backface culling
|
||||
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));
|
||||
|
||||
PipelineInfo info{};
|
||||
std::string shader_name("debug_font");
|
||||
info.shader_name = &shader_name;
|
||||
info.pCamera = this;
|
||||
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
|
||||
info.rasterMode = PipelineInfo::RasterMode::kAlphaBlend;
|
||||
info.rasterMode = PipelineInfo::RasterMode::kAlphaBlendNoTest;
|
||||
KRPipeline *fontShader = m_pContext->getPipelineManager()->getPipeline(surface, info);
|
||||
getContext().getPipelineManager()->selectPipeline(surface, *this, fontShader, m_viewport, Matrix4(), nullptr, nullptr, nullptr, 0, KRNode::RENDER_PASS_FORWARD_TRANSPARENT, Vector3::Zero(), 0.0f, Vector4::Zero());
|
||||
|
||||
|
||||
@@ -217,14 +217,6 @@ void KRCollider::render(RenderInfo& ri)
|
||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||
|
||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pShader, ri.viewport, getModelMatrix(), &ri.point_lights, &ri.directional_lights, &ri.spot_lights, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||
// 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));
|
||||
|
||||
for(int i=0; i < m_models[0]->getSubmeshCount(); i++) {
|
||||
m_models[0]->renderSubmesh(ri.commandBuffer, i, ri.renderPass, getName(), "visualize_overlay", 1.0f);
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ void KRLight::renderShadowBuffers(RenderInfo& ri)
|
||||
|
||||
// Enable z-buffer test
|
||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
||||
GLDEBUG(glDepthFunc(GL_LESS));
|
||||
GLDEBUG(glDepthFunc(GL_LESS)); // CAREFUL WHEN REFACTORING! GL_LESS! not GL_LEQUAL
|
||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
||||
|
||||
// Disable alpha blending as we are using alpha channel for packed depth info
|
||||
|
||||
@@ -46,10 +46,83 @@ class KRRenderPass;
|
||||
|
||||
class PipelineInfo {
|
||||
public:
|
||||
// Note: RasterMode is likely to be refactored later to a bitfield
|
||||
enum class RasterMode : uint32_t {
|
||||
kOpaque = 0,
|
||||
/*
|
||||
kOpaque is equivalent to:
|
||||
|
||||
// Disable blending
|
||||
glDisable(GL_BLEND));
|
||||
|
||||
// Enable z-buffer write
|
||||
glDepthMask(GL_TRUE);
|
||||
|
||||
// Enable z-buffer test
|
||||
glEnable(GL_DEPTH_TEST))
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glDepthRangef(0.0, 1.0);
|
||||
*/
|
||||
kAlphaBlend = 1,
|
||||
kAdditive = 2
|
||||
/*
|
||||
kAlphaBlend is equivalent to:
|
||||
|
||||
// Enable alpha blending
|
||||
glEnable(GL_BLEND));
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
|
||||
|
||||
// Disable z-buffer write
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
// Enable z-buffer test
|
||||
glEnable(GL_DEPTH_TEST))
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glDepthRangef(0.0, 1.0);
|
||||
*/
|
||||
kAlphaBlendNoTest = 2,
|
||||
/*
|
||||
kAlphaBlendNoTest is equivalent to:
|
||||
|
||||
// Enable alpha blending
|
||||
glEnable(GL_BLEND));
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
|
||||
|
||||
// Disable z-buffer write
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
// Enable z-buffer test
|
||||
glEnable(GL_DEPTH_TEST))
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glDepthRangef(0.0, 1.0);
|
||||
*/
|
||||
kAdditive = 3,
|
||||
/*
|
||||
kAdditive is equivalent to:
|
||||
|
||||
// Enable additive blending
|
||||
glEnable(GL_BLEND));
|
||||
glBlendFunc(GL_ONE, GL_ONE));
|
||||
|
||||
// Disable z-buffer write
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
// Disalbe z-buffer test
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
*/
|
||||
kAdditiveNoTest = 4,
|
||||
/*
|
||||
kAdditive is equivalent to:
|
||||
|
||||
// Enable additive blending
|
||||
glEnable(GL_BLEND));
|
||||
glBlendFunc(GL_ONE, GL_ONE));
|
||||
|
||||
// Disable z-buffer write
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
// Disalbe z-buffer test
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
*/
|
||||
};
|
||||
const std::string* shader_name;
|
||||
KRCamera* pCamera;
|
||||
|
||||
@@ -218,7 +218,9 @@ KRPipeline *KRPipelineManager::getPipeline(KRSurface& surface, const PipelineInf
|
||||
|
||||
stream << "\n#define ALPHA_TEST " << (info.bAlphaTest ? "1" : "0");
|
||||
stream << "\n#define ALPHA_BLEND " << ((info.rasterMode == PipelineInfo::RasterMode::kAlphaBlend
|
||||
|| info.rasterMode == PipelineInfo::RasterMode::kAdditive) ? "1" : "0");
|
||||
|| info.rasterMode == PipelineInfo::RasterMode::kAlphaBlendNoTest
|
||||
|| info.rasterMode == PipelineInfo::RasterMode::kAdditive
|
||||
|| info.rasterMode == PipelineInfo::RasterMode::kAdditiveNoTest) ? "1" : "0");
|
||||
|
||||
stream << "\n#define ENABLE_PER_PIXEL " << (info.pCamera->settings.bEnablePerPixel ? "1" : "0");
|
||||
stream << "\n#define DEBUG_PSSM " << (info.pCamera->settings.bDebugPSSM ? "1" : "0");
|
||||
|
||||
@@ -102,37 +102,29 @@ void KRPointLight::render(RenderInfo& ri)
|
||||
info.pCamera = ri.camera;
|
||||
info.point_lights = &this_light;
|
||||
info.renderPass = ri.renderPass;
|
||||
info.rasterMode = bVisualize ? PipelineInfo::RasterMode::kAdditive : PipelineInfo::RasterMode::kAlphaBlend;
|
||||
if (bInsideLight) {
|
||||
info.rasterMode = bVisualize ? PipelineInfo::RasterMode::kAdditiveNoTest : PipelineInfo::RasterMode::kAlphaBlendNoTest;
|
||||
}
|
||||
else {
|
||||
info.rasterMode = bVisualize ? PipelineInfo::RasterMode::kAdditive : PipelineInfo::RasterMode::kAlphaBlend;
|
||||
}
|
||||
|
||||
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
|
||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pShader, ri.viewport, sphereModelMatrix, &this_light, nullptr, nullptr, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||
|
||||
|
||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
|
||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
|
||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_DECAY_START, getDecayStart());
|
||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_CUTOFF, KRLIGHT_MIN_INFLUENCE);
|
||||
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_POSITION, light_position);
|
||||
|
||||
// Disable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_FALSE));
|
||||
|
||||
|
||||
if(bInsideLight) {
|
||||
|
||||
// Disable z-buffer test
|
||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
||||
|
||||
// Render a full screen quad
|
||||
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f);
|
||||
GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4));
|
||||
} else {
|
||||
// Render sphere of light's influence
|
||||
generateMesh();
|
||||
|
||||
// Enable z-buffer test
|
||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
||||
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
||||
|
||||
GLDEBUG(glVertexAttribPointer(KRMesh::KRENGINE_ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, m_sphereVertices));
|
||||
GLDEBUG(glDrawArrays(GL_TRIANGLES, 0, m_cVertices));
|
||||
|
||||
@@ -140,14 +140,6 @@ void KRReverbZone::render(RenderInfo& ri)
|
||||
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
|
||||
|
||||
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pShader, ri.viewport, sphereModelMatrix, &ri.point_lights, &ri.directional_lights, &ri.spot_lights, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
|
||||
|
||||
// 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));
|
||||
std::vector<KRMesh *> sphereModels = getContext().getMeshManager()->getModel("__sphere");
|
||||
if(sphereModels.size()) {
|
||||
for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) {
|
||||
|
||||
@@ -276,8 +276,6 @@ void KRScene::render(KRNode::RenderInfo& ri, KROctreeNode* pOctreeNode, unordere
|
||||
if(bNeedOcclusionTest) {
|
||||
pOctreeNode->beginOcclusionQuery();
|
||||
|
||||
|
||||
|
||||
Matrix4 matModel = Matrix4();
|
||||
matModel.scale(octreeBounds.size() * 0.5f);
|
||||
matModel.translate(octreeBounds.center());
|
||||
@@ -286,14 +284,6 @@ void KRScene::render(KRNode::RenderInfo& ri, KROctreeNode* pOctreeNode, unordere
|
||||
|
||||
getContext().getMeshManager()->bindVBO(ri.commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_3D_CUBE_VERTICES, 1.0f);
|
||||
|
||||
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_DEFERRED_GBUFFER ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_DEFERRED_OPAQUE ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_SHADOWMAP) {
|
||||
|
||||
// Disable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_FALSE));
|
||||
}
|
||||
PipelineInfo info{};
|
||||
std::string shader_name("occlusion_test");
|
||||
info.shader_name = &shader_name;
|
||||
@@ -308,16 +298,7 @@ void KRScene::render(KRNode::RenderInfo& ri, KROctreeNode* pOctreeNode, unordere
|
||||
GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 14));
|
||||
m_pContext->getMeshManager()->log_draw_call(ri.renderPass, "octree", "occlusion_test", 14);
|
||||
}
|
||||
|
||||
if(ri.renderPass == KRNode::RENDER_PASS_FORWARD_OPAQUE ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_DEFERRED_GBUFFER ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_DEFERRED_OPAQUE ||
|
||||
ri.renderPass == KRNode::RENDER_PASS_SHADOWMAP) {
|
||||
|
||||
// Re-enable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_TRUE));
|
||||
}
|
||||
|
||||
|
||||
pOctreeNode->endOcclusionQuery();
|
||||
|
||||
|
||||
|
||||
@@ -138,20 +138,9 @@ void KRSprite::render(RenderInfo& ri) {
|
||||
m_pSpriteTexture = getContext().getTextureManager()->getTexture(m_spriteTexture);
|
||||
}
|
||||
|
||||
if(m_pSpriteTexture) {
|
||||
/*
|
||||
|
||||
// Disable z-buffer write
|
||||
GLDEBUG(glDepthMask(GL_FALSE));
|
||||
*/
|
||||
|
||||
if(m_pSpriteTexture) {
|
||||
// TODO - Sprites are currently additive only. Need to expose this and allow for multiple blending modes
|
||||
|
||||
// Enable z-buffer test
|
||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
||||
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
||||
|
||||
|
||||
// Render light sprite on transparency pass
|
||||
PipelineInfo info{};
|
||||
std::string shader_name("sprite");
|
||||
|
||||
Reference in New Issue
Block a user