Make sure RenderBin is set before render function is called

This commit is contained in:
Malin E
2023-04-06 14:53:05 +02:00
parent a3948e2830
commit 1d92383317
2 changed files with 13 additions and 11 deletions

View File

@@ -773,18 +773,8 @@ void RenderableModel::render(const RenderData& data, RendererTasks&) {
glDisable(GL_DEPTH_TEST);
}
// Only render two pass if the model is in any way transparent
bool shouldRenderTwice = false;
const float o = opacity();
if ((o >= 0.f && o < 1.f) || _geometry->isTransparent()) {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
shouldRenderTwice = true;
}
else {
setRenderBin(_originalRenderBin);
}
if (!shouldRenderTwice) {
if (!_shouldRenderTwice) {
// Reset manual depth test
_program->setUniform(
_uniformCache.performManualDepthTest,
@@ -920,6 +910,17 @@ void RenderableModel::update(const UpdateData& data) {
ghoul::opengl::updateUniformLocations(*_program, _uniformCache, UniformNames);
}
// Only render two pass if the model is in any way transparent
const float o = opacity();
if ((o >= 0.f && o < 1.f) || _geometry->isTransparent()) {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
_shouldRenderTwice = true;
}
else {
setRenderBin(_originalRenderBin);
_shouldRenderTwice = false;
}
if (_geometry->hasAnimation() && !_animationStart.empty()) {
double relativeTime;
double now = data.time.j2000Seconds();

View File

@@ -120,6 +120,7 @@ private:
GLuint _framebuffer = 0;
GLuint _quadVao = 0;
GLuint _quadVbo = 0;
bool _shouldRenderTwice = false;
// Opacity program
ghoul::opengl::ProgramObject* _quadProgram = nullptr;