1
2#include <stdio.h>
3#include <string.h>
4#include <stdlib.h>
5#include <GL/glew.h>
6#include "glut_wrap.h"
7
8
9
10static void Init( void )
11{
12   static const char *modulate2D =
13      "!!ARBfp1.0\n"
14      "MUL result.color, fragment.position, {.005}.x; \n"
15      "END"
16      ;
17   GLuint modulateProg;
18
19   if (!GLEW_ARB_fragment_program) {
20      printf("Error: GL_ARB_fragment_program not supported!\n");
21      exit(1);
22   }
23   printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
24
25   /* Setup the fragment program */
26   glGenProgramsARB(1, &modulateProg);
27   glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, modulateProg);
28   glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
29                        strlen(modulate2D), (const GLubyte *)modulate2D);
30
31   printf("glGetError = 0x%x\n", (int) glGetError());
32   printf("glError(GL_PROGRAM_ERROR_STRING_ARB) = %s\n",
33          (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
34
35   glEnable(GL_FRAGMENT_PROGRAM_ARB);
36
37   glClearColor(.3, .3, .3, 0);
38}
39
40static void Reshape(int width, int height)
41{
42
43    glViewport(0, 0, (GLint)width, (GLint)height);
44
45    glMatrixMode(GL_PROJECTION);
46    glLoadIdentity();
47    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
48    glMatrixMode(GL_MODELVIEW);
49}
50
51static void Key(unsigned char key, int x, int y)
52{
53
54    switch (key) {
55      case 27:
56	exit(1);
57      default:
58	break;
59    }
60
61    glutPostRedisplay();
62}
63
64static void Draw(void)
65{
66   glClear(GL_COLOR_BUFFER_BIT);
67
68#if 0
69   glBegin(GL_QUADS);
70   glTexCoord2f(1,0);
71   glVertex3f( 0.9, -0.9, -30.0);
72   glTexCoord2f(1,1);
73   glVertex3f( 0.9,  0.9, -30.0);
74   glTexCoord2f(0,1);
75   glVertex3f(-0.9,  0.9, -30.0);
76   glTexCoord2f(0,0);
77   glVertex3f(-0.9,  -0.9, -30.0);
78   glEnd();
79#else
80   glPointSize(100);
81   glBegin(GL_POINTS);
82   glColor3f(0,0,1);
83   glVertex3f( 0, 0, -30.0);
84   glEnd();
85#endif
86
87   glFlush();
88
89
90}
91
92
93int main(int argc, char **argv)
94{
95    GLenum type;
96
97    glutInit(&argc, argv);
98
99
100
101    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
102
103    type = GLUT_RGB;
104    type |= GLUT_SINGLE;
105    glutInitDisplayMode(type);
106
107    if (glutCreateWindow("First Tri") == GL_FALSE) {
108	exit(1);
109    }
110
111    glewInit();
112
113    Init();
114
115    glutReshapeFunc(Reshape);
116    glutKeyboardFunc(Key);
117    glutDisplayFunc(Draw);
118    glutMainLoop();
119	return 0;
120}
121