在opengl中混合固定功能管道和可编程管道

时间:2014-03-10 06:57:11

标签: c++ opengl

好的,这是我的问题。我的学校使用了一个用于可视化的框架,我一直在尝试将其设置为3D图形。问题是,框架目前只使用固定功能管道来绘制。在没有搞砸的情况下,我一直在尝试解决仍然需要使用固定功能管道的旧代码,并且我一直在设置工具以允许创建着色器和着色器程序。我有一个简单的颜色着色器来编译,我也做了一个测试顶点数组(绿色三角形)。

现在当我试图渲染它时,屏幕变黑了。在手之前,有很多2D精灵和什么没有在屏幕上移动,但是通过我添加到渲染功能的代码,我发现当我调用glUseProgram时屏幕变黑。如果我注释掉glUseProgram,以及我设置制服和绘画的部分,一切正常。 glUseProgram是否禁用固定功能管道?如果是这样的话,无论如何都要重新激活它吗?

2 个答案:

答案 0 :(得分:13)

使用glUseProgram固定功能管道的那一刻被可编程管道所取代。你不能同时拥有固定功能+可编程管道。例如,假设您的场景包含雾。但是如果你没有在片段着色器中处理它,你将不会在最终输出中看到它。

虽然在你的渲染/绘制功能中你可以做这样的事情

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

答案 1 :(得分:1)

有一个程序(ShaderGen)可以生成着色器,相当于固定管道。

https://github.com/mojocorp/ShaderGen

如果可以,请使用它,因为Abishek的方法会限制您使用兼容性上下文。