如何在HLSL中设置数组?GLSL写法无效的技术咨询
HLSL数组初始化的正确实现方式
GLSL中int[8](0, 0, 0, 0, 0, 0, 0, 0)这种数组字面量初始化的写法在HLSL中不被支持,以下是几种可行的替代方案:
声明时直接初始化
如果是在定义数组的同时完成初始化,直接使用大括号包裹初始值即可:int array[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };运行时批量赋值
若数组已提前声明,需要在运行阶段赋值,可通过逐个元素赋值或循环实现:// 逐个元素赋值 int array[8]; array[0] = 0; array[1] = 0; array[2] = 0; array[3] = 0; array[4] = 0; array[5] = 0; array[6] = 0; array[7] = 0; // 循环赋值(适合元素较多的数组) int array[8]; [unroll] // 可选,提示编译器展开循环优化 for (int i = 0; i < 8; i++) { array[i] = 0; }HLSL 2020+版本的简化写法
针对Shader Model 6.6及以上的HLSL版本,可以引入标准库的std::array来使用初始化列表:#include <array> std::array<int, 8> array = { 0, 0, 0, 0, 0, 0, 0, 0 };
内容的提问来源于stack exchange,提问作者Logos King
相关产品推荐
相关产品推荐

