OpenGL ES VAO、VBO、EBO、FBO、PBO、TBO、UBO
发布日期:2021-05-10 00:57:57 浏览次数:10 分类:精选文章

本文共 5629 字,大约阅读时间需要 18 分钟。

VBO���EBO���VAO���UBO���FBO���TBO ��� PBO ���������������������������������������������������������

��� OpenGL ES ������������������������������Buffer Object��������������������������� CPU ��� GPU ��������������������������������������� VBO ��� PBO���������������������������������������������������������������������������������������������������������������������������������������������������

VBO ��� EBO ���������

������������������������VBO������������������������������������EBO���Element Buffer Object������ OpenGL ES ���������������������������������������VBO ������������������������������ EBO ������������������������������������������������������������������������������������������������

VBO ���������������

  • ������������������������������������������ CPU ��������������������������� VBO ��������� GPU ���������
  • ��������������������������������������������������� CPU ���������������

EBO ���������������

  • ���������������������EBO ������������������������ Triangle������������������������ GPU ������������������������

VBO ��� EBO ������������������

������������������������������������������������������������������������������������������

// ������ 2 ��� VBOglGenBuffers(2, m_VboIds);glBindBuffer(GL_ARRAY_BUFFER, m_VboIds[0]);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_VboIds[1]);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

������������������������������������������������������������������������������������������������������������

#version 300 eslayout(location = 0) in vec4 a_position;layout(location = 1) in vec3 a_color;out vec3 v_color;void main() {    v_color = a_color;    gl_Position = a_position;}#version 300 esprecision mediump float;in vec3 v_color;out vec4 o_fragColor;void main() {    o_fragColor = vec4(v_color, 1.0);}

VAO������������������������������

VAO���Vertex Array Object��������������������� VBO ��� EBO������������������������������

VAO ���������

// ��������������� VAOglGenVertexArrays(1, m_VaoId);glBindVertexArray(m_VaoId);// ������ VBOglBindBuffer(GL_ARRAY_BUFFER, m_VboIds[0]);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (const void *)0);glEnableVertexAttribArray(1);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (const void *)(3 * sizeof(GLfloat)));glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_VboIds[1]);glBindVertexArray(GL_NONE);

VAO ���������

// ������ VAO ������glUseProgram(m_ProgramObj);glBindVertexArray(m_VaoId);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (const void *)0);

UBO���Uniform Buffer Object ���������

Uniform Buffer Object ���������������������������������������������������������������������������������

UBO ���������������������

#version 310 eslayout(location = 0) in vec4 a_position;layout(location = 1) in vec2 a_texCoord;layout(std140) uniform MVPMatrix {    mat4 projection;    mat4 view;    mat4 model;};out vec2 v_texCoord;void main() {    gl_Position = projection * view * model * a_position;    v_texCoord = a_texCoord;}

UBO ���������

GLuint uniformBlockIndex = glGetUniformBlockIndex(m_ProgramObj, "MVPMatrix");glUniformBlockBinding(m_ProgramObj, uniformBlockIndex, 0);glGenBuffers(1, m_UboId);glBindBuffer(GL_UNIFORM_BUFFER, m_UboId);glBufferData(GL_UNIFORM_BUFFER, 3 * sizeof(glm::mat4), nullptr, GL_STATIC_DRAW);glBindBuffer(GL_UNIFORM_BUFFER, 0);glBindBufferRange(GL_UNIFORM_BUFFER, 0, m_UboId, 0, 3 * sizeof(glm::mat4));

UBO ���������

glBindBuffer(GL_UNIFORM_BUFFER, m_UboId);glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(glm::mat4), &m_ProjectionMatrix[0][0]);glBufferSubData(GL_UNIFORM_BUFFER, sizeof(glm::mat4), sizeof(glm::mat4), &m_ViewMatrix[0][0]);glBufferSubData(GL_UNIFORM_BUFFER, 2 * sizeof(glm::mat4), sizeof(glm::mat4), &m_ModelMatrix[0][0]);glBindBuffer(GL_UNIFORM_BUFFER, 0);

FBO������������������������������

FBO ������������������������������������������������������

FBO ������������������

// ��������������� FBOglCreateFramebuffers(1, m_FboId);glBindFramebuffer(GL_BACK �������� ......);

TBO ���������������������������

TBO ���������������������������������������������������������������������������������

TBO ���������

// ������ TBO ���������������glGenBuffers(1, m_TboId);glBindBuffer(GL_TEXTURE_BUFFER, m_TboId);glBufferData(GL_TEXTURE_BUFFER, sizeof(float) * BIG_DATA_SIZE, bigData, GL_STATIC_DRAW);

������������������������

#version 320 es#extension GL_EXT_texture_buffer : requirein mediump vec2 v_texCoord;uniform mediump samplerBuffer u_buffer_tex;uniform mediump sampler2D u_2d_texture;uniform mediump int u_BufferSize;void main() {    mediump int index = int((v_texCoord.x + v_texCoord.y) / 2.0 * (u_BufferSize - 1));    mediump float value = texelFetch(u_buffer_tex, index).x;    mediump vec4 lightColor = vec4(vec3(vec2(value / (u_BufferSize - 1)), 0.0), 1.0);    outColor = texture(u_2d_texture, v_texCoord) * lightColor;}

PBO���������������������������������������

PBO ������������������������������������������������������

PBO ���������

// ��������� PBO ������������������������glReadBuffer(GL_BACK_buffer);glReadPixels(...)

PBO ���������������

GLuint pboReadBuffer = ...; // ������ PBOglBindFramebufferunts(GL_READ_BUFFER, pboReadBuffer);... ������������ ...

������

������������������������������������������������������������������������������������������������������������������������ VBO ��� EBO ������������ UBO���FBO���TBO ��� PBO��������������������������������������������������������������������������������������������������������������������������������������������������������������� OpenGL ES ���������������������������

上一篇:h5 小游戏总结及踩坑记录
下一篇:使用 SourceTree 修复 git 的合并冲突

发表评论

最新留言

很好
[***.229.124.182]2025年04月02日 23时16分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章