1 /* Test GL_NV_fragment_program */
8 #define GL_GLEXT_PROTOTYPES
13 static void Display( void )
15 glClear( GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
19 glColor4f(0, 0.5, 0, 1);
20 glColor4f(0, 1, 0, 1);
33 static void Reshape( int width
, int height
)
35 glViewport( 0, 0, width
, height
);
36 glMatrixMode( GL_PROJECTION
);
38 glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
39 glMatrixMode( GL_MODELVIEW
);
41 glTranslatef( 0.0, 0.0, -15.0 );
45 static void Key( unsigned char key
, int x
, int y
)
58 static void Init( void )
60 static const char *prog0
=
62 "MUL o[COLR], R0, f[WPOS]; \n"
63 "ADD o[COLH], H3, f[TEX0]; \n"
64 "ADD_SAT o[COLH], H3, f[TEX0]; \n"
65 "ADDX o[COLH], H3, f[TEX0]; \n"
66 "ADDHC o[COLH], H3, f[TEX0]; \n"
67 "ADDXC o[COLH], H3, f[TEX0]; \n"
68 "ADDXC_SAT o[COLH], H30, f[TEX0]; \n"
69 "MUL o[COLR].xy, R0.wzyx, f[WPOS]; \n"
70 "MUL o[COLR], H0, f[WPOS]; \n"
71 "MUL o[COLR], -H0, f[WPOS]; \n"
77 /* masked updates, defines, declarations */
78 static const char *prog1
=
80 "DEFINE foo = {1, 2, 3, 4}; \n"
82 "DECLARE foo3 = {5, 6, 7, 8}; \n"
85 "DECLARE bar3 = bar; \n"
86 "#DECLARE bar4 = { a, b, c, d }; \n"
87 "MOV o[COLR].xy, R0; \n"
88 "MOV o[COLR] (NE), R0; \n"
89 "MOV o[COLR] (NE.wzyx), R0; \n"
90 "MOV o[COLR].xy (NE.wzyx), R0; \n"
91 "MOV RC.x (EQ), R1.x; \n"
97 /* texture instructions */
98 static const char *prog2
=
100 "TEX R0, f[TEX0], TEX0, 2D; \n"
101 "TEX R1, f[TEX1], TEX1, CUBE; \n"
102 "TEX R2, f[TEX2], TEX2, 3D; \n"
103 "TXP R3, f[TEX3], TEX3, RECT; \n"
104 "TXD R3, R2, R1, f[TEX3], TEX3, RECT; \n"
105 "MUL o[COLR], R0, f[COL0]; \n"
109 /* test negation, absolute value */
110 static const char *prog3
=
120 "MOV o[COLR], R0; \n"
124 /* literal constant sources */
125 static const char *prog4
=
127 "DEFINE Pi = 3.14159; \n"
128 "MOV R0, {1, -2, +3, 4}; \n"
133 "MOV o[COLR], R0; \n"
137 /* change the fragment color in a simple way */
138 static const char *prog10
=
140 "DEFINE blue = {0, 0, 1, 0};\n"
142 "MOV R0, f[COL0]; \n"
143 "#ADD o[COLR], R0, f[COL0]; \n"
144 "#ADD o[COLR], blue, f[COL0]; \n"
145 "#ADD o[COLR], {1, 0, 0, 0}, f[COL0]; \n"
146 "ADD o[COLR], color, f[COL0]; \n"
152 if (!glutExtensionSupported ("GL_NV_fragment_program")) {
153 printf("Sorry, this program requires GL_NV_fragment_program\n");
157 glGenProgramsNV(20, progs
);
160 assert(progs
[0] != progs
[1]);
163 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[0],
165 (const GLubyte
*) prog0
);
166 assert(glIsProgramNV(progs
[0]));
169 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[1],
171 (const GLubyte
*) prog1
);
172 assert(glIsProgramNV(progs
[1]));
174 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[2],
176 (const GLubyte
*) prog2
);
177 assert(glIsProgramNV(progs
[2]));
178 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[2]);
180 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[3],
182 (const GLubyte
*) prog3
);
183 assert(glIsProgramNV(progs
[3]));
184 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[3]);
186 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[4],
188 (const GLubyte
*) prog4
);
189 assert(glIsProgramNV(progs
[4]));
190 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[4]);
194 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[10],
196 (const GLubyte
*) prog10
);
197 assert(glIsProgramNV(progs
[10]));
198 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[10]);
200 glProgramNamedParameter4fNV(progs
[10],
201 strlen("color"), (const GLubyte
*) "color",
204 glEnable(GL_FRAGMENT_PROGRAM_NV
);
205 glEnable(GL_ALPHA_TEST
);
206 glAlphaFunc(GL_ALWAYS
, 0.0);
208 printf("glGetError = %d\n", (int) glGetError());
212 int main( int argc
, char *argv
[] )
214 glutInit( &argc
, argv
);
215 glutInitWindowPosition( 0, 0 );
216 glutInitWindowSize( 250, 250 );
217 glutInitDisplayMode( GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
218 glutCreateWindow(argv
[0]);
219 glutReshapeFunc( Reshape
);
220 glutKeyboardFunc( Key
);
221 glutDisplayFunc( Display
);