将着色器与directx 11结合使用
Combine shaders with directx 11
是否有组合着色器的方法?
假设我想要4个型号:
- 一个只渲染了纹理
- 一个有纹理和基本灯光效果的
- 一个使用骨骼动画渲染的
- 一个使用骨骼动画和基本灯光效果渲染的
我知道的唯一方法是创建4像素和顶点着色器文件。但是我是否还有5个我想添加的效果,我必须创建更多的文件,如果我想添加越来越多的效果?我怀疑,对于每种效果,我都必须为每种可能性创建一个文件。我知道我可以直接在其他文件中设置灯光,当我不想使用灯光时,我会将其设置为1.0f,这样颜色就不会改变。但如果我想有更多的效果,我的着色器中会有大约20个变量,如果我不使用它们,那不是没用吗?还有别的办法吗?
事先谢谢,我尽量让人理解,对不起我的英语。
以下是一些想法:
- 将常用功能移动到单独的文件中,并使用
#include
在着色器之间展开该文件 - 使用
#ifdef
进行条件编译。通过D3DCompile
的D3D_SHADER_MACRO
的fxc.exe
的/D
标志进行定义。可以将所有着色器组合在一个着色器中,然后将其编译为许多不同的二进制文件 - 使用一些效果框架(默认DirectX one,谷歌搜索或自己制作):着色器不需要单独的文件,所有文件都在一个文件中,状态也是如此
- 顺其自然:HLSL很复杂,任何复杂的情况都可能导致无法维持的混乱
希望它能有所帮助!
相关文章:
- 多态性和功能结合
- 如何在directx/c++中进行平移/缩放操作
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 将 Vulkan 与 SFML 结合使用?
- Directx 11 - CompileFromFile() is not compiling
- 将 c++ 生成器应用程序与外部 dll 结合使用
- 字节数组初始化会导致 DirectX 崩溃
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- 如何将增强MSM与增强信号结合使用?
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- Directx 12 :在两个进程之间共享图形内存
- DirectX 11 如何处理来自 GPU 上的 sharedHandle 的图像
- > 64k C++的 DirectX 大型机型
- Linking DirectX
- C++ Visual Studio 错误:名称后跟'::'必须是类或命名空间名称 (DirectX 11)
- 将预编译的 C 共享库与 JNI/NDK 结合使用
- DirectX 11 - 点光源阴影
- 将着色器与directx 11结合使用