【问题标题】:How to create and initialize a SDL 2.0 window to support 3D rendering with OpenGL 3.0+?如何创建和初始化 SDL 2.0 窗口以支持 OpenGL 3.0+ 的 3D 渲染?
【发布时间】:2013-07-11 04:11:04
【问题描述】:

我对 SDL 还很陌生,我正在尝试只使用 2.0 版。我相信在以前的 SDL 版本(1.2 和 1.3)中,创建窗口是使用 SDL_SetVideoMode 完成的,但此后 source 已被删除。那么如何使用 SDL 2.0 创建一个用于渲染 3D OpenGL 3.0+ 的窗口? (当然是可编程流水线)

我的第一个 gess 是 SDL_CreatWindow,然后是 SDL_GetWindowSurface,然后是 SDL_CreateRenderer,代码如下:

    SDL_Window*   window   = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
    SDL_Surface*  s        = SDL_GetWindowSurface(window);
    SDL_Renderer* renderer = SDL_CreateRenderer(window,  -1, flags);
    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);

但是,SDL_GetWindowSurface 上的文档说它不能用于“3D 或此窗口上的渲染 API”source

是否有其他方法可以在 SDL 2.0 中渲染 3D OpenGL 3.0+,或者我应该只使用 SDL 1.2,因为 SDL 2.0 仅处于候选发布状态?

【问题讨论】:

    标签: opengl window sdl sdl-2


    【解决方案1】:

    在创建窗口之前尝试使用SDL_GL_SetAttribute()

    SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
    SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 2 );
    //SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE ); 
    SDL_Window* window = SDL_CreateWindow( ... );
    SDL_GLContext ctx = SDL_GL_CreateContext( window );
    SDL_GL_MakeCurrent( window, ctx );
    glewExperimental = true;
    glewInit();
    ...
    

    虽然如果您创建核心上下文,我不会使用 SDL_Renderer 的东西。

    【讨论】:

    • 完美! CreateWindow、CreateContext 和 MakeCurrent 正是我所需要的!
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多