
本文共 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 ���������������������������
发表评论
最新留言
关于作者
