1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
int width = 640;
int height = 480;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(width, height);
glutCreateWindow("OpenGL");
cvNamedWindow("Test", 1);
IplImage* image = cvCreateImage(cvSize(width, height), 8, 1);
glGenBuffers = (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffersARB");
glBindBuffer = (PFNGLBINDBUFFERARBPROC)wglGetProcAddress("glBindBufferARB");
glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferDataARB");
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)wglGetProcAddress("glBindFramebufferEXT");
glMapBuffer = (PFNGLMAPBUFFERPROC)wglGetProcAddress("glMapBufferARB");
glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)wglGetProcAddress("glUnmapBufferARB");
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
GLuint pbo;
glGenBuffers(1, &pbo);
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
glBufferData(GL_PIXEL_PACK_BUFFER_ARB, width * height * sizeof(GLfloat), NULL, GL_STREAM_READ_ARB);
glDrawBuffer(GL_BACK);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush();
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
glReadPixels(0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE, 0);
GLuint * buf = NULL;
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
image->imageData = (char*) glMapBuffer(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY);
cvShowImage("Test", image);
while(cvWaitKey(10)==-1);
glUnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB); |
Partager