GLCOPYCOLORTABLE(3G)
β¨ NAME β¨
glCopyColorTable β copy pixels into a color table π (yes bestie, pixels, straight into a table, we love a glow-up)
πΈ C SPECIFICATION πΈ
void glCopyColorTable( GLenum target,
GLenum internalformat,
GLint x,
GLint y,
GLsizei width )
π PARAMETERS π
targetβ the color table you're aiming at. It must be one ofGL_COLOR_TABLE,GL_POST_CONVOLUTION_COLOR_TABLE, orGL_POST_COLOR_MATRIX_COLOR_TABLE. No other options, bestie, that's the whole guest list.internalformatβ how the texture image gets stored on the inside (it's giving inner beauty, honestly). Must be one of these symbolic constants:
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.
xβ the x coordinate of the lower-left corner of the pixel rectangle that's getting transferred into the color table. Lower-left. Not upper-left. Not the middle. πyβ same deal but for y: the y coordinate of the lower-left corner of that pixel rectangle heading into the color table.widthβ how wide that pixel rectangle is.
π¦ DESCRIPTION π¦
So glCopyColorTable loads up a color table using pixels from the current GL_READ_BUFFER β not from main memory, which is what glColorTable does. Different source, same energy. π₯
The screen-aligned pixel rectangle with its lower-left corner at (x, y), having width width and height 1, gets loaded into the color table. And okay, important: if any pixels in that region are outside the window associated with the GL context, the values you get for those pixels are undefined. Not "close enough", not "we'll figure it out" β undefined. π
The pixels in that rectangle get processed exactly as if glReadPixels had been called, with internalformat set to RGBA β but the processing stops after the final conversion to RGBA. That's it, that's the finish line.
Then the four scale parameters and the four bias parameters defined for the table get used to scale and bias the R, G, B, and A components of each pixel. You set those scale and bias parameters by calling glColorTableParameter. π
Next up: the R, G, B, and A values get clamped to the range [0,1]. Then each pixel is converted to the internal format specified by internalformat. This conversion is honestly pretty simple β it just maps the component values of the pixel (R, G, B, and A) onto the values included in the internal format (red, green, blue, alpha, luminance, and intensity). The mapping goes like this:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Internal Format Red Green Blue Alpha Luminance Intensity
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
GL_ALPHA A
GL_LUMINANCE R
GL_LUMINANCE_ALPHA A R
GL_INTENSITY R
GL_RGB R G B
GL_RGBA R G B A
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
And finally β the red, green, blue, alpha, luminance, and/or intensity components of the resulting pixels get stored in the color table. Together they form a one-dimensional table with indices in the range [0, width - 1]. One dimensional, periodt. π
π NOTES π
glCopyColorTable is only available if GL_ARB_imaging is returned from calling glGetString with an argument of GL_EXTENSIONS. Check first, bestie, or you'll be out here confused and alone. π
π ERRORS π
GL_INVALID_ENUMis generated whentargetis not one of the allowable values.GL_INVALID_VALUEis generated ifwidthis less than zero. (Negative width? In this economy? No.)GL_INVALID_VALUEis generated ifinternalformatis not one of the allowable values.GL_TABLE_TOO_LARGEis generated if the requested color table is too large to be supported by the implementation. It's giving "the table said no".GL_INVALID_OPERATIONis generated ifglCopyColorTableis executed between the execution ofglBeginand the corresponding execution ofglEnd. Don't do it in there. Seriously. π
π ASSOCIATED GETS π
glGetColorTableglGetColorTableParameter
π«Ά SEE ALSO π«Ά
glColorTable(3G)glColorTableParameter(3G)glReadPixels(3G)
okay that's the whole page, you're officially a color table girlie now β¨ this was GLCOPYCOLORTABLE(3G) from the 3G manual β mwah, take care of her, she's iconic π
ππ¦
π¦ where this page comes from
- centos-stream 9: gl-manpages 1.1-24.20190306.el9 Β· MIT and Open Publication
- fedora 43: gl-manpages 1.1-34.20190306.fc43 Β· Apache-2.0 AND HPND AND HPND-sell-variant AND MIT AND OpenPBS-2.3 AND SGI-B-2.0 AND W3C-19980720 AND X11
- fedora 44: gl-manpages 1.1-35.20190306.fc44 Β· Apache-2.0 AND HPND AND HPND-sell-variant AND MIT AND OpenPBS-2.3 AND SGI-B-2.0 AND W3C-19980720 AND X11
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms