我已经在下面回答了我的问题。感谢 gavinb 的帮助。
问题:我试图复制纹理只是为了学习体验。我正在使用 24 位 TGA 图像,并且正在使用 SDL 加载它。我已经创建了自己的结构
struct Colour24
{
unsigned char r;
unsigned char g;
unsigned char b;
}
unsigned char* texture = new unsigned char[width * height * 3];
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int index = (y * width) + x;
Colour24 colour = getColourAt(x, y);
newTexture[index] = colour.r;
newTexture[index + 1] = colour.g;
newTexture[index + 2] = colour.b;
}
}
Colour24 getColour(int x, int y)
{
Uint32 pixel;
Uint8 red, green, blue;
Colour24 rgb;
pixel = getPixel(m_surface, x, y); // using the SDL get pixel function
SDL_GetRGB(pixel, m_surface->format, &red, &green, &blue);
rgb.r = red;
rgb.b = blue;
rgb.g = green;
return rgb;
}
OLD:我打算将它发送到 OpenGL 纹理中,当我直接发送表面-> 像素时它确实有效。但我想自己创建数据数组。非常感谢您的帮助!
编辑:对不起,我没有很好地解释自己。我正在尝试从包含 24 位 TGA 图像的 SDL_Surface 手动重新创建纹理,然后将其交给 opengl 以创建纹理。我用表面->像素测试了我的opengl代码,它工作正常。我只是想弄清楚我在哪里出错了加载它。