我相信我在这里有一个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上也不会发生这种情况。如果这不是一个错误,那么有人可以解释这个简单例子可能出现的问题吗?
- 编辑编辑 - 此代码打印出&#34;无效的渲染器&#34;在我的系统上。如果您有SDL2,请运行它并告诉我您是否也这样做。
答案 0 :(得分:1)
虽然确实会生成“无效的渲染器”消息,但这不是问题,因为SDL_GetError
文档指出You must check the return values of SDL function calls to determine when to appropriately call SDL_GetError().
,而SDL没有理由在{{1}中查找错误说明}}
顺便说一下,为什么会发生这种情况:
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
来获取上下文版等等,它试图加载GL函数,这需要有效的渲染器,但它还没有。虽然不是最令人愉悦的解决方案,但它运作良好并且它不是一个错误。您在Windows上没有它的可能原因是因为它使用不同的渲染器(d3d?)。