从 sprite_sheet 坐标创建纹理

Create texture from sprite_sheet coordinates

我有一个sprite_sheet(例子sheet):

我加载为矢量数据,我需要从指定区域制作新纹理。像这样:

const std::vector <char> image_data = LoadPNG("sprite_sheet.png"); // This works.

glMakeTexture([0, 0], [50, 50], configs, image_data) //to display only one sqm.

但我不知道怎么做,因为大多数 GL 函数只能在整个区域工作,比如 glTexImage2D。

// Only have width and height, the bottomLeft coords is 0, 0 -- I want to change this.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &(_sprite_sheet.data[0]));

有没有办法在不加载完整 sprite_sheet 作为纹理的情况下做到这一点?

OBS:我正在使用 picoPNG 解码 PNG,我可以加载 png,但不能从指定区域制作纹理。

因为你没有显示代码,我假设:

char *data; // data of 8-bit per sample RGBA image
int w, h; // size of the image
int sx, sy, sw, sh; // position and size of area you want to crop.

glTexImage2D 确实支持感兴趣区域。你这样做:

glPixelStorei(GL_UNPACK_ROW_LENGTH, w);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, sx);
glPixelStorei(GL_UNPACK_SKIP_ROWS, sy);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // LodePNG tightly packs everything
glTexImage2D(GL_TEXTURE_2D, level, internalFormat, sw, sh, border, format, type, data);