14 unsigned show_fps
= 0;
15 unsigned int frame_cnt
= 0;
16 void alarmhandler(int);
17 static const char *filename
= NULL
;
19 static void usage(char *name
)
21 fprintf(stderr
, "usage: %s [ options ] shader_filename\n", name
);
23 fprintf(stderr
, "\n" );
24 fprintf(stderr
, "options:\n");
25 fprintf(stderr
, " -fps show frames per second\n");
30 void alarmhandler (int sig
)
33 printf("%d frames in 5.0 seconds = %.3f FPS\n", frame_cnt
,
38 signal(SIGALRM
, alarmhandler
);
43 static void args(int argc
, char *argv
[])
47 for (i
= 1; i
< argc
; i
++) {
48 if (strcmp(argv
[i
], "-fps") == 0) {
51 else if (i
== argc
- 1) {
66 static void Init( void )
74 if ((f
= fopen(filename
, "r")) == NULL
) {
75 fprintf(stderr
, "Couldn't open %s\n", filename
);
79 sz
= fread(buf
, 1, sizeof(buf
), f
);
81 fprintf(stderr
, "file too long\n");
84 fprintf(stderr
, "%.*s\n", sz
, buf
);
86 if (!glutExtensionSupported("GL_ARB_fragment_program")) {
87 printf("Error: GL_ARB_fragment_program not supported!\n");
90 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER
));
92 /* Setup the fragment program */
93 glGenProgramsARB(1, &prognum
);
94 glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB
, prognum
);
95 glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB
, GL_PROGRAM_FORMAT_ASCII_ARB
,
96 sz
, (const GLubyte
*)buf
);
99 printf("glGetError = 0x%x\n", errno
);
100 if (errno
!= GL_NO_ERROR
) {
103 glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB
, &errorpos
);
104 printf("errorpos: %d\n", errorpos
);
105 printf("glError(GL_PROGRAM_ERROR_STRING_ARB) = %s\n",
106 (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB
));
108 glEnable(GL_FRAGMENT_PROGRAM_ARB
);
110 glClearColor(.3, .3, .3, 0);
113 static void Reshape(int width
, int height
)
116 glViewport(0, 0, (GLint
)width
, (GLint
)height
);
118 glMatrixMode(GL_PROJECTION
);
120 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
121 glMatrixMode(GL_MODELVIEW
);
124 static void Key(unsigned char key
, int x
, int y
)
137 static void Display(void)
139 glClear(GL_COLOR_BUFFER_BIT
);
141 glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB
, 0, 1.0, 1.0, 0.0, 0.0);
142 glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB
, 1, 0.0, 0.0, 1.0, 1.0);
143 glBegin(GL_TRIANGLES
);
145 glVertex3f( 0.9, -0.9, -30.0);
147 glVertex3f( 0.9, 0.9, -30.0);
149 glVertex3f(-0.9, 0.0, -30.0);
160 int main(int argc
, char **argv
)
162 glutInit(&argc
, argv
);
163 glutInitWindowPosition(0, 0);
164 glutInitWindowSize(250, 250);
165 glutInitDisplayMode(GLUT_RGB
| GLUT_SINGLE
| GLUT_DEPTH
);
167 glutCreateWindow(filename
);
169 glutReshapeFunc(Reshape
);
170 glutKeyboardFunc(Key
);
171 glutDisplayFunc(Display
);
175 signal(SIGALRM
, alarmhandler
);