main: Fake entry point for glClearNamedFramebufferfi.
authorLaura Ekstrand <laura@jlekstrand.net>
Thu, 5 Feb 2015 21:43:12 +0000 (13:43 -0800)
committerFredrik Höglund <fredrik@kde.org>
Thu, 14 May 2015 13:48:15 +0000 (15:48 +0200)
Mesa's ClearBuffer framework is very complicated and thoroughly married to the
object binding model.  Moreover, the OpenGL spec for ClearBuffer is also very
complicated.  At some point, we should implement buffer clearing for arbitrary
framebuffer objects, but for now, we will just wrap ClearBuffer.

Reviewed-by: Fredrik Höglund <fredrik@kde.org>
Signed-off-by: Fredrik Höglund <fredrik@kde.org>
src/mapi/glapi/gen/ARB_direct_state_access.xml
src/mesa/main/clear.c
src/mesa/main/clear.h
src/mesa/main/tests/dispatch_sanity.cpp

index 2bb3c7160870c6edc83468dc57b40b54e3942d15..8bafe3f0bb094fa7ecf6a5760be38af8b0ccbdf9 100644 (file)
       <param name="value" type="const GLfloat *" />
    </function>
 
+   <function name="ClearNamedFramebufferfi" offset="assign">
+      <param name="framebuffer" type="GLuint" />
+      <param name="buffer" type="GLenum" />
+      <param name="depth" type="GLfloat" />
+      <param name="stencil" type="GLint" />
+   </function>
+
    <function name="BlitNamedFramebuffer" offset="assign">
       <param name="readFramebuffer" type="GLuint" />
       <param name="drawFramebuffer" type="GLuint" />
index 81e255e5ee76dce7fa395a9d728547e733bfd18a..426caea470903dddce970400216862c12fd52d28 100644 (file)
@@ -682,3 +682,21 @@ _mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
       ctx->Stencil.Clear = clearStencilSave;
    }
 }
+
+
+/**
+ * The ClearBuffer framework is so complicated and so riddled with the
+ * assumption that the framebuffer is bound that, for now, we will just fake
+ * direct state access clearing for the user.
+ */
+void GLAPIENTRY
+_mesa_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
+                              GLfloat depth, GLint stencil)
+{
+   GLint oldfb;
+
+   _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
+   _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
+   _mesa_ClearBufferfi(buffer, 0, depth, stencil);
+   _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb);
+}
index 582159fea0f771a7b44e843fb0539785471aafb8..c29850676ca0b3b2427350cd45a5ff63669dc6af 100644 (file)
@@ -73,4 +73,8 @@ extern void GLAPIENTRY
 _mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
                     GLfloat depth, GLint stencil);
 
+extern void GLAPIENTRY
+_mesa_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
+                              GLfloat depth, GLint stencil);
+
 #endif
index 1f25869d1eeb394ebd7a60a85effbbd1fb065ea7..a119d0874a612800d5cebd6ba3e586e570a01662 100644 (file)
@@ -989,6 +989,7 @@ const struct function gl_core_functions_possible[] = {
    { "glClearNamedFramebufferiv", 45, -1 },
    { "glClearNamedFramebufferuiv", 45, -1 },
    { "glClearNamedFramebufferfv", 45, -1 },
+   { "glClearNamedFramebufferfi", 45, -1 },
    { "glBlitNamedFramebuffer", 45, -1 },
    { "glCheckNamedFramebufferStatus", 45, -1 },
    { "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },