void glTexImage2D( GLenum target , GLint level , GLint components , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const GLvoid *pixels );target には、通常 GL_TEXTURE_2D を指定します
| 定数 | 
|---|
| GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16 | 
| GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12 GL_LUMINANCE16 | 
| GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 | 
| GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16 | 
| GL_R3_G3_B2, GL_RGB, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16 | 
| GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1 GL_RGBA8, GL_RGB10_A2, GL_RGBA12, GL_RGBA16 | 
void glTexCoord1d(GLdouble s); void glTexCoord1f(GLfloat s); void glTexCoord1i(GLint s); void glTexCoord1s(GLshort s); void glTexCoord2d(GLdouble s, GLdouble t); void glTexCoord2f(GLfloat s, GLfloat t); void glTexCoord2i(GLint s, GLint t); void glTexCoord2s(GLshort s, GLshort t); void glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); void glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); void glTexCoord3i( GLint s, GLint t, GLint r ); void glTexCoord3s( GLshort s, GLshort t, GLshort r ); void glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); void glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); void glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); void glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); void glTexCoord1dv(const GLdouble *v); void glTexCoord1fv(const GLfloat *v); void glTexCoord1iv(const GLint *v); void glTexCoord1sv(const GLshort *v); void glTexCoord2dv(const GLdouble *v); void glTexCoord2fv(const GLfloat *v); void glTexCoord2iv(const GLint *v); void glTexCoord2sv(const GLshort *v); void glTexCoord3dv(const GLdouble *v); void glTexCoord3fv(const GLfloat *v); void glTexCoord3iv(const GLint *v); void glTexCoord3sv(const GLshort *v); void glTexCoord4dv(const GLdouble *v); void glTexCoord4fv(const GLfloat *v); void glTexCoord4iv(const GLint *v); void glTexCoord4sv(const GLshort *v);新しいテクスチャ座標は (s , t , r , q) に配置されます
#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define TEXSIZE 64
GLubyte bits[TEXSIZE][TEXSIZE][3];
GLuint texName;
void disp( void ) {
	glClear(GL_COLOR_BUFFER_BIT);
	glBindTexture(GL_TEXTURE_2D , texName);
	glBegin(GL_POLYGON);
		glTexCoord2f(0 , 0); glVertex2f(-0.9 , -0.9);
		glTexCoord2f(0 , 1); glVertex2f(-0.9 , 0.9);
		glTexCoord2f(1 , 1); glVertex2f(0.9 , 0.9);
		glTexCoord2f(1 , 0); glVertex2f(0.9 , -0.9);
	glEnd();
	glFlush();
}
void timer(int value) {
	glRotatef(1 , 0.5 , 1 , 0.25);
	glutPostRedisplay();
	glutTimerFunc(50 , timer , 0);
}
int main(int argc , char ** argv) {
	unsigned int i , j;
	for (i = 0 ; i < TEXSIZE ; i++) {
		int r = (i * 0xFF) / TEXSIZE;
		for (j = 0 ; j < TEXSIZE ; j++) {
			bits[i][j][0] = (GLubyte)r;
			bits[i][j][1] = (GLubyte)(( j * 0xFF ) / TEXSIZE);
			bits[i][j][2] = (GLubyte)~r;
		}
	}
	glutInit(&argc , argv);
	glutInitWindowSize(400 , 300);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
	
	glutCreateWindow("Kitty on your lap");
	glutDisplayFunc(disp);
	glutTimerFunc(100 , timer , 0);
	glEnable(GL_TEXTURE_2D);
	glGenTextures(1 , &texName);
	glBindTexture(GL_TEXTURE_2D , texName);
	glTexImage2D(
		GL_TEXTURE_2D , 0 , 3 , TEXSIZE , TEXSIZE ,
		0 , GL_RGB , GL_UNSIGNED_BYTE , bits
	);
	glutMainLoop();
	return 0;
}

#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define TEXSIZE 64
GLubyte bits[TEXSIZE][TEXSIZE][3];
GLuint texName;
void disp( void ) {
	glClear(GL_COLOR_BUFFER_BIT);
	glBindTexture(GL_TEXTURE_2D , texName);
	glRotated(2 , 1 , 1 , 0.25);
	glBegin(GL_POLYGON);
		glTexCoord2f(0 , 0); glVertex2f(-0.9 , -0.9);
		glTexCoord2f(0 , 1); glVertex2f(-0.9 , 0.9);
		glTexCoord2f(1 , 1); glVertex2f(0.9 , 0.9);
		glTexCoord2f(1 , 0); glVertex2f(0.9 , -0.9);
	glEnd();
	glFlush();
}
void timer(int value) {
	glRotatef(1 , 0.5 , 1 , 0.25);
	glutPostRedisplay();
	glutTimerFunc(50 , timer , 0);
}
int main(int argc , char ** argv) {
	unsigned int i , j;
	for (i = 0 ; i < TEXSIZE ; i++) {
		int r = (i * 0xFF) / TEXSIZE;
		for (j = 0 ; j < TEXSIZE ; j++) {
			bits[i][j][0] = (GLubyte)r;
			bits[i][j][1] = (GLubyte)(( j * 0xFF ) / TEXSIZE);
			bits[i][j][2] = (GLubyte)~r;
		}
	}
	glutInit(&argc , argv);
	glutInitWindowSize(400 , 300);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
	
	glutCreateWindow("Kitty on your lap");
	glutDisplayFunc(disp);
	glutTimerFunc(100 , timer , 0);
	glEnable(GL_TEXTURE_2D);
	glGenTextures(1 , &texName);
	glBindTexture(GL_TEXTURE_2D , texName);
	glTexImage2D(
		GL_TEXTURE_2D , 0 , 3 , TEXSIZE , TEXSIZE ,
		0 , GL_RGB , GL_UNSIGNED_BYTE , bits
	);
	glutMainLoop();
	glDeleteTextures(1 , &texName);
	return 0;
}
先ほどのプログラムを改良して、最後にテクスチャの削除を行っています