Browse Source

LibWeb/WebGL: Implement WebGLRenderingContextBase.depthRange()

Luke Wilde 3 years ago
parent
commit
0805911a93

+ 13 - 0
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)

+ 1 - 0
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();

+ 1 - 0
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();