summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--progs/tests/copypixrate.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/progs/tests/copypixrate.c b/progs/tests/copypixrate.c
index e7620019dc7..e9a42a1c8c9 100644
--- a/progs/tests/copypixrate.c
+++ b/progs/tests/copypixrate.c
@@ -17,6 +17,9 @@ static GLint ImgWidth, ImgHeight;
static GLenum Buffer = GL_FRONT;
static GLenum AlphaTest = GL_FALSE;
+static GLboolean UseBlit = GL_FALSE;
+
+static PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT_func = NULL;
/**
@@ -98,8 +101,19 @@ RunTest(void)
y = Rand(WinHeight);
if (x > ImgWidth || y > ImgHeight) {
- glWindowPos2iARB(x, y);
- glCopyPixels(0, 0, ImgWidth, ImgHeight, GL_COLOR);
+#ifdef GL_EXT_framebuffer_blit
+ if (UseBlit)
+ {
+ glBlitFramebufferEXT_func(0, 0, ImgWidth, ImgHeight,
+ x, y, x + ImgWidth, y + ImgHeight,
+ GL_COLOR_BUFFER_BIT, GL_LINEAR);
+ }
+ else
+#endif
+ {
+ glWindowPos2iARB(x, y);
+ glCopyPixels(0, 0, ImgWidth, ImgHeight, GL_COLOR);
+ }
glFinish(); /* XXX OK? */
iters++;
@@ -197,6 +211,22 @@ ParseArgs(int argc, char *argv[])
Buffer = GL_BACK;
else if (strcmp(argv[i], "-alpha") == 0)
AlphaTest = GL_TRUE;
+ else if (strcmp(argv[i], "-blit") == 0)
+ UseBlit = GL_TRUE;
+ }
+}
+
+
+static void
+Init(void)
+{
+ if (glutExtensionSupported("GL_EXT_framebuffer_blit")) {
+ glBlitFramebufferEXT_func = (PFNGLBLITFRAMEBUFFEREXTPROC)
+ glutGetProcAddress("glBlitFramebufferEXT");
+ }
+ else if (UseBlit) {
+ printf("Warning: GL_EXT_framebuffer_blit not supported.\n");
+ UseBlit = GL_FALSE;
}
}
@@ -222,6 +252,7 @@ main(int argc, char *argv[])
printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER));
printf("Draw Buffer: %s\n", (Buffer == GL_BACK) ? "Back" : "Front");
+ Init();
glutMainLoop();
return 0;