【问题标题】:DirectX compute shader (HLSL): how to access individual characters in a string?DirectX 计算着色器 (HLSL):如何访问字符串中的单个字符?
【发布时间】:2023-05-13 10:38:01
【问题描述】:

在 DirectCompute 着色器中,有一个接受字符串类型参数的函数,如何访问单个字符?

例子:

uint TestFunc(string S, uint I)
{
    return uint(S[I]);
}

编译器抱怨 S[I]:“错误 X3121:索引表达式中预期的数组、矩阵、向量或可索引对象类型”。

有什么想法吗?

【问题讨论】:

    标签: directx hlsl directcompute


    【解决方案1】:

    来自 MS 文档:

    HLSL 还支持字符串类型,即 ASCII 字符串。没有接受字符串的操作或状态,但效果可以查询字符串参数和注解。

    字符串存在于 HLSL 中,但您几乎无能为力。根据您的需要,您可能希望将字符串作为数组而不是字符串或作为 RWStructuredBuffer 字节传递给着色器,然后执行与 ASCII 的转换。

    【讨论】:

    • 字符串由着色器生成和处理。目前我使用的是 uint 数组而不是字符串。但它并没有好多少,因为 HLSL 似乎不接受未指定数组大小的函数。(参见相关问题*.com/questions/57605109/…
    最近更新 更多