1 /* Test GL_NV_fragment_program */
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 )
61 static const char *prog0
=
63 "MUL o[COLR], R0, f[WPOS]; \n"
64 "ADD o[COLH], H3, f[TEX0]; \n"
65 "ADD_SAT o[COLH], H3, f[TEX0]; \n"
66 "ADDX o[COLH], H3, f[TEX0]; \n"
67 "ADDHC o[COLH], H3, f[TEX0]; \n"
68 "ADDXC o[COLH], H3, f[TEX0]; \n"
69 "ADDXC_SAT o[COLH], H30, f[TEX0]; \n"
70 "MUL o[COLR].xy, R0.wzyx, f[WPOS]; \n"
71 "MUL o[COLR], H0, f[WPOS]; \n"
72 "MUL o[COLR], -H0, f[WPOS]; \n"
79 /* masked updates, defines, declarations */
80 static const char *prog1
=
82 "DEFINE foo = {1, 2, 3, 4}; \n"
84 "DECLARE foo3 = {5, 6, 7, 8}; \n"
87 "DECLARE bar3 = bar; \n"
88 "#DECLARE bar4 = { a, b, c, d }; \n"
89 "MOV o[COLR].xy, R0; \n"
90 "MOV o[COLR] (NE), R0; \n"
91 "MOV o[COLR] (NE.wzyx), R0; \n"
92 "MOV o[COLR].xy (NE.wzyx), R0; \n"
93 "MOV RC.x (EQ), R1.x; \n"
99 /* texture instructions */
100 static const char *prog2
=
102 "TEX R0, f[TEX0], TEX0, 2D; \n"
103 "TEX R1, f[TEX1], TEX1, CUBE; \n"
104 "TEX R2, f[TEX2], TEX2, 3D; \n"
105 "TXP R3, f[TEX3], TEX3, RECT; \n"
106 "TXD R3, R2, R1, f[TEX3], TEX3, RECT; \n"
107 "MUL o[COLR], R0, f[COL0]; \n"
111 /* test negation, absolute value */
112 static const char *prog3
=
122 "MOV o[COLR], R0; \n"
126 /* literal constant sources */
127 static const char *prog4
=
129 "DEFINE Pi = 3.14159; \n"
130 "MOV R0, {1, -2, +3, 4}; \n"
135 "MOV o[COLR], R0; \n"
139 /* change the fragment color in a simple way */
140 static const char *prog10
=
142 "DEFINE blue = {0, 0, 1, 0};\n"
144 "MOV R0, f[COL0]; \n"
145 "#ADD o[COLR], R0, f[COL0]; \n"
146 "#ADD o[COLR], blue, f[COL0]; \n"
147 "#ADD o[COLR], {1, 0, 0, 0}, f[COL0]; \n"
148 "ADD o[COLR], color, f[COL0]; \n"
154 if (!glutExtensionSupported ("GL_NV_fragment_program")) {
155 printf("Sorry, this program requires GL_NV_fragment_program\n");
159 glGenProgramsNV(20, progs
);
162 assert(progs
[0] != progs
[1]);
165 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[0],
167 (const GLubyte
*) prog0
);
168 assert(glIsProgramNV(progs
[0]));
171 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[1],
173 (const GLubyte
*) prog1
);
174 assert(glIsProgramNV(progs
[1]));
176 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[2],
178 (const GLubyte
*) prog2
);
179 assert(glIsProgramNV(progs
[2]));
180 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[2]);
182 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[3],
184 (const GLubyte
*) prog3
);
185 assert(glIsProgramNV(progs
[3]));
186 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[3]);
188 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[4],
190 (const GLubyte
*) prog4
);
191 assert(glIsProgramNV(progs
[4]));
192 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[4]);
196 glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[10],
198 (const GLubyte
*) prog10
);
199 assert(glIsProgramNV(progs
[10]));
200 glBindProgramNV(GL_FRAGMENT_PROGRAM_NV
, progs
[10]);
202 glProgramNamedParameter4fNV(progs
[10],
203 strlen("color"), (const GLubyte
*) "color",
206 glEnable(GL_FRAGMENT_PROGRAM_NV
);
207 glEnable(GL_ALPHA_TEST
);
208 glAlphaFunc(GL_ALWAYS
, 0.0);
210 printf("glGetError = %d\n", (int) glGetError());
214 int main( int argc
, char *argv
[] )
216 glutInit( &argc
, argv
);
217 glutInitWindowPosition( 0, 0 );
218 glutInitWindowSize( 250, 250 );
219 glutInitDisplayMode( GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
220 glutCreateWindow(argv
[0]);
222 glutReshapeFunc( Reshape
);
223 glutKeyboardFunc( Key
);
224 glutDisplayFunc( Display
);