-1

我正在尝试使用 vbos 渲染一个简单的三角形(未索引!)。但由于某种原因,它不起作用。我的显示器上什么都没有。这是树莓派上 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 毕竟渲染很好。谢谢你的帮助!

4

1 回答 1

0

目前,您正在绘制一个所有 3 个顶点都相同 (-0.5, -0.5, 0.0)的三角形,因此退化为一个空三角形(或准确地说是一个点)。因此,您的绘图工作完美,它根本不会生成任何片段。

于 2013-11-13T12:01:12.863 回答