summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/blit.c
diff options
context:
space:
mode:
authorLaura Ekstrand <laura@jlekstrand.net>2015-02-02 16:27:46 -0800
committerFredrik Höglund <fredrik@kde.org>2015-05-14 15:48:14 +0200
commit47b910d27587f738dd81cdb9a879726785c0bc54 (patch)
tree17f7eb70d79478d0143c074c33e886d06a443b46 /src/mesa/main/blit.c
parentb590c617256720e82fff0428a5e0e4a64115fac2 (diff)
downloadexternal_mesa3d-47b910d27587f738dd81cdb9a879726785c0bc54.zip
external_mesa3d-47b910d27587f738dd81cdb9a879726785c0bc54.tar.gz
external_mesa3d-47b910d27587f738dd81cdb9a879726785c0bc54.tar.bz2
main: Add entry point for BlitNamedFramebuffer.
Reviewed-by: Fredrik Höglund <fredrik@kde.org> Signed-off-by: Fredrik Höglund <fredrik@kde.org>
Diffstat (limited to 'src/mesa/main/blit.c')
-rw-r--r--src/mesa/main/blit.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/mesa/main/blit.c b/src/mesa/main/blit.c
index 6c78686..baf3165 100644
--- a/src/mesa/main/blit.c
+++ b/src/mesa/main/blit.c
@@ -526,3 +526,54 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
dstX0, dstY0, dstX1, dstY1,
mask, filter, "glBlitFramebuffer");
}
+
+
+void GLAPIENTRY
+_mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+ GLbitfield mask, GLenum filter)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *readFb, *drawFb;
+
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx,
+ "glBlitNamedFramebuffer(%u %u %d, %d, %d, %d, "
+ " %d, %d, %d, %d, 0x%x, %s)\n",
+ readFramebuffer, drawFramebuffer,
+ srcX0, srcY0, srcX1, srcY1,
+ dstX0, dstY0, dstX1, dstY1,
+ mask, _mesa_lookup_enum_by_nr(filter));
+
+ /*
+ * According to PDF page 533 of the OpenGL 4.5 core spec (30.10.2014,
+ * Section 18.3 Copying Pixels):
+ * "... if readFramebuffer or drawFramebuffer is zero (for
+ * BlitNamedFramebuffer), then the default read or draw framebuffer is
+ * used as the corresponding source or destination framebuffer,
+ * respectively."
+ */
+ if (readFramebuffer) {
+ readFb = _mesa_lookup_framebuffer_err(ctx, readFramebuffer,
+ "glBlitNamedFramebuffer");
+ if (!readFb)
+ return;
+ }
+ else
+ readFb = ctx->WinSysReadBuffer;
+
+ if (drawFramebuffer) {
+ drawFb = _mesa_lookup_framebuffer_err(ctx, drawFramebuffer,
+ "glBlitNamedFramebuffer");
+ if (!drawFb)
+ return;
+ }
+ else
+ drawFb = ctx->WinSysDrawBuffer;
+
+ _mesa_blit_framebuffer(ctx, readFb, drawFb,
+ srcX0, srcY0, srcX1, srcY1,
+ dstX0, dstY0, dstX1, dstY1,
+ mask, filter, "glBlitNamedFramebuffer");
+}