3

我知道我可以选择在 DX9 中指定着色器,并且我需要在 DX10 中指定着色器。我的问题是,如果我说我想使用着色器但我没有指定一个着色器会发生什么。一句话,我正在寻找的是默认行为。有默认着色器吗?

我对以下场景感兴趣:

  • DX10,不指定像素着色器。(我必须调用 PSSetShader(NULL) 吗?如果我不调用怎么办?)将运行的默认着色器是什么?
  • 同样的问题,顶点着色器。
  • DX9,如果我指定我将使用像素着色器,但没有指定一个,会发生什么?有默认吗?如果我选择使用固定功能接口,是否有默认值?这些默认值是否相同?
  • 额外问题:OpenGL 和 GLSL 怎么样?与DX9相同的问题。

我很想看到一个指向此文档的指针——我仔细阅读了 Microsoft 在线 DX 文档,但在找到任何类型的默认行为方面确实无处可去。

谢谢!

4

1 回答 1

3

在 OpenGL 版本 <= 2.x 中,如果启用着色器但不提供任何着色器代码,则着色器阶段不完整,尝试渲染某些内容只会导致错误。

在 OpenGL 版本 >= 3 核心配置文件中,必须提供着色器。如果没有着色器,则与启用 OpenGL-2 着色器的情况相同,但未提供着色器:尝试渲染某些东西 => 错误。在 OpenGL-3.x 兼容性配置文件中,行为就像 OpenGL-2.x 一样——没有默认着色器可言,行为匹配固定功能管道,可以由着色器描述,但没有指定实际的着色器代码. 从技术上讲,现代 GPU 的 OpenGL-2.x 驱动程序将在原位创建与当前设置的固定功能管道配置相匹配的着色器。

于 2011-02-21T14:31:56.277 回答