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