DX9 和 DX10):默认像素(和顶点)着色器是什么? (如果可能的话,还有 OpenGL。)
我知道我可以选择在 DX9 中指定着色器,并且我需要在 DX10 中指定着色器。我的问题是,如果我说我想使用着色器但没有指定着色器,会发生什么。简而言之,我正在寻找的是默认行为。有默认着色器吗?
我对以下场景感兴趣:
- DX10,不指定像素着色器。 (我是否必须调用 PSSetShader(NULL)?如果不调用怎么办?)将运行的默认着色器是什么?
- 同样的问题,顶点着色器。
- DX9,如果我指定要使用像素着色器,但随后不指定,会发生什么情况?有默认的吗?如果我选择使用固定功能接口,是否有默认值?这些默认值相同吗?
- 附加问题:OpenGL 和 GLSL 怎么样?和DX9一样的问题。
我很想看到一个指向此文档的指针 - 我已经仔细阅读了 Microsoft 在线 DX 文档,但在找到任何类型的默认行为方面确实一无所获。
谢谢!
I'm aware that I can optionally specify shaders in DX9, and that I'm required to specify a shader in DX10. The question I have is what happens if I say I want to use a shader and I don't specify one. In a phrase, what I'm looking for is the default behavior. Is there a default shader?
I'm interested in the following scenarios:
- DX10, don't specify a pixel shader. (Do I have to call PSSetShader(NULL)? What if I don't?) What is the default shader that will run?
- Same question, vertex shader.
- DX9, if I specify that I'm going to use a pixel shader, but then don't specify one, what happens? Is there a default? Is there a default if I elect to use the fixed-function interface? Are those defaults the same?
- Bonus question: What about OpenGL and GLSL? Same question as DX9.
I'd love to see a pointer to the documentation for this - I've perused the Microsoft online DX docs but have really gotten nowhere in finding any sort of default behavior.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 OpenGL 版本 <= 2.x 中,如果启用着色器但不提供任何着色器代码,则着色器阶段不完整并且尝试渲染某些内容只会导致错误。
在 OpenGL 版本 >= 3 核心配置文件中,必须提供着色器。如果没有着色器,则与启用 OpenGL-2 着色器的情况相同,但未提供着色器:尝试渲染某些内容 =>错误。在 OpenGL-3.x 兼容性配置文件中,行为就像 OpenGL-2.x 一样——没有默认着色器可言,行为与固定功能管道匹配,可以通过着色器来描述,但没有指定实际的着色器代码。从技术上讲,现代 GPU 的 OpenGL-2.x 驱动程序将在原位创建一个与当前设置的固定功能管道配置相匹配的着色器。
In OpenGL version <= 2.x if you enable shaders but don't supply any shader code the shader stage is incomplete and trying to render something will just cause an error.
In OpenGL version >= 3 core profile supplying shaders is mandatory. Without a shader it's the same situation as OpenGL-2 shaders enabled, but no shader supplied: Trying to render something => error. In OpenGL-3.x compatibility profile behaviour is just like OpenGL-2.x -- there's not a default shader to speak of, behavior matches the fixed function pipeline, which can be described by a shader, but no actual shader code is specified. Technically the OpenGL-2.x driver for a modern GPU will create a shader in-situ that matchs the currently set fixed function pipeline configuration.