1 bit (3D) texture

hi,

im trying to create a (3D) texture that only have a boolean value instead of an 8 bit value. i checked everywhere, and it seems like the type of texuture is limited to this:

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, or GL_RGBA16. Additionally, if the extension GL_EXT_shadow is supported, may be one of the symbolic constants GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT16_EXT, GL_DEPTH_COMPONENT24_EXT, or GL_DEPTH_COMPONENT32_EXT.

there is no 1 bit value for the the texture as far as i notice. is it possible to make a 1 bit texture in openGL? if so, how can i do that? whats the difference between GL_ALPHA and GL_ALPHA8?

thanks in advance

No, there’s no such thing as a 1-bit texture, and even if there was it is extremely unlikely to be supported in hardware. Texture memory is cheap and plentiful these days anyway so there’s no real reason to be scrimping and saving like this.

GL_ALPHA8 means “I explicitly want an 8-bit alpha texture”. GL_ALPHA means “I want an alpha texture, I don’t care how many bits, let the driver decide”. In practice it’s most likely going to be 8 on current hardware.

Yes, there is no direct way of 1bit textures since no common hardware supports it.

As a workaround, you can write a function in GLSL which samples a 8bit integer 3Dtexture and does the necessary bitmasking/shifting to extract one bit.

3D texture are quickly huge, and being able to have a 8x smaller texture can be the difference between “possible” and impossible.