diff options
author | Laura Ekstrand <laura@jlekstrand.net> | 2015-02-05 13:43:12 -0800 |
---|---|---|
committer | Fredrik Höglund <fredrik@kde.org> | 2015-05-14 15:48:15 +0200 |
commit | a0329c7b40de3db22d22c74793a7c268e8904e53 (patch) | |
tree | 95f450d9349b840b3207b74b0ec145b9f9779ddf | |
parent | bbd9c55d0217c697cbe090057bfbf830b551ed36 (diff) | |
download | external_mesa3d-a0329c7b40de3db22d22c74793a7c268e8904e53.zip external_mesa3d-a0329c7b40de3db22d22c74793a7c268e8904e53.tar.gz external_mesa3d-a0329c7b40de3db22d22c74793a7c268e8904e53.tar.bz2 |
main: Fake entry point for glClearNamedFramebufferfi.
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>
-rw-r--r-- | src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 | ||||
-rw-r--r-- | src/mesa/main/clear.c | 18 | ||||
-rw-r--r-- | src/mesa/main/clear.h | 4 | ||||
-rw-r--r-- | src/mesa/main/tests/dispatch_sanity.cpp | 1 |
4 files changed, 30 insertions, 0 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 2bb3c71..8bafe3f 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -218,6 +218,13 @@ <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" /> diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c index 81e255e..426caea 100644 --- a/src/mesa/main/clear.c +++ b/src/mesa/main/clear.c @@ -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); +} diff --git a/src/mesa/main/clear.h b/src/mesa/main/clear.h index 582159f..c298506 100644 --- a/src/mesa/main/clear.h +++ b/src/mesa/main/clear.h @@ -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 diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 1f25869..a119d08 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -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 }, |