DirectX11中.HLSL与.VS、.PS格式着色器代码有什么区别?
问题解答
你产生这个疑问是混淆了着色器语言和文件命名规范的概念,并不存在三类不同的着色器语言:
.vs、.ps只是HLSL着色器的常用自定义后缀,本身没有特殊含义:.vs是顶点着色器(Vertex Shader)的缩写,一般用来存放顶点着色器的HLSL代码;.ps是像素着色器(Pixel Shader)的缩写,一般用来存放像素着色器的HLSL代码。- 你觉得两者内容不一样,要么是你找到的HLSL参考示例和教程的代码风格不同,要么是你把入口函数的命名差异当成了语言差异:教程代码里
D3DCompileFromFile的第四个参数就是着色器的入口函数名,这里用的是LightVertexShader、LightPixelShader,而你看到的其他HLSL示例常用main作为入口名,只是命名习惯不同,本质都是符合HLSL语法的代码,你打开教程里的light.vs文件就能找到对应的入口函数。
选型建议
当前Windows平台原生图形开发(DX11/DX12)的标准着色器语言就是HLSL,文件后缀名对功能没有任何影响,只和开发团队的命名规范有关,目前行业内常用两种命名方式:
- 按着色器阶段用不同后缀:
.vs/.ps/.gs/.cs分别对应顶点、像素、几何、计算着色器,方便快速识别文件用途 - 统一用
.hlsl作为后缀,单个文件可存放单个或多个不同阶段的着色器代码,通过不同的入口函数区分
如果是做新的项目开发,建议直接学习支持Shader Model 6.0+的新版HLSL,配合DX12可以使用更多新特性,获得更高的运行效率。
内容的提问来源于stack exchange,提问作者Mi Po
相关产品推荐
相关产品推荐

