Added PipeLineInfo::RasterMode::kOpaqueLessTest

Refactored particles and additive effects to use PipelineInfo::RasterMode rather than direct GL calls.
This commit is contained in:
2022-07-03 21:13:39 -07:00
parent 13412cb5c5
commit e0e51c3f07
5 changed files with 28 additions and 40 deletions

View File

@@ -101,13 +101,6 @@ void KRBone::render(RenderInfo& ri)
}
}
// Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST));
GLDEBUG(glDepthFunc(GL_LEQUAL));
GLDEBUG(glDepthRangef(0.0, 1.0));
}
}

View File

@@ -144,6 +144,7 @@ void KRDirectionalLight::render(RenderInfo& ri) {
info.pCamera = ri.camera;
info.directional_lights = &this_light;
info.renderPass = ri.renderPass;
info.rasterMode = PipelineInfo::RasterMode::kAdditiveNoTest;
KRPipeline *pShader = getContext().getPipelineManager()->getPipeline(*ri.surface, info);
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pShader, ri.viewport, getModelMatrix(), nullptr, &this_light, nullptr, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
@@ -152,12 +153,6 @@ void KRDirectionalLight::render(RenderInfo& ri) {
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, m_color);
pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_INTENSITY, m_intensity * 0.01f);
// Disable z-buffer write
GLDEBUG(glDepthMask(GL_FALSE));
// Disable z-buffer test
GLDEBUG(glDisable(GL_DEPTH_TEST));
// Render a full screen quad
m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f);
GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4));

View File

@@ -232,11 +232,9 @@ void KRLight::render(RenderInfo& ri) {
float particle_range = 600.0f;
int particle_count = (int)(m_dust_particle_density * pow(particle_range, 3));
if(particle_count > KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES) particle_count = KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES;
// Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST));
GLDEBUG(glDepthRangef(0.0, 1.0));
if (particle_count > KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES) {
particle_count = KRMeshManager::KRENGINE_MAX_RANDOM_PARTICLES;
}
Matrix4 particleModelMatrix;
particleModelMatrix.scale(particle_range); // Scale the box symetrically to ensure that we don't have an uneven distribution of particles for different angles of the view frustrum
@@ -266,6 +264,7 @@ void KRLight::render(RenderInfo& ri) {
info.directional_lights = &this_directional_light;
info.spot_lights = &this_spot_light;
info.renderPass = ri.renderPass;
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
if(getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, pParticleShader, ri.viewport, particleModelMatrix, &this_point_light, &this_directional_light, &this_spot_light, 0, ri.renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) {
@@ -313,6 +312,7 @@ void KRLight::render(RenderInfo& ri) {
info.directional_lights = &this_directional_light;
info.spot_lights = &this_spot_light;
info.renderPass = KRNode::RENDER_PASS_ADDITIVE_PARTICLES;
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
KRPipeline *pFogShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
@@ -398,10 +398,6 @@ void KRLight::render(RenderInfo& ri) {
}
if(m_pFlareTexture) {
// Disable z-buffer test
GLDEBUG(glDisable(GL_DEPTH_TEST));
GLDEBUG(glDepthRangef(0.0, 1.0));
// Render light flare on transparency pass
PipelineInfo info{};
std::string shader_name("flare");
@@ -411,6 +407,7 @@ void KRLight::render(RenderInfo& ri) {
info.directional_lights = &ri.directional_lights;
info.spot_lights = &ri.spot_lights;
info.renderPass = ri.renderPass;
info.rasterMode = PipelineInfo::RasterMode::kAdditiveNoTest;
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())) {
@@ -519,20 +516,13 @@ void KRLight::renderShadowBuffers(RenderInfo& ri)
//GLDEBUG(glEnable(GL_CULL_FACE));
GLDEBUG(glDisable(GL_CULL_FACE));
// Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST));
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
GLDEBUG(glDisable(GL_BLEND));
// Use shader program
PipelineInfo info{};
std::string shader_name("ShadowShader");
info.shader_name = &shader_name;
info.pCamera = ri.camera;
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
info.rasterMode = PipelineInfo::RasterMode::kOpaqueLessTest;
KRPipeline *shadowShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
getContext().getPipelineManager()->selectPipeline(*ri.surface, *ri.camera, shadowShader, m_shadowViewports[iShadow], Matrix4(), nullptr, nullptr, nullptr, 0, KRNode::RENDER_PASS_SHADOWMAP, Vector3::Zero(), 0.0f, Vector4::Zero());

View File

@@ -86,12 +86,6 @@ void KRParticleSystemNewtonian::render(RenderInfo& ri) {
if(ri.renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES) {
if(ri.viewport.visible(getBounds())) {
// Enable z-buffer test
GLDEBUG(glEnable(GL_DEPTH_TEST));
GLDEBUG(glDepthRangef(0.0, 1.0));
KRTexture *pParticleTexture = m_pContext->getTextureManager()->getTexture("flare");
m_pContext->getTextureManager()->selectTexture(0, pParticleTexture, 0.0f, KRTexture::TEXTURE_USAGE_PARTICLE);
@@ -104,6 +98,7 @@ void KRParticleSystemNewtonian::render(RenderInfo& ri) {
info.directional_lights = &ri.directional_lights;
info.spot_lights = &ri.spot_lights;
info.renderPass = ri.renderPass;
info.rasterMode = PipelineInfo::RasterMode::kAdditive;
KRPipeline *pParticleShader = m_pContext->getPipelineManager()->getPipeline(*ri.surface, info);
// Vector3 rim_color; Vector4 fade_color;

View File

@@ -63,7 +63,22 @@ public:
glDepthFunc(GL_LEQUAL);
glDepthRangef(0.0, 1.0);
*/
kAlphaBlend = 1,
kOpaqueLessTest,
/*
kOpaqueLessTest 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_LESS);
glDepthRangef(0.0, 1.0);
*/
kAlphaBlend,
/*
kAlphaBlend is equivalent to:
@@ -79,7 +94,7 @@ public:
glDepthFunc(GL_LEQUAL);
glDepthRangef(0.0, 1.0);
*/
kAlphaBlendNoTest = 2,
kAlphaBlendNoTest,
/*
kAlphaBlendNoTest is equivalent to:
@@ -93,7 +108,7 @@ public:
// Disable z-buffer test
glDisable(GL_DEPTH_TEST)
*/
kAdditive = 3,
kAdditive,
/*
kAdditive is equivalent to:
@@ -109,7 +124,7 @@ public:
glDepthFunc(GL_LEQUAL);
glDepthRangef(0.0, 1.0);
*/
kAdditiveNoTest = 4,
kAdditiveNoTest,
/*
kAdditive is equivalent to: