好的,这是我的问题。我的学校使用了一个用于可视化的框架,我一直在尝试将其设置为3D图形。问题是,框架目前只使用固定功能管道来绘制。在没有搞砸的情况下,我一直在尝试解决仍然需要使用固定功能管道的旧代码,并且我一直在设置工具以允许创建着色器和着色器程序。我有一个简单的颜色着色器来编译,我也做了一个测试顶点数组(绿色三角形)。
现在当我试图渲染它时,屏幕变黑了。在手之前,有很多2D精灵和什么没有在屏幕上移动,但是通过我添加到渲染功能的代码,我发现当我调用glUseProgram时屏幕变黑。如果我注释掉glUseProgram,以及我设置制服和绘画的部分,一切正常。 glUseProgram是否禁用固定功能管道?如果是这样的话,无论如何都要重新激活它吗?
答案 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的方法会限制您使用兼容性上下文。