在OpenGL中混合固定功能管线和可编程管线

8
好的,这是我的问题。我在学校使用的可视化框架中尝试设置3D图形,但框架目前仅使用固定功能管线进行绘制。因此,在不破坏现有代码的情况下,我一直在尝试解决旧代码的问题,并建立设施以允许创建着色器和着色器程序。我已经编译了一个简单的颜色着色器,并且也制作了一个测试顶点数组(一个绿色三角形)。
现在当我试图渲染它时,屏幕变成了黑色。在之前,有很多2D精灵和其他物体在屏幕上移动,但是通过逐步执行我添加到渲染函数中的代码,我发现一旦调用glUseProgram,屏幕就会变黑。如果我注释掉glUseProgram和设置uniforms以及绘制部分,一切正常工作。glUseProgram会禁用固定功能管线吗?如果是这样,是否有任何方式可以重新激活它?

为什么不忽略学校旧的框架,自己开发一个呢? - vallentin
哦,我多么希望能够做到,但不幸的是,这个课外小组已经使用这个框架很长时间了,他们拒绝让我创建一个新的。此外,我们经常在学校活动中使用它,重新设计可视化框架可能会使与其他活动元素(服务器、竞技场、网站)等的通信变得太困难。简而言之-风险太大。 - FatalCatharsis
1个回答

15

当您使用glUseProgram时,固定函数管线将被可编程管线所代替。您不能同时使用固定函数和可编程管线。例如,假设您的场景包含雾。但是,如果您没有在片段着色器中处理它,则最终输出中不会看到它。

虽然在您的渲染/绘制函数中,您可以这样做。

draw
{
  glUseProgram(program);
  // render stuff with shader
  glUseProgram(0)
  // render stuff with fixed pipeline
}

正是我想的,只是不知道glUseProgram(0),将其设置回来以允许之后使用固定管线。现在可以正常工作了 :P。 - FatalCatharsis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接