SDL2+Modern OpenGL(glad)
2020-02-17 本文已影响0人
pragmaonce
SDL(Simple DirectMedia Layer) 是个简单易用的跨平台多媒体开发库,我希望可以借助这个库来进行创建窗口处理事件等工作,同时结合OpenGL来渲染画面。经过摸索,将设置方案记录于此。
这里使用的是glad.h来调用OpenGL的函数。
需要包含的头文件如下
#include<glad/glad.h>
#include<SDL2/SDL.h>
#include<SDL2/SDL_opengl.h>
别忘了将glad.c
文件添加到项目里。
在程序开头首先初始化SDL以及声明OpenGL版本。
if(SDL_Init(SDL_INIT_VIDEO) < 0){
std::cout << "Failed to initialize SDL2! \n" << SDL_GetError() << std::endl;
return -1;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
这里使用的OpenGL3.3版本。
接下来创建窗口和一个OpenGL context。
const int SCR_WIDTH = 800;
const int SCR_HEIGHT = 600;
SDL_Window *window = SDL_CreateWindow("SDL2&OpenGL",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCR_WIDTH, SCR_HEIGHT,
SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN);
if(window == nullptr){
std::cout << "Failed to create window! \n" << SDL_GetError() << std::endl;
SDL_Quit();
return -1;
}
SDL_GL_CreateContext(window);
注意创建窗口时的flag SDL_WINDOW_OPENGL
。
初始化glad,并传入函数地址。
gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress);
之后就可以开始调用opengl函数进行窗口渲染等工作。
渲染循环中,使用SDL_GL_SwapWindow
函数将绘制好的图像显示到屏幕上。
SDL_GL_SwapWindow(window);