不使用着色器的glDrawElements?

Yan*_* Li 3 opengl

我的问题是我可以在不使用着色器的情况下使用glDrawElements吗?

我生成我的vbo如下:

    glGenBuffers(1, &vertexId_);
    glBindBuffer(GL_ARRAY_BUFFER, vertexId_);
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*((tess.x + 1) * (tess.y + 1)), &pVertex[0].p.x, GL_STATIC_DRAW);


    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) vOffset_);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) nOffset_);
    glEnableVertexAttribArray(2);
    glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) tOffset_);

    glGenBuffers(1, &indexId_);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId_);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short)*idxCount_, &pIndices[0], GL_STATIC_DRAW);

    glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)

所以问题是我可以使用glDrawElements而不绑定任何着色器来绘制吗?我正在使用GL 4.0

Tra*_*rax 5

在OpenGL 4.0中没有固定的管道,你需要着色器来告诉你如何处理你发送给GPU的数据(顶点).

关于如何从着色器开始有很多资源,例如:http://nehe.gamedev.net/article/glsl_an_introduction/25007/

编辑:正如其他人指出的那样,这并不完全正确.如果支持,您可以使用兼容性配置文件并使用固定管道.http://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf

  • *"OpenGL 4.0中没有固定的管道"* - 当然,只有核心配置文件中没有.我仍然不建议使用固定功能管道,但是在给定具有兼容性配置文件的上下文(通常是默认配置文件)的情况下,没有人会阻止您使用它. (3认同)
  • 说"OpenGL 4.x硬件上没有固定的功能管道是不是更正确,但如果使用兼容性配置文件,驱动程序将提供模拟固定功能管道的着色器"? (2认同)