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) ,因此退化为空白三角形(或精确点)。 所以你的绘画完美地工作,它根本不会产生任何碎片。

链接地址: http://www.djcxy.com/p/52429.html

上一篇: VBO not working with OpenGL ES 2.0

下一篇: How do you transmit Normal vector information to OpenGL ES 2.0 when using VBOS?