blob: b063f179569a3ca8a6776d8d87042014d2e950d9 [file] [log] [blame]
Brian34d535a2007-08-10 13:06:07 -06001/*
2 * glRead/DrawPixels test
3 */
4
5
José Fonseca479ea7d2009-01-23 14:35:36 +00006#include <GL/glew.h>
Brian34d535a2007-08-10 13:06:07 -06007#include <stdio.h>
8#include <string.h>
9#include <stdlib.h>
10#include <GL/glut.h>
11
12static int Width = 250, Height = 250;
Brian9f51e182007-08-13 18:18:45 -060013static GLfloat Zoom = 1.0;
Brian34d535a2007-08-10 13:06:07 -060014
15static void Init(void)
16{
17 fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
18 fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
19 fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
Keith Whitwelleb9801c2009-03-24 16:35:29 +000020 fflush(stderr);
Brian34d535a2007-08-10 13:06:07 -060021 glClearColor(0.3, 0.1, 0.3, 0.0);
22}
23
24static void Reshape(int width, int height)
25{
26 Width = width / 2;
27 Height = height;
28 /* draw on left half (we'll read that area) */
29 glViewport(0, 0, Width, height);
30 glMatrixMode(GL_PROJECTION);
31 glLoadIdentity();
32 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
33 glMatrixMode(GL_MODELVIEW);
34}
35
36static void Key(unsigned char key, int x, int y)
37{
38 switch (key) {
39 case 27:
40 exit(0);
41 default:
Vinson Lee3790c6a2009-11-19 13:03:12 -080042 break;
Brian34d535a2007-08-10 13:06:07 -060043 }
44 glutPostRedisplay();
45}
46
47static void Draw(void)
48{
49 GLfloat *image = (GLfloat *) malloc(Width * Height * 4 * sizeof(GLfloat));
50
51 glClear(GL_COLOR_BUFFER_BIT);
52
53 glBegin(GL_TRIANGLES);
54 glColor3f(.8,0,0);
55 glVertex3f(-0.9, -0.9, -30.0);
56 glColor3f(0,.9,0);
57 glVertex3f( 0.9, -0.9, -30.0);
58 glColor3f(0,0,.7);
59 glVertex3f( 0.0, 0.9, -30.0);
60 glEnd();
61
Brianb7693ee2007-08-13 13:57:31 -060062 glBegin(GL_QUADS);
63 glColor3f(1, 1, 1);
64 glVertex2f(-1.0, -1.0);
65 glVertex2f(-0.9, -1.0);
66 glVertex2f(-0.9, -0.9);
67 glVertex2f(-1.0, -0.9);
68 glEnd();
69
Brian34d535a2007-08-10 13:06:07 -060070 glReadPixels(0, 0, Width, Height, GL_RGBA, GL_FLOAT, image);
71 printf("Pixel(0,0) = %f, %f, %f, %f\n",
72 image[0], image[1], image[2], image[3]);
73 /* draw to right half of window */
74 glWindowPos2iARB(Width, 0);
Brian9f51e182007-08-13 18:18:45 -060075 glPixelZoom(Zoom, Zoom);
Brian34d535a2007-08-10 13:06:07 -060076 glDrawPixels(Width, Height, GL_RGBA, GL_FLOAT, image);
77 free(image);
78
79 glutSwapBuffers();
80}
81
82int main(int argc, char **argv)
83{
84 glutInit(&argc, argv);
85 glutInitWindowPosition(0, 0);
86 glutInitWindowSize(Width*2, Height);
87 glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_DOUBLE);
88 if (glutCreateWindow(argv[0]) == GL_FALSE) {
89 exit(1);
90 }
91
Brian9f51e182007-08-13 18:18:45 -060092 if (argc > 1)
93 Zoom = atof(argv[1]);
94
José Fonseca479ea7d2009-01-23 14:35:36 +000095 glewInit();
96
Brian34d535a2007-08-10 13:06:07 -060097 Init();
98
99 glutReshapeFunc(Reshape);
100 glutKeyboardFunc(Key);
101 glutDisplayFunc(Draw);
102 glutMainLoop();
103 return 0;
104}