Вычислительный шейдер DirectX (HLSL): как получить доступ к отдельным символам в строке?

Как получить доступ к отдельным символам в шейдере DirectCompute с функцией, принимающей аргумент строкового типа?

Пример:

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

Компилятор жалуется на S [I]: «ошибка X3121: в выражении индекса ожидается массив, матрица, вектор или индексируемый тип объекта».

Любая идея?


person fpiette    schedule 22.08.2019    source источник


Ответы (1)


Из документов MS:

HLSL также поддерживает строковый тип, который является строкой ASCII. Нет операций или состояний, которые принимают строки, но эффекты могут запрашивать строковые параметры и аннотации.

Строки существуют в HLSL, но с ними мало что можно сделать. В зависимости от ваших потребностей вы можете передать строку шейдеру как массив вместо строки или как RWStructuredBuffer байтов, а затем выполнить преобразование в / из ASCII.

person kefren    schedule 22.08.2019
comment
Строки должны быть сгенерированы и обработаны шейдером. В настоящее время я использую массивы uint вместо строк. Но это не намного лучше, поскольку HLSL, похоже, не принимает функцию с неопределенным размером массива (см. Соответствующий вопрос stackoverflow.com/questions/57605109/ < / а>) - person fpiette; 23.08.2019