首页 > 学院 > 开发设计 > 正文

OpenGL学习笔记之Buffers

2019-11-11 01:33:34
字体:
来源:转载
供稿:网友

Chapter 5 Data Buffers

用Buffers来填充顶点着色器的数据,下面是主要的代码片段。好几次编译不过是因为:

1.我的OpengGL GLSL为4.4,还无法支持4.5新增的函数(如glNamedBufferStorage()), 需要glBindBuffer()配合glBufferStorage()为buffer初始化。 2.glBindVertexBuffer() 参数stride是缓冲区内各个顶点属性数据的间隔长度,因此长度是 8*sizeof(GL_FLOAT) 而不是 4*sizeof(GL_FLOAT)


struct vertex{ GLfloat position[4]; GLfloat color[4];};GLuint vao;GLuint vbo;GLuint buffer;static const vertex vertices[] ={ {{ 0.5f, 0.5f, 0.0f, 1.0f}, { 1.0f, 1.0f, 0.0f, 1.0f }}, {{ 0.5f, -0.5f, 0.0f, 1.0f }, { 0.0f, 1.0f, 1.0f, 1.0f }}, {{ -0.5f, -0.5f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f }}};glGenVertexArrays(1, &vao);glBindVertexArray(vao);glGenBuffers(1, &buffer);//我的版本是4.4, 无法使用glNamedBufferStorage, 所以需要glBindBufferglBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferStorage(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_MAP_READ_BIT);// 描述数据的layout与formatglVertexAttribFormat(0, 4, GL_FLOAT, GL_FALSE, offsetof(vertex, position[0]));//bind a buffer to a vertex buffer bind pointglBindVertexBuffer(0, buffer, 0, 8 * sizeof(GL_FLOAT));// 关联 vertex attribute 与 vao的 vertex buffer 的绑定glVertexAttribBinding(0, 0);glVertexAttribFormat(1, 4, GL_FLOAT, GL_FALSE, offsetof(vertex, color[0]));glBindVertexBuffer(0, buffer, 0, 8 * sizeof(GL_FLOAT));glVertexAttribBinding(1, 0);// 允许通用顶点属性数组glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);glBindVertexArray(0);
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表