在OpenGL环境中使用SDL进行Blitting
Blitting with SDL in an OpenGL context
我是C++中的SDL和OpenGL。在MVSC++中,如果这很重要的话。
以下是我要做的:我想获取一个图像文件,并将其加载为SDL_Surface*。那部分我记下来了。我想做的最后一部分是使用SDL_Surface*并从中创建OpenGL纹理。这部分我也在工作。
中间部分是我遇到麻烦的地方。我想用原来的SDL_Surface*创建一个新的空白曲面,其尺寸是2的幂;然后,我将把原来的表面闪电打到这个新的表面上。不过,它只是给了我黑色;我怀疑要么闪电战没有发生,要么OpenGL无法从生成的曲面生成纹理。
这是给我带来麻烦的代码。为了澄清,如果我跳过这一部分,效果很好,但我只能使用二次幂的纹理。
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;
};
从我的阅读中,我逐渐明白,在使用OpenGL时,使用SDL_BlitSurface()是不可以的。所以我想我想知道如何在OpenGL上下文中正确地将一个SDL_Surface*闪电战到另一个SDL_Sturface*上。
我知道我可以使用OpenGL函数从非幂次二维曲面生成纹理,但它会产生丑陋、模糊的纹理。
好吧,我不需要做这些。正如datenwolf所指出的,二维图像的力量是不必要的。如果我需要做任何事情,比如将一个曲面闪电战到另一个曲面上,我会使用帧缓冲区对象和纹理来完成。
相关文章:
- 通过递归进行因子分解
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 使用libgit2、c++进行pull
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- 如何使用模板函数的函数签名进行SFINAE
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 将模板化的类型与C++中的某些类/类型进行比较
- SDL 窗口不会弹出
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 为什么我无法使用 C++在 Mac 上编译 SDL 以进行x86_64?
- 创建指向成员函数的非常量指针,以便进行 SDL 事件筛选
- 在OpenGL环境中使用SDL进行Blitting
- 在SDL中对X位图加载器进行编码
- 对本机环境中使用 SDL 编译进行'WinMain'的未定义引用