VBO不能使用OpenGL ES 2.0
我试图用vbos渲染一个简单的三角形(没有索引!)。 但由于某种原因,它不起作用。 我的显示器上没有任何显示。 这是覆盆子pi上的OpenGL ES 2.0的代码。 这是我的代码的一部分:
void RenderGL::drawGL() {
glViewport(0, 0, 480, 320);
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
shaderProgram.bindGL();
glDrawArrays(GL_TRIANGLES, 0, 3);
shaderProgram.unbindGL();
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
和
void RenderGL::initGL(std::string shaderPath) {
quadVertices.push_back(-0.5f);
quadVertices.push_back(-0.5f);
quadVertices.push_back(0.0f);
quadVertices.push_back(1.0f);
quadVertices.push_back(-0.5f);
quadVertices.push_back(0.5f);
quadVertices.push_back(0.0f);
quadVertices.push_back(1.0f);
quadVertices.push_back(0.5f);
quadVertices.push_back(0.5f);
quadVertices.push_back(0.0f);
quadVertices.push_back(1.0f);
glGenBuffers(1, &vboHandle);
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glBufferData(GL_ARRAY_BUFFER, quadVertices.size() * sizeof(GLfloat),
&quadVertices[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
shaderProgram.initGL(shaderPath);
}
我的着色器(编译和链接没有错误):
attribute vec4 vert_position;
void main() {
gl_Position = vert_position;
}
和
void main() {
gl_FragColor = vec4(1.0, 0, 0, 1.0);
}
和我的着色器设置代码:
void ShaderProgramGL::compileShader() {
vertShaderHandle = glCreateShader(GL_VERTEX_SHADER);
const char* vertS = vertSrc.c_str();
glShaderSource(vertShaderHandle, 1, &vertS, 0);
glCompileShader(vertShaderHandle);
checkCompilationGL(vertShaderHandle);
fragShaderHandle = glCreateShader(GL_FRAGMENT_SHADER);
const char* fragS = fragSrc.c_str();
glShaderSource(fragShaderHandle, 1, &fragS, 0);
glCompileShader(fragShaderHandle);
checkCompilationGL(fragShaderHandle);
}
void ShaderProgramGL::linkShader() {
programHandle = glCreateProgram();
glAttachShader(programHandle, vertShaderHandle);
glAttachShader(programHandle, fragShaderHandle);
glBindAttribLocation(programHandle, 0, "vert_position");
glLinkProgram(programHandle);
checkLinkageGL();
glValidateProgram(programHandle);
}
和
void ShaderProgramGL::bindGL() {
glUseProgram(programHandle);
glBindAttribLocation(programHandle, 0, "vert_position");
}
void ShaderProgramGL::unbindGL() {
glUseProgram(0);
}
编辑:修复不相关的错误编辑:解决! 问题在于树莓派固件的显示映射(?):github.com/raspberrypi/firmware/issues/142渲染完毕。 谢谢你的帮助!
此刻,您正在绘制一个三角形,其中所有3个顶点相同(-0.5, -0.5, 0.0)
,因此退化为空白三角形(或精确点)。 所以你的绘画完美地工作,它根本不会产生任何碎片。
上一篇: VBO not working with OpenGL ES 2.0
下一篇: How do you transmit Normal vector information to OpenGL ES 2.0 when using VBOS?