main: Fake entry point for glClearNamedFramebufferfv.

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>
This commit is contained in:
Laura Ekstrand 2015-02-05 13:38:39 -08:00 committed by Fredrik Höglund
parent 43db4b8465
commit bbd9c55d02
4 changed files with 30 additions and 0 deletions

View file

@ -211,6 +211,13 @@
<param name="value" type="const GLuint *" />
</function>
<function name="ClearNamedFramebufferfv" offset="assign">
<param name="framebuffer" type="GLuint" />
<param name="buffer" type="GLenum" />
<param name="drawbuffer" type="GLint" />
<param name="value" type="const GLfloat *" />
</function>
<function name="BlitNamedFramebuffer" offset="assign">
<param name="readFramebuffer" type="GLuint" />
<param name="drawFramebuffer" type="GLuint" />

View file

@ -602,6 +602,24 @@ _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
}
/**
* 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_ClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer,
GLint drawbuffer, const GLfloat *value)
{
GLint oldfb;
_mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
_mesa_ClearBufferfv(buffer, drawbuffer, value);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb);
}
/**
* New in GL 3.0
* Clear depth/stencil buffer only.

View file

@ -65,6 +65,10 @@ _mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
extern void GLAPIENTRY
_mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
extern void GLAPIENTRY
_mesa_ClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer,
GLint drawbuffer, const GLfloat *value);
extern void GLAPIENTRY
_mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
GLfloat depth, GLint stencil);

View file

@ -988,6 +988,7 @@ const struct function gl_core_functions_possible[] = {
{ "glInvalidateNamedFramebufferData", 45, -1 },
{ "glClearNamedFramebufferiv", 45, -1 },
{ "glClearNamedFramebufferuiv", 45, -1 },
{ "glClearNamedFramebufferfv", 45, -1 },
{ "glBlitNamedFramebuffer", 45, -1 },
{ "glCheckNamedFramebufferStatus", 45, -1 },
{ "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },