您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 2浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

LearnGL - 05.3 - 封装 Main.cpp 中重复 GLFW代码

Jave.Lin 发布时间:2020-06-16 21:13:12 ,浏览量:2

文章目录
  • my_init.h
  • my_gl_check_error.h
  • my_simple_load_tex.h
  • 外部使用
LearnGL - 学习笔记目录

本人才疏学浅,如有什么错误,望不吝指出。

上一篇:LearnGL - 05.2 - Texture - 实现类似2D UI流光动画。

这一篇:到这篇,我终于忍不了了,太多重复代码了。所以我们将一些可复用代码整理一下,一些通用型比较强的功能都统统封装一下。

这次先提取 Main 中的重复代码。

后面再提炼:GameObject、Mesh、Camera、Material、等。

以方便后续增加 OpenGL 学习项目的便利性。

但前提先增加对 OpenGL 设计规范的熟悉程度。

my_init.h

初始化相关的内容:

  • 创建窗体
  • 创建 OpenGL Context
  • 提供外部设置回调初始化
  • 提供外部设置更新/绘制回调
  • 提供外部设置退出程序前回调
  • 提供执行入口:run()
my_gl_check_error.h

对 GL 的错误状态的检测

my_simple_load_tex.h

简单加载纹理

外部使用
// jave.lin
#include
//#include"linmath.h"
// 把linmath.h 放在 iostream 之前include会有错误,所以放到iostream 后include就好了
// 而这个错误正式 xkeycheck.h 文件内 #error 提示的,所以可以使用 #define _XKEYCHECK_H 这个头文件的引用标记宏
// 就可以避免对 xkeycheck.h 头文件的 include 了。
#include
#include
#include
// 使用 stb_image.h 的加载库
// github 源码:https://github.com/nothings/stb/blob/master/stb_image.h
#define STB_IMAGE_IMPLEMENTATION
#include
// 将之前的打印版本信息代码包含一下
#include
#include
#include

using namespace my_util;

GLfloat vertices[] = {
	// x,	y,	  z
	// 直接放4个顶点
	-0.5f, -0.5f, 0.0f,							// 第0个顶点,左下角
	 0.5f, -0.5f, 0.0f,							// 第1个顶点,右下角
	 0.5f,  0.5f, 0.0f,							// 第2个顶点,右上角
	-0.5f,  0.5f, 0.0f,							// 第3个顶点,左上角
};

GLfloat uvs[] = {								// 顶点的 uv 坐标
	0.0f, 0.0f,									// 左下角
	1.0f, 0.0f,									// 右下角
	1.0f, 1.0f,									// 右上角
	0.0f, 1.0f,									// 左上角
};

GLuint indices[] = {							// 注意索引从0开始!通过索引缓存来指定 图元 组成 用的 顶点有哪些
	0, 1, 3,									// 放置顶点的索引,第一个三角形
	1, 2, 3										// 放置顶点的索引,第二个三角形
};

GLint vpos_location, vuv_location;
GLuint vertex_buffer[2], index_buffer;
GLuint vertex_array_object;
GLuint texture[3];
GLuint pixelBufObject;
GLint success, infoLogLen;
ShaderProgram* shaderProgram;
GLuint win_width, win_height;

void _stdcall OnBeforeInitWinCallback(InitInfo* info) {
	info->width = win_width = 600;
	info->height = win_height = 600;
	info->print_version_info = true;
	const char* title = "05_03_ExtracMain_GLFW_SrcCode";
	strcpy_s(info->win_title, strlen(title) + 1, title);
}

void _stdcall OnInitCallback() {
	// 打印支持最大的顶点支持的数量
	int nrAttributes;
	glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
	std::cout             
关注
打赏
1664331872
查看更多评论
0.0496s