Advertisement
Guest User

Untitled

a guest
Feb 1st, 2013
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.06 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #include <EGL/egl.h>
  5. #include <GLES/gl.h>
  6. #include <GLES/glext.h>
  7.  
  8.  
  9. int main(int argc, char** argv)
  10. {
  11.     EGLint s_configAttribs[] = {
  12.          EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,//|EGL_WINDOW_BIT,
  13.          EGL_RED_SIZE,       5,
  14.          EGL_GREEN_SIZE,     6,
  15.          EGL_BLUE_SIZE,      5,
  16.          EGL_NONE
  17.      };
  18.  
  19.      EGLint numConfigs = -1;
  20.      EGLint majorVersion;
  21.      EGLint minorVersion;
  22.      EGLConfig config;
  23.      EGLContext context;
  24.      EGLSurface surface;
  25.      EGLint w = 2, h = 2;
  26.  
  27.      int texSize = w;
  28.      char* data = (char*)malloc(4*texSize*texSize*sizeof(char));
  29.      char* result = (char*)malloc(4*texSize*texSize*sizeof(char));
  30.  
  31.      for (int i=0; i<texSize*texSize*4; i++)
  32.         data[i] = i*10;
  33.  
  34.      EGLDisplay dpy;
  35.  
  36.  
  37.      dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
  38.      eglInitialize(dpy, &majorVersion, &minorVersion);
  39.  
  40.          printf("creating pbuffer\n");
  41.          eglChooseConfig(dpy, s_configAttribs, &config, 1, &numConfigs);
  42.          EGLint attribs[] = { EGL_WIDTH, w, EGL_HEIGHT, h, EGL_NONE };
  43.          surface = eglCreatePbufferSurface(dpy, config, attribs);
  44.          if (surface == EGL_NO_SURFACE) {
  45.              printf("eglCreatePbufferSurface error %x\n", eglGetError());
  46.          }
  47.  
  48. //         printf("FBO 0x%02X\n", glCheckFramebufferStatus​(GL_FRAMEBUFFER));
  49.  
  50.      context = eglCreateContext(dpy, config, NULL, NULL);
  51.      eglMakeCurrent(dpy, surface, surface, context);
  52.      eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
  53.      eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
  54.  
  55.     printf("Surface %dx%d\n", w, h);
  56.  
  57.      glViewport(0, 0, w, h);
  58.      glMatrixMode(GL_PROJECTION);
  59.      glLoadIdentity();
  60.      glOrthof(0, w, 0, h, 0, 1); // FIXME: What's that?!?
  61.  
  62.      //~ glClearColor(0,0,0,0);
  63.      //~ glClear(GL_COLOR_BUFFER_BIT);
  64.  
  65.  
  66. //     GLint crop[4] = { 0, 4, 4, -4 };
  67.      glBindTexture(GL_TEXTURE_2D, 0);
  68. //     glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
  69.      glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  70.      glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  71.      glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  72.      glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  73. //     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  74. //     glEnable(GL_TEXTURE_2D);
  75. //     glColor4f(1,1,1,1);
  76.  
  77.      printf("%d: 0x%02X\n", __LINE__, glGetError());
  78.  
  79.      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
  80.          texSize, texSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
  81.  
  82.     printf("%d: 0x%02X\n", __LINE__, glGetError());
  83.  
  84.  
  85.     //glPixelStorei(GL_PACK_ALIGNMENT, 1);
  86.     glReadPixels(0, 0, texSize, texSize, GL_RGBA,
  87.              GL_UNSIGNED_BYTE, result);
  88.  
  89.     printf("%d: 0x%02X\n", __LINE__, glGetError());
  90.  
  91.  
  92.  
  93.     for (int i=0; i<texSize*texSize*4; i++)
  94.         printf("%d\n",data[i]);
  95.     printf("Data after roundtrip:\n");
  96.     for (int i=0; i<texSize*texSize*4; i++)
  97.         printf("%d\n",result[i]);
  98.  
  99.      eglTerminate(dpy);
  100.      return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement