diff options
Diffstat (limited to 'progs/tests/blitfb.c')
-rw-r--r-- | progs/tests/blitfb.c | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/progs/tests/blitfb.c b/progs/tests/blitfb.c deleted file mode 100644 index 18c8380a5e..0000000000 --- a/progs/tests/blitfb.c +++ /dev/null @@ -1,259 +0,0 @@ -/** - * Test glFramebufferBlit() - * Brian Paul - * 27 Oct 2009 - */ - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <GL/glew.h> -#include <GL/glut.h> - - -static int Win; -static int WinWidth = 1100, WinHeight = 600; - -static int SrcWidth = 512, SrcHeight = 512; -static int DstWidth = 512, DstHeight = 512; - -static GLuint SrcFB, DstFB; -static GLuint SrcTex, DstTex; - -#if 0 -static GLenum SrcTexTarget = GL_TEXTURE_2D, SrcTexFace = GL_TEXTURE_2D; -#else -static GLenum SrcTexTarget = GL_TEXTURE_CUBE_MAP, SrcTexFace = GL_TEXTURE_CUBE_MAP_POSITIVE_X; -#endif - -static GLenum DstTexTarget = GL_TEXTURE_2D, DstTexFace = GL_TEXTURE_2D; - -static GLuint SrcTexLevel = 01, DstTexLevel = 0; - - -static void -Draw(void) -{ - GLboolean rp = GL_FALSE; - GLubyte *buf; - GLint srcWidth = SrcWidth >> SrcTexLevel; - GLint srcHeight = SrcHeight >> SrcTexLevel; - GLint dstWidth = DstWidth >> DstTexLevel; - GLint dstHeight = DstHeight >> DstTexLevel; - GLenum status; - - /* clear window */ - glBindFramebufferEXT(GL_FRAMEBUFFER, 0); - glClearColor(0.5, 0.5, 0.5, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - - - /* clear src buf */ - glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB); - status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - assert(status == GL_FRAMEBUFFER_COMPLETE_EXT); - glClearColor(0, 1, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - - /* clear dst buf */ - glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB); - status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - assert(status == GL_FRAMEBUFFER_COMPLETE_EXT); - glClearColor(1, 0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); - - /* blit src -> dst */ - glBindFramebufferEXT(GL_READ_FRAMEBUFFER, SrcFB); - glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, DstFB); - glBlitFramebufferEXT(0, 0, srcWidth, srcHeight, - 0, 0, dstWidth, dstHeight, - GL_COLOR_BUFFER_BIT, GL_NEAREST); - -#if 01 - /* read src results */ - buf = malloc(4 * srcWidth * srcHeight); - memset(buf, 0x88, 4 * srcWidth * srcHeight); - glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB); - if (rp) - glReadPixels(0, 0, srcWidth, srcHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf); - else { - glBindTexture(SrcTexTarget, SrcTex); - glGetTexImage(SrcTexFace, SrcTexLevel, GL_RGBA, GL_UNSIGNED_BYTE, buf); - } - - /* draw dst in window */ - glBindFramebufferEXT(GL_FRAMEBUFFER, 0); - glWindowPos2i(0, 0); - glDrawPixels(srcWidth, srcHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf); - - printf("Src Pix[0] = %d %d %d %d\n", buf[0], buf[1], buf[2], buf[3]); - free(buf); -#endif - - glFinish(); - - /* read dst results */ - buf = malloc(4 * dstWidth * dstHeight); - memset(buf, 0x88, 4 * dstWidth * dstHeight); - glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB); - if (rp) - glReadPixels(0, 0, dstWidth, dstHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf); - else { - glBindTexture(DstTexTarget, DstTex); - glGetTexImage(DstTexFace, DstTexLevel, GL_RGBA, GL_UNSIGNED_BYTE, buf); - } - - /* draw dst in window */ - glBindFramebufferEXT(GL_FRAMEBUFFER, 0); - glWindowPos2i(srcWidth + 2, 0); - glDrawPixels(dstWidth, dstHeight, GL_RGBA, GL_UNSIGNED_BYTE, buf); - - printf("Dst Pix[0] = %d %d %d %d\n", buf[0], buf[1], buf[2], buf[3]); - free(buf); - - glFinish(); - - glutSwapBuffers(); -} - - -static void -Reshape(int width, int height) -{ - WinWidth = width; - WinHeight = height; - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -15.0); -} - - -static void -Key(unsigned char key, int x, int y) -{ - (void) x; - (void) y; - switch (key) { - case 27: - glutDestroyWindow(Win); - exit(0); - break; - } - glutPostRedisplay(); -} - - -static void -SpecialKey(int key, int x, int y) -{ - (void) x; - (void) y; - switch (key) { - } - glutPostRedisplay(); -} - - -static void -InitFBOs(void) -{ - GLuint w, h, lvl; - - /* Src */ - glGenTextures(1, &SrcTex); - glBindTexture(SrcTexTarget, SrcTex); - w = SrcWidth; - h = SrcHeight; - lvl = 0; - for (lvl = 0; ; lvl++) { - if (SrcTexTarget == GL_TEXTURE_CUBE_MAP) { - GLuint f; - for (f = 0; f < 6; f++) { - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, lvl, GL_RGBA8, - w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - } - } - else { - /* single face */ - glTexImage2D(SrcTexFace, lvl, GL_RGBA8, w, h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, NULL); - } - if (w == 1 && h == 1) - break; - if (w > 1) - w /= 2; - if (h > 1) - h /= 2; - } - - glGenFramebuffersEXT(1, &SrcFB); - glBindFramebufferEXT(GL_FRAMEBUFFER, SrcFB); - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - SrcTexFace, SrcTex, SrcTexLevel); - - /* Dst */ - glGenTextures(1, &DstTex); - glBindTexture(DstTexTarget, DstTex); - w = DstWidth; - h = DstHeight; - lvl = 0; - for (lvl = 0; ; lvl++) { - glTexImage2D(DstTexFace, lvl, GL_RGBA8, w, h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, NULL); - if (w == 1 && h == 1) - break; - if (w > 1) - w /= 2; - if (h > 1) - h /= 2; - } - - glGenFramebuffersEXT(1, &DstFB); - glBindFramebufferEXT(GL_FRAMEBUFFER, DstFB); - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - DstTexFace, DstTex, DstTexLevel); -} - - -static void -Init(void) -{ - if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { - fprintf(stderr, "This test requires GL_EXT_framebuffer_object\n"); - exit(1); - } - - if (!glutExtensionSupported("GL_EXT_framebuffer_blit")) { - fprintf(stderr, "This test requires GL_EXT_framebuffer_blit,\n"); - exit(1); - } - - InitFBOs(); - - printf("Left rect = src FBO, Right rect = dst FBO.\n"); - printf("Both should be green.\n"); -} - - -int -main(int argc, char *argv[]) -{ - glutInit(&argc, argv); - glutInitWindowSize(WinWidth, WinHeight); - glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); - Win = glutCreateWindow(argv[0]); - glewInit(); - glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); - glutSpecialFunc(SpecialKey); - glutDisplayFunc(Draw); - Init(); - glutMainLoop(); - return 0; -} |