diff options
Diffstat (limited to 'src/render/renderers/opengl/graphicshelpers')
14 files changed, 51 insertions, 0 deletions
diff --git a/src/render/renderers/opengl/graphicshelpers/graphicscontext.cpp b/src/render/renderers/opengl/graphicshelpers/graphicscontext.cpp index 59b5701f8..1cd089903 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicscontext.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicscontext.cpp @@ -549,6 +549,11 @@ void GraphicsContext::bindFramebuffer(GLuint fbo, GraphicsHelperInterface::FBOBi m_glHelper->bindFrameBufferObject(fbo, mode); } +void GraphicsContext::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_glHelper->depthRange(nearValue, farValue); +} + void GraphicsContext::depthTest(GLenum mode) { m_glHelper->depthTest(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicscontext_p.h b/src/render/renderers/opengl/graphicshelpers/graphicscontext_p.h index 7bc79996c..934a400f6 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicscontext_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicscontext_p.h @@ -134,6 +134,7 @@ public: void clearColor(const QColor &color); void clearDepthValue(float depth); void clearStencilValue(int stencil); + void depthRange(GLdouble nearValue, GLdouble farValue); void depthMask(GLenum mode); void depthTest(GLenum mode); void disableClipPlane(int clipPlane); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes2.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelperes2.cpp index 71540b1ad..382aecc4d 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes2.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes2.cpp @@ -394,6 +394,11 @@ void GraphicsHelperES2::depthMask(GLenum mode) m_funcs->glDepthMask(mode); } +void GraphicsHelperES2::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_funcs->glDepthRangef(static_cast<float>(nearValue), static_cast<float>(farValue)); +} + void GraphicsHelperES2::frontFace(GLenum mode) { m_funcs->glFrontFace(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperes2_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelperes2_p.h index 8c8dd34e9..ace61edeb 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelperes2_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperes2_p.h @@ -88,6 +88,7 @@ public: void clearBufferf(GLint drawbuffer, const QVector4D &values) override; GLuint createFrameBufferObject() override; void depthMask(GLenum mode) override; + void depthRange(GLdouble nearValue, GLdouble farValue) override; void depthTest(GLenum mode) override; void disableClipPlane(int clipPlane) override; void disablei(GLenum cap, GLuint index) override; diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp index b6f3412b2..6b7c3661e 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp @@ -341,6 +341,11 @@ void GraphicsHelperGL2::depthMask(GLenum mode) m_funcs->glDepthMask(mode); } +void GraphicsHelperGL2::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_funcs->glDepthRange(nearValue, farValue); +} + void GraphicsHelperGL2::frontFace(GLenum mode) { m_funcs->glFrontFace(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h index b142b2623..bf7e6e228 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h @@ -88,6 +88,7 @@ public: void clearBufferf(GLint drawbuffer, const QVector4D &values) override; GLuint createFrameBufferObject() override; void depthMask(GLenum mode) override; + void depthRange(GLdouble nearValue, GLdouble farValue) override; void depthTest(GLenum mode) override; void disableClipPlane(int clipPlane) override; void disablei(GLenum cap, GLuint index) override; diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp index 5ff1a2ba5..b0cb27556 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp @@ -406,6 +406,11 @@ void GraphicsHelperGL3_2::depthMask(GLenum mode) m_funcs->glDepthMask(mode); } +void GraphicsHelperGL3_2::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_funcs->glDepthRange(nearValue, farValue); +} + void GraphicsHelperGL3_2::frontFace(GLenum mode) { m_funcs->glFrontFace(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h index 9e81345ad..065b61428 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h @@ -90,6 +90,7 @@ public: void clearBufferf(GLint drawbuffer, const QVector4D &values) override; GLuint createFrameBufferObject() override; void depthMask(GLenum mode) override; + void depthRange(GLdouble nearValue, GLdouble farValue) override; void depthTest(GLenum mode) override; void disableClipPlane(int clipPlane) override; void disablei(GLenum cap, GLuint index) override; diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp index 81081943d..e8cb3ee95 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp @@ -402,6 +402,11 @@ void GraphicsHelperGL3_3::depthMask(GLenum mode) m_funcs->glDepthMask(mode); } +void GraphicsHelperGL3_3::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_funcs->glDepthRange(nearValue, farValue); +} + void GraphicsHelperGL3_3::frontFace(GLenum mode) { m_funcs->glFrontFace(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h index c480e5258..c7e5138d1 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h @@ -90,6 +90,7 @@ public: void clearBufferf(GLint drawbuffer, const QVector4D &values) override; GLuint createFrameBufferObject() override; void depthMask(GLenum mode) override; + void depthRange(GLdouble nearValue, GLdouble farValue) override; void depthTest(GLenum mode) override; void disableClipPlane(int clipPlane) override; void disablei(GLenum cap, GLuint index) override; diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp index 22cbf7428..c4f06c3eb 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp @@ -668,6 +668,11 @@ void GraphicsHelperGL4::depthMask(GLenum mode) m_funcs->glDepthMask(mode); } +void GraphicsHelperGL4::depthRange(GLdouble nearValue, GLdouble farValue) +{ + m_funcs->glDepthRange(nearValue, farValue); +} + void GraphicsHelperGL4::frontFace(GLenum mode) { m_funcs->glFrontFace(mode); diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h index da62f4212..878d6e309 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h @@ -88,6 +88,7 @@ public: void clearBufferf(GLint drawbuffer, const QVector4D &values) override; GLuint createFrameBufferObject() override; void depthMask(GLenum mode) override; + void depthRange(GLdouble nearValue, GLdouble farValue) override; void depthTest(GLenum mode) override; void disableClipPlane(int clipPlane) override; void disablei(GLenum cap, GLuint index) override; diff --git a/src/render/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h b/src/render/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h index 2a1688b7f..b50488823 100644 --- a/src/render/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h +++ b/src/render/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h @@ -111,6 +111,7 @@ public: virtual bool checkFrameBufferComplete() = 0; virtual void clearBufferf(GLint drawbuffer, const QVector4D &values) = 0; virtual GLuint createFrameBufferObject() = 0; + virtual void depthRange(GLdouble nearValue, GLdouble farValue) = 0; virtual void depthMask(GLenum mode) = 0; virtual void depthTest(GLenum mode) = 0; virtual void disableClipPlane(int clipPlane) = 0; diff --git a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp index d1ac853ea..4c264383b 100644 --- a/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp +++ b/src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp @@ -233,6 +233,12 @@ void applyStateHelper<MSAAEnabled>(const MSAAEnabled *state, SubmissionContext * gc->setMSAAEnabled(std::get<0>(state->values())); } +template<> +void applyStateHelper<DepthRange>(const DepthRange *state, SubmissionContext *gc) +{ + const auto values = state->values(); + gc->depthRange(std::get<0>(values), std::get<1>(values)); +} template<> void applyStateHelper<DepthTest>(const DepthTest *state, SubmissionContext *gc) @@ -1084,6 +1090,11 @@ void SubmissionContext::applyState(const StateVariant &stateVariant) break; } + case DepthRangeMask: { + applyStateHelper<DepthRange>(static_cast<const DepthRange *>(stateVariant.constState()), this); + break; + } + case FrontFaceStateMask: { applyStateHelper<FrontFace>(static_cast<const FrontFace *>(stateVariant.constState()), this); break; @@ -1166,6 +1177,9 @@ void SubmissionContext::resetMasked(qint64 maskOfStatesToReset) if (maskOfStatesToReset & StencilTestStateMask) funcs->glDisable(GL_STENCIL_TEST); + if (maskOfStatesToReset & DepthRangeMask) + depthRange(0.0f, 1.0f); + if (maskOfStatesToReset & DepthTestStateMask) funcs->glDisable(GL_DEPTH_TEST); |