「Modern OpenGL系列(二)」创建OpenGL窗口
在博主的[上一篇文章](http://davidsheh.github.io/post/「Modern OpenGL系列(一)」十步搞定OpenGL开发环境/)中已经介绍了OpenGL开发环境的搭建,本篇博文将验证开发环境是否搭建成功。同时,也是迈出OpenGL开发的第一步。我们使用上一篇文章中新建的项目,创建一个OpenGL窗口。
- 添加头文件
display.h
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Display
{
public:
Display(int width, int height, const std::string& title);
void Clear(float r, float g, float b, float a);
void Update();
bool IsClosed();
virtual ~Display();
protected:
private:
Display(const Display& other) {}
Display& operator=(const Display& other) {}
SDL_Window* m_window;
SDL_GLContext m_glContext;
bool m_isClosed;
}; - 添加显示类
display.cpp
.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Display::Display(int width, int height, const std::string& title)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);// 设置颜色的四个分量所占用内存为8bit
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);
m_glContext = SDL_GL_CreateContext(m_window);
GLenum status = glewInit();
if (status != GLEW_OK)
{
std::cerr << "Glew failed to initialize" << std::endl;
}
m_isClosed = false;
}
Display::~Display()
{
SDL_GL_DeleteContext(m_glContext);
SDL_DestroyWindow(m_window);
SDL_Quit();
}
void Display::Clear(float r, float g, float b, float a)
{
glClearColor(r, g, b, a);// 设置窗口背景色
glClear(GL_COLOR_BUFFER_BIT);// 清除颜色缓冲
}
bool Display::IsClosed()
{
return m_isClosed;
}
void Display::Update()
{
SDL_GL_SwapWindow(m_window);
SDL_Event e;
while (SDL_PollEvent(&e))
{
if (e.type == SDL_QUIT)
{
m_isClosed = true;
}
}
} - 在
main
函数中调用显示方法。具体代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(int argc, char** argv)
{
Display display(400, 300, "hello world!");
while (!display.IsClosed())
{
display.Clear(0.0f, 1.0f, 0.0f, 1.0f);
display.Update();// 刷新
}
return 0;
} - 运行项目。可以使用快捷键
F5
来运行项目。运行后会显示一个绿色的OpenGL窗口。如图:
注意:
如果
main
方法没有参数,则会报错:SDL2main.lib(SDL_windows_main.obj) : error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main_utf8 中被引用
,所以main
方法的签名必须是int main(int argc, char** argv)
。本文中的项目使用的是VS2015,建议是用VS2015打开。
源码下载。点此下载源码
本文整理自YouTube视频教程#2 Intro to Modern OpenGL Tutorial: OpenGL Windows
同系列文章
[「Modern OpenGL系列(一)」十步搞定OpenGL开发环境](http://davidsheh.github.io/post/「Modern OpenGL系列(一)」十步搞定OpenGL开发环境/)
[「Modern OpenGL系列(二)」创建OpenGL窗口](http://davidsheh.github.io/post/「Modern OpenGL系列(二)」创建OpenGL窗口/)
[「Modern OpenGL系列(三)」用OpenGL绘制一个三角形](http://davidsheh.github.io/post/「Modern OpenGL系列(三)」用OpenGL绘制一个三角形/)
[「Modern OpenGL系列(四)」在OpenGL中使用Shader](http://davidsheh.github.io/post/「Modern OpenGL系列(四)」在OpenGL中使用Shader/)