Merge branch '7.8'
[mesa.git] / progs / tests / fbotest2.c
index 5283c7e1fd6673b9c6b18b4d9ed0f9c5866dcb8f..faf0dd874842070118b572ce6ef8e017328a14fc 100644 (file)
@@ -6,11 +6,11 @@
  */
 
 
-#define GL_GLEXT_PROTOTYPES
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
+#include <GL/glew.h>
 #include <GL/glut.h>
 
 static int Win = 0;
@@ -33,15 +33,16 @@ CheckError(int line)
 static void
 Display( void )
 {
-   GLubyte *buffer = malloc(Width * Height * 4);
+   GLboolean copyPix = GL_FALSE;
+   GLboolean blitPix = GL_FALSE;
    GLenum status;
 
    CheckError(__LINE__);
 
    /* draw to user framebuffer */
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB);
-   glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT);
-   glReadBuffer(GL_COLOR_ATTACHMENT1_EXT);
+   glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+   glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
 
    status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
    if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
@@ -63,16 +64,43 @@ Display( void )
    glutSolidTeapot(2.0);
    glPopMatrix();
 
-   /* read from user framebuffer */
-   glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
+   if (copyPix) {
+      glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, MyFB);
+      glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
+      glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
+      glDrawBuffer(GL_BACK);
 
-   /* draw to window */
-   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-   glDisable(GL_DEPTH_TEST);  /* in case window has depth buffer */
-   glWindowPos2iARB(0, 0);
-   glDrawPixels(Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
+      glDisable(GL_DEPTH_TEST);  /* in case window has depth buffer */
+
+      glWindowPos2iARB(0, 0);
+      glCopyPixels(0, 0, Width, Height, GL_COLOR);
+   }
+   else if (blitPix) {
+      glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, MyFB);
+      glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
+      glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
+      glDrawBuffer(GL_BACK);
+
+      glDisable(GL_DEPTH_TEST);  /* in case window has depth buffer */
+
+      glBlitFramebufferEXT(0, 0, Width, Height,
+                           0, 0, Width, Height,
+                           GL_COLOR_BUFFER_BIT, GL_NEAREST);
+   }
+   else {
+      GLubyte *buffer = malloc(Width * Height * 4);
+      /* read from user framebuffer */
+      glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
+
+      /* draw to window */
+      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+      glDisable(GL_DEPTH_TEST);  /* in case window has depth buffer */
+      glWindowPos2iARB(0, 0);
+      glDrawPixels(Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
+
+      free(buffer);
+   }
 
-   free(buffer);
    glutSwapBuffers();
    CheckError(__LINE__);
 }
@@ -163,7 +191,7 @@ Init( void )
    glGenRenderbuffersEXT(1, &ColorRb);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, ColorRb);
    assert(glIsRenderbufferEXT(ColorRb));
-   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT,
+   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
                                 GL_RENDERBUFFER_EXT, ColorRb);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);
 
@@ -191,6 +219,7 @@ main( int argc, char *argv[] )
    glutInitWindowSize(Width, Height);
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
    Win = glutCreateWindow(argv[0]);
+   glewInit();
    glutReshapeFunc( Reshape );
    glutKeyboardFunc( Key );
    glutDisplayFunc( Display );