我是C ++中的SDL和OpenGL。在MVSC ++中,如果重要的话。
这是我正在尝试做的事情:我想拍摄一个图像文件并将其作为SDL_Surface *加载。那部分我已经失败了。我想要做的最后一部分是获取SDL_Surface *并从中创建一个OpenGL纹理。那部分我也有工作。
中间部分是我遇到麻烦的地方。我想采用原始的SDL_Surface *并创建一个新的空白表面,其尺寸为2的幂;然后,我会把原来的表面搞砸到这个新表面。它只是给了我黑色;我怀疑blit没有发生,或者OpenGL无法从结果曲面生成纹理。
这是实际给我带来麻烦的代码。只是为了澄清,如果我跳过这部分,它可以正常工作,但是我只能使用2的幂的纹理。
SDL_Surface* padImage(SDL_Surface* image) {
if (!image) {
return NULL;
}
int width = gfx::powerOfTwo(image->w);
int height = gfx::powerOfTwo(image->h);
SDL_Surface* padded = SDL_CreateRGBSurface(image->flags,
width,
height,
image->format->BitsPerPixel,
image->format->Rmask,
image->format->Gmask,
image->format->Bmask,
image->format->Amask);
if (!padded) {
return NULL;
}
SDL_BlitSurface(image, NULL, padded, NULL);
return padded;
};
从我的阅读中,我逐渐明白使用SDL_BlitSurface()在使用OpenGL时是禁忌。所以我想我想知道如何在OpenGL上下文中将一个SDL_Surface *正确地插入另一个SDL_Surface *。
我知道我可以使用OpenGL函数从非二维尺寸表面生成纹理,但它会产生难看的模糊纹理。
答案 0 :(得分:0)
Welp,我不需要做任何这些。正如datenwolf指出的那样,二维图像的力量不是必需的。如果我需要做一些事情,比如将一个表面滑到另一个表面上,我会用帧缓冲对象和纹理来做。