2 * Test NPOT textures with the GL_ARB_texture_non_power_of_two extension.
12 #include "../util/readtex.c"
14 #define IMAGE_FILE "../images/girl.rgb"
16 static GLfloat Zrot
= 0;
18 static void Display( void )
20 glClear( GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
23 glRotatef(Zrot
, 0, 0, 1);
40 static void Reshape( int width
, int height
)
42 glViewport( 0, 0, width
, height
);
43 glMatrixMode( GL_PROJECTION
);
45 glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
46 glMatrixMode( GL_MODELVIEW
);
48 glTranslatef( 0.0, 0.0, -7.0 );
52 static void Key( unsigned char key
, int x
, int y
)
71 static void Init( void )
74 int imgWidth
, imgHeight
, minDim
, w
;
77 if (!glutExtensionSupported("GL_ARB_texture_non_power_of_two")) {
78 printf("Sorry, this program requires GL_ARB_texture_non_power_of_two\n");
83 image
= LoadRGBImage( IMAGE_FILE
, &imgWidth
, &imgHeight
, &imgFormat
);
85 printf("Couldn't read %s\n", IMAGE_FILE
);
93 image
= malloc(imgWidth
* imgHeight
* 3);
94 for (i
= 0; i
< imgHeight
; i
++) {
95 for (j
= 0; j
< imgWidth
; j
++) {
96 int k
= (i
* imgWidth
+ j
) * 3;
111 printf("Read %d x %d\n", imgWidth
, imgHeight
);
113 minDim
= imgWidth
< imgHeight
? imgWidth
: imgHeight
;
115 glPixelStorei(GL_UNPACK_ALIGNMENT
, 1);
118 * 1D Texture. Test proxy first, if that works, test non-proxy target.
120 glTexImage1D(GL_PROXY_TEXTURE_1D
, 0, GL_RGB
, imgWidth
, 0,
121 imgFormat
, GL_UNSIGNED_BYTE
, image
);
122 glGetTexLevelParameteriv(GL_PROXY_TEXTURE_1D
, 0, GL_TEXTURE_WIDTH
, &w
);
123 assert(w
== imgWidth
|| w
== 0);
126 glTexImage1D(GL_TEXTURE_1D
, 0, GL_RGB
, imgWidth
, 0,
127 imgFormat
, GL_UNSIGNED_BYTE
, image
);
128 assert(glGetError() == GL_NO_ERROR
);
135 glTexImage2D(GL_PROXY_TEXTURE_2D
, 0, GL_RGB
, imgWidth
, imgHeight
, 0,
136 imgFormat
, GL_UNSIGNED_BYTE
, image
);
137 glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D
, 0, GL_TEXTURE_WIDTH
, &w
);
138 assert(w
== imgWidth
|| w
== 0);
141 glTexImage2D(GL_TEXTURE_2D
, 0, GL_RGB
, imgWidth
, imgHeight
, 0,
142 imgFormat
, GL_UNSIGNED_BYTE
, image
);
143 assert(glGetError() == GL_NO_ERROR
);
150 glTexImage3D(GL_PROXY_TEXTURE_3D
, 0, GL_RGB
, imgWidth
, imgHeight
, 1, 0,
151 imgFormat
, GL_UNSIGNED_BYTE
, image
);
152 glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D
, 0, GL_TEXTURE_WIDTH
, &w
);
153 assert(w
== imgWidth
|| w
== 0);
156 glTexImage3D(GL_TEXTURE_3D
, 0, GL_RGB
, imgWidth
, imgHeight
, 1, 0,
157 imgFormat
, GL_UNSIGNED_BYTE
, image
);
158 assert(glGetError() == GL_NO_ERROR
);
165 glTexImage2D(GL_PROXY_TEXTURE_CUBE_MAP
, 0, GL_RGB
,
167 imgFormat
, GL_UNSIGNED_BYTE
, image
);
168 glGetTexLevelParameteriv(GL_PROXY_TEXTURE_CUBE_MAP
, 0, GL_TEXTURE_WIDTH
, &w
);
169 assert(w
== minDim
|| w
== 0);
172 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X
, 0, GL_RGB
,
174 imgFormat
, GL_UNSIGNED_BYTE
, image
);
175 assert(glGetError() == GL_NO_ERROR
);
178 glTexParameteri(GL_TEXTURE_2D
, GL_TEXTURE_MIN_FILTER
, GL_NEAREST
);
179 glTexParameteri(GL_TEXTURE_2D
, GL_TEXTURE_MAG_FILTER
, GL_NEAREST
);
180 glEnable(GL_TEXTURE_2D
);
184 int main( int argc
, char *argv
[] )
186 glutInit( &argc
, argv
);
187 glutInitWindowPosition( 0, 0 );
188 glutInitWindowSize( 400, 400 );
189 glutInitDisplayMode( GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
190 glutCreateWindow(argv
[0]);
191 glutReshapeFunc( Reshape
);
192 glutKeyboardFunc( Key
);
193 glutDisplayFunc( Display
);