5 #define GL_GLEXT_PROTOTYPES
10 unsigned show_fps
= 0;
11 unsigned int frame_cnt
= 0;
12 void alarmhandler(int);
13 static const char *filename
= NULL
;
15 static void usage(char *name
)
17 fprintf(stderr
, "usage: %s [ options ] shader_filename\n", name
);
18 fprintf(stderr
, "\n" );
19 fprintf(stderr
, "options:\n");
20 fprintf(stderr
, " -fps show frames per second\n");
23 void alarmhandler (int sig
)
26 printf("%d frames in 5.0 seconds = %.3f FPS\n", frame_cnt
,
31 signal(SIGALRM
, alarmhandler
);
35 static void args(int argc
, char *argv
[])
39 for (i
= 1; i
< argc
; i
++) {
40 if (strcmp(argv
[i
], "-fps") == 0) {
43 else if (i
== argc
- 1) {
58 static void Init( void )
66 if ((f
= fopen(filename
, "r")) == NULL
) {
67 fprintf(stderr
, "Couldn't open %s\n", filename
);
71 sz
= fread(buf
, 1, sizeof(buf
), f
);
73 fprintf(stderr
, "file too long\n");
76 fprintf(stderr
, "%.*s\n", sz
, buf
);
78 if (!glutExtensionSupported("GL_ARB_fragment_program")) {
79 printf("Error: GL_ARB_fragment_program not supported!\n");
82 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER
));
84 /* Setup the fragment program */
85 glGenProgramsARB(1, &prognum
);
86 glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB
, prognum
);
87 glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB
, GL_PROGRAM_FORMAT_ASCII_ARB
,
88 sz
, (const GLubyte
*)buf
);
91 printf("glGetError = 0x%x\n", errno
);
92 if (errno
!= GL_NO_ERROR
) {
95 glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB
, &errorpos
);
96 printf("errorpos: %d\n", errorpos
);
97 printf("glError(GL_PROGRAM_ERROR_STRING_ARB) = %s\n",
98 (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB
));
100 glEnable(GL_FRAGMENT_PROGRAM_ARB
);
102 glClearColor(.3, .3, .3, 0);
105 static void Reshape(int width
, int height
)
108 glViewport(0, 0, (GLint
)width
, (GLint
)height
);
110 glMatrixMode(GL_PROJECTION
);
112 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
113 glMatrixMode(GL_MODELVIEW
);
116 static void Key(unsigned char key
, int x
, int y
)
129 static void Display(void)
131 glClear(GL_COLOR_BUFFER_BIT
);
133 glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB
, 0, 1.0, 1.0, 0.0, 0.0);
134 glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB
, 1, 0.0, 0.0, 1.0, 1.0);
135 glBegin(GL_TRIANGLES
);
137 glVertex3f( 0.9, -0.9, -30.0);
139 glVertex3f( 0.9, 0.9, -30.0);
141 glVertex3f(-0.9, 0.0, -30.0);
153 int main(int argc
, char **argv
)
155 glutInit(&argc
, argv
);
156 glutInitWindowPosition(0, 0);
157 glutInitWindowSize(250, 250);
158 glutInitDisplayMode(GLUT_RGB
| GLUT_SINGLE
| GLUT_DEPTH
);
160 glutCreateWindow(filename
);
161 glutReshapeFunc(Reshape
);
162 glutKeyboardFunc(Key
);
163 glutDisplayFunc(Display
);
166 signal(SIGALRM
, alarmhandler
);