SDL2 无效渲染器

SDL2 Invalid Renderer

我相信我这里有一个 SDL2 错误,我需要一些验证。当我创建渲染器时,它是无效的,因此我无法初始化 SDL_ttf。这是一个快速演示程序,展示了我的 xubuntu 14.04 发行版中的问题。我的显卡是 NVIDIA GTX 550 Ti。专有驱动程序版本 331.113,已测试。

#include <SDL2/SDL.h>

#include <string>
#include <stdexcept>
#include <iostream>

using namespace std;

int main() {
SDL_Window* _window;
SDL_Renderer* _renderer;

if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) {
    string error( SDL_GetError() );
    throw runtime_error( "SDL could not initialize! SDL Error: " + error );
}

_window = SDL_CreateWindow( "Conscious", SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED, 500, 500, SDL_WINDOW_SHOWN );
if( _window == NULL ) {
    string error( SDL_GetError() );
    throw runtime_error( "Window could not be created! SDL Error: " + error );
}

_renderer = SDL_CreateRenderer( _window , -1,
        SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );
if( _renderer == NULL ) {
    string error( SDL_GetError() );
    throw runtime_error( "Renderer could not be created! SDL Error: " + error );
}

cout << SDL_GetError() << endl;

return 0;
}

告诉我你的想法!

谢谢, 乔纳森

--编辑--

如果你取出 SDL_image 和 SDL_ttf 渲染器仍然返回无效。 同样,在 windows 上使用完全相同的硬件也不会发生这种情况。如果这不是错误,有人可以解释一下这样一个简单的例子可能有什么问题吗?

--编辑编辑-- 此代码在我的系统上打印出 "Invalid renderer"。如果你有 SDL2,请运行它,如果你也有,请告诉我。

虽然它确实会产生 'Invalid renderer' 消息,但这不是问题,因为正如 SDL_GetError 文档所述 You must check the return values of SDL function calls to determine when to appropriately call SDL_GetError().,并且 SDL 没有理由让您在GetError.

为什么会这样,顺便说一句:

Breakpoint 1, 0x00007ffff7b00e90 in SDL_SetError_REAL () from /usr/lib64/libSDL2-2.0.so.0
(gdb) backtrace
#0  0x00007ffff7b00e90 in SDL_SetError_REAL () from /usr/lib64/libSDL2-2.0.so.0
#1  0x00007ffff7b8f124 in SDL_GL_GetProcAddress_REAL () from /usr/lib64/libSDL2-2.0.so.0
#2  0x00007ffff7b8f80b in SDL_GL_GetAttribute_REAL () from /usr/lib64/libSDL2-2.0.so.0
#3  0x00007ffff7b41bcf in GL_CreateRenderer () from /usr/lib64/libSDL2-2.0.so.0
#4  0x00007ffff7b3b66c in SDL_CreateRenderer_REAL () from /usr/lib64/libSDL2-2.0.so.0
#5  0x0000000000401383 in main ()

GL_CreateRenderer 调用 SDL_GetAttribute 获取上下文版本等,它会尝试加载 GL 函数,这需要活动的渲染器,但目前还没有。虽然不是最令人赏心悦目的解决方案,但它运行良好并且不是错误。 windows 上没有它的可能原因是,例如因为它使用不同的渲染器(d3d?)。