【问题标题】:Is there a base Shader class?是否有基础着色器类?
【发布时间】:2018-12-05 15:12:25
【问题描述】:
我目前正在编写一个深入的DirectX-11 引擎,并且正在研究我的着色器部分。我似乎找不到以下所有内容共有的class:
VertexShader
PixelShader
GeometryShader
HullShader
DomainShader
ComputeShader
是否存在所有这些类型都派生自一个基级类,或者我是否坚持使用大量代码来单独处理每个类型?我找不到关于这个问题的任何文档。
【问题讨论】:
标签:
c#
shader
directx-11
sharpdx
【解决方案1】:
在 DirectX 11 中,每种着色器类型都是不同的接口,使用它们调用的 Direct3D 函数需要特定类型。
在大多数渲染情况下,无论如何你只会使用 VS 和 PS。
有多种方法可以为着色器创建抽象。例如,在 XNA Game Studio 类设计中,Effect 类包含了您与 Apply 一起使用的 VS 和 PS(在抽象中,它实际上可以是所需的任何着色器阶段对于该渲染效果)。见this blog post。
从技术上讲,它们都源自ID3D11DeviceChild,但无论如何您都需要独特的界面才能使用它们。