diff --git a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.cpp b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.cpp index b74c357a82..a486ded3b2 100644 --- a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.cpp +++ b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.cpp @@ -199,6 +199,19 @@ void WebGLRenderingContextBase::depth_mask(GLboolean mask) m_context->gl_depth_mask(mask); } +void WebGLRenderingContextBase::depth_range(GLclampf z_near, GLclampf z_far) +{ + if (m_context_lost) + return; + + dbgln_if(WEBGL_CONTEXT_DEBUG, "WebGLRenderingContextBase::depth_range(z_near={}, z_far={})", z_near, z_far); + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#VIEWPORT_DEPTH_RANGE + // "The WebGL API does not support depth ranges with where the near plane is mapped to a value greater than that of the far plane. A call to depthRange will generate an INVALID_OPERATION error if zNear is greater than zFar." + RETURN_WITH_WEBGL_ERROR_IF(z_near > z_far, GL_INVALID_OPERATION); + m_context->gl_depth_range(z_near, z_far); +} + void WebGLRenderingContextBase::finish() { if (m_context_lost) diff --git a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.h b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.h index c5de9b6fdd..4bf1e26a64 100644 --- a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.h +++ b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.h @@ -40,6 +40,7 @@ public: void depth_func(GLenum func); void depth_mask(GLboolean mask); + void depth_range(GLclampf z_near, GLclampf z_far); void finish(); void flush(); diff --git a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl index 0095c9fae9..7d49fac82f 100644 --- a/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl +++ b/Userland/Libraries/LibWeb/WebGL/WebGLRenderingContextBase.idl @@ -35,6 +35,7 @@ interface mixin WebGLRenderingContextBase { undefined depthFunc(GLenum func); undefined depthMask(GLboolean flag); + undefined depthRange(GLclampf zNear, GLclampf zFar); undefined finish(); undefined flush();