Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL glTexSubImage Data Packing

When using OpenGL's glTexSubImage2D and glTexSubImage3D functions, with a sub image that does not equal the actual dimensions of the texture, should the data pointer contain data packed to match the actual texture dimensions or the dimensions of the sub image?

For example, if you had a simple 3x3 texture, and you wanted to upload only the center pixel, that would be a sub image with x offset 1, y offset 1, width 1, and height 1, and you would call...

glTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RED, GL_UNSIGNED_BYTE, data)

Should data look like { 255 } or like { 0, 0, 0, 0, 255, 0, 0, 0, 0 } ?

like image 539
Daskie Avatar asked Mar 01 '26 14:03

Daskie


1 Answers

The size of the texture doesn't matter.

The size of the subregion updated does. Specifically, glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data) expects data to point to a rectangular image of size (width, height) of appropriate type and format. The way the data is unpacked from the memory is governed by the GL_UNPACK_ALIGNMENT, GL_UNPACK_ROW_LENGTH, and friends. See the OpenGL specification §8.4 Pixel Rectangles.

In your particular case data has to point to a single value like { 255 }.

like image 75
Yakov Galka Avatar answered Mar 03 '26 02:03

Yakov Galka



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!