SDL2&amp ;;“无效的渲染器” OpenGL的

时间:2016-05-31 09:55:44

标签: c++11 opengl sdl-2

之前我已经使用过SDL2,现在我尝试将它与openGL 2.1一起使用。 但是当我尝试创建渲染器时,我会得到“无效的渲染器”。 为了创建渲染器,我之前已经使用了相同的行来处理简单的SDL2项目,但是使用openGL它似乎无法正常工作。 有人知道为什么吗? 我试图改变CreateRenderer的标志,除了“SDL_RENDERER_SOFTWARE”之外我对它们都有这个错误,但是对他来说我无法正确抓取输入,当鼠标光标熄灭时我有这个错误:“无效窗口”。

这是我的代码:

#include <SDL2/SDL.h>
#include <GL/glut.h>
#include <iostream>

const int WIDTH = 500, HEIGHT = 500;

using namespace std;

SDL_Window* pWindow;
SDL_Renderer* pRenderer;
SDL_Event event;

void initOGL()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(70,(double)WIDTH/HEIGHT,1,1000);

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
}

void initSDL()
{
    if (SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        cout << "Video init failed" << endl;
        exit(EXIT_FAILURE);
    }
    cout << "Video initialized" << endl;


    // Window creation
    pWindow = SDL_CreateWindow("Test OGL w/ SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
    if (!pWindow)
    {
        cout << "Window creation failed" << endl;
        exit(EXIT_FAILURE);
    }
    cout << "Window created" << endl;

    // Renderer creation
    pRenderer = SDL_CreateRenderer(pWindow, -1, SDL_RENDERER_ACCELERATED);
    if (!pRenderer)
    {
        cout << "Renderer creation failed" << endl;
    }
    cout << "Renderer created" << endl;

    // OGL version
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);

    // OGL context
    SDL_GLContext contexteOGL = SDL_GL_CreateContext(pWindow);
    if (!contexteOGL)
    {
        cout << "Echec création du contexte" << endl;
    }
    cout << "Contexte créé" << endl;
}

int main(int argc, char const *argv[])
{
    initSDL();
    initOGL();
    cout << "SDL_ERROR : " << SDL_GetError() << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我可能是一个内置支持的驱动程序&#34;例如,如果您在Linux中从源代码编译SDL,则会出现问题。

尝试使用&#34; flags = 0&#34;在SDL_CreateRenderer中(pWindow,-1,0);

然后测试实际选择的渲染器(这是在C中):

SDL_RendererInfo ri;
SDL_GetRendererInfo(pRenderer, &ri);
int n = SDL_GetNumRenderDrivers();
printf("Rendering drivers (%i):", n);
for(int i = 0; i < n; i++) {
    SDL_RendererInfo info;
    SDL_GetRenderDriverInfo(i, &info);
    printf(" '%s'", info.name);
}
printf(", active = '%s'\n", ri.name);

完整源代码为here