summaryrefslogtreecommitdiffstats
path: root/src/render/renderers/opengl/graphicshelpers
diff options
context:
space:
mode:
authorJim Albamont <jim.albamont@kdab.com>2019-02-07 13:11:48 -0600
committerPaul Lemire <paul.lemire@kdab.com>2019-02-11 06:17:32 +0000
commit3c875662801c213a9c0282de5ef7fadceeb242b3 (patch)
tree30aada420b6346a0fd9b92c653f696ce9c2b053e /src/render/renderers/opengl/graphicshelpers
parent3bccd383606572e70e7cf32bd8d591d9f88a9ec3 (diff)
Add support for glDepthRange
Added a new QRenderState to provide access to glDepthRange. Task-number: QTBUG-73059 Change-Id: I434b73e6e499307bfa58b2a1001e4c48328e9d5b Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/renderers/opengl/graphicshelpers')
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicscontext.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicscontext_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes2.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperes2_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl2.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl2_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_2_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl3_3_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl4.cpp5
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelpergl4_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/graphicshelperinterface_p.h1
-rw-r--r--src/render/renderers/opengl/graphicshelpers/submissioncontext.cpp14
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);