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?)。
我相信我这里有一个 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?)。