[Modern OpenGL系列(二)]创建OpenGL窗口
来源:互联网 发布:最好视频播放软件 编辑:程序博客网 时间:2024/05/19 16:48
在博主的上一篇文章中已经介绍了OpenGL开发环境的搭建,本篇博文将验证开发环境是否搭建成功。同时,也是迈出OpenGL开发的第一步。我们使用上一篇文章中新建的项目,创建一个OpenGL窗口。
添加头文件
display.h
。#include <SDL2\SDL.h>#include <string>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
.#include "display.h"#include <GL\glew.h>#include <iostream>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
函数中调用显示方法。具体代码如下:#include <GL\glew.h>#include "display.h"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
1 0
- [Modern OpenGL系列(二)]创建OpenGL窗口
- 【Modern OpenGL】创建窗口
- [Modern OpenGL系列(三)]用OpenGL绘制一个三角形
- [Modern OpenGL系列(四)]在OpenGL中使用Shader
- Qt OpenGL----创建openGL窗口
- 【Modern OpenGL】OpenGL简介
- [Modern OpenGL系列(一)]十步搞定OpenGL开发环境
- Modern OpenGL ES: ndk编程——画一个三角形之创建EGL窗口
- Qt 创建OpenGL窗口
- 创建OpenGL窗口
- [OpenGL]创建一个窗口
- OpenGL 窗口创建
- opengl 创建窗口
- 【OpenGL】 创建窗口
- OpenGL入门(一):创建一个窗口
- 【Modern OpenGL】前言
- 【Modern OpenGL】环境搭建
- 【Modern OpenGL】Shader
- 结构体位制
- 聊一聊如何实现Xilinx Microblaze Bootloader
- 从尾到头打印一个链表
- 第四周编程题-素数和
- usaco stamp 邮票(dp)
- [Modern OpenGL系列(二)]创建OpenGL窗口
- POJ 3690(Constellations-矩阵hash)
- Java 自定义注解
- android XML数据解析详解
- maven学习系列5----插件
- HDU-ACM2052
- WMS仓库管理系统---(21)补货管理之补货下架
- 第四周编程题-念整数
- hdu1176 免费馅饼