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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| |
void ProcessImage(void)
{
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, g_iPBOSrc); glReadPixels(0, 0, g_iWinW, g_iWinH, GL_BGRA, GL_UNSIGNED_BYTE, 0);
GLubyte *ptr = (GLubyte*)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE);
if(ptr){
for(int i = 0; i < g_iWinW*g_iWinH; ++i){
GLubyte gray = (GLubyte)((ptr[4*i]+ptr[4*i+1]+ptr[4*i+2])/3.0);
ptr[4*i] = gray;
ptr[4*i+1] = gray;
ptr[4*i+2] = gray;
}
glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
}
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, g_iPBOSrc);
glBindTexture(GL_TEXTURE_2D, g_iTexScreen);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, g_iWinW, g_iWinH, GL_BGRA, GL_UNSIGNED_BYTE, 0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
}
void RenderImage(void)
{
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode( GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, g_iWinW, g_iWinH);
glBindTexture(GL_TEXTURE_2D, g_iTexScreen);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 0.5);
glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 0.5);
glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, 0.5);
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 0.5);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
}
|