- #define WIDTH 300
- #define HEIGHT 300
- #define DEPTH 10
- #define BYTES_PER_TEXEL 4
- #define LAYER(r) (WIDTH * HEIGHT * r * BYTES_PER_TEXEL)
- #define TEXEL2(s, t) (BYTES_PER_TEXEL * (s * WIDTH + t))
- #define TEXEL3(s, t, r) (TEXEL2(s, t) + LAYER(r))
- m_ucTexels = (BYTE *)malloc(WIDTH * HEIGHT * DEPTH * BYTES_PER_TEXEL);
- for(int ImgIndex = 0; ImgIndex < DEPTH; ImgIndex++)
- {
- for(int s=0; s < WIDTH; s++)
- {
- for(int t=0; t < HEIGHT; t++)
- {
- m_ucTexels[TEXEL3(s, t, ImgIndex)] = 0x80*(ImgIndex/DEPTH);
- m_ucTexels[TEXEL3(s, t, ImgIndex)+1] = 0x80*(ImgIndex/DEPTH);
- m_ucTexels[TEXEL3(s, t, ImgIndex)+2] = 0x80*(ImgIndex/DEPTH);
- m_ucTexels[TEXEL3(s, t, ImgIndex)+4] = 0x80;
- }
- }
- }
- glGenTextures(1, &m_uiTexName);
- glBindTexture(GL_TEXTURE_3D, m_uiTexName);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // GL_REPEAT);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // GL_REPEAT);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); // GL_REPEAT);
- #if (__WIN32__)
- glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D");
- if (glTexImage3D == NULL)
- return FALSE;
- #endif
- glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, WIDTH, HEIGHT, DEPTH, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_ucTexels);