2017-02-01 28 views
1

В настоящее время я работаю с исходным кодом из книги GPU Gems 2, и я пытаюсь преобразовать Improved Perlin Noise implementation (Chapter 26) для работы с DirectX 11. Хотя относительно безболезненно, оптимизация, которую они использовали, была слегка раздражающей из-за их использование текстур для поиска. Исходный код использует теперь, казалось бы, не существующий метод для объявления текстур, которые я не знаю, как преобразовать в современный DirectX.Есть ли DirectX 11 (HLSL 5.0), эквивалентный синтаксису текстурной текстуры DirectX 9?

Примером типа текстуры декларации я смысл: (от inoise.fxh файла)

texture permTexture 
< 
    string texturetype = "2D"; 
    string format = "l8"; 
    string function = "GeneratePermTexture"; 
    int width = 256, height = 1; 
>; 

Тип текстуры, формат, ширина и высота Я понимаю, как настроить внешнюю шейдер, часть string function = "GeneratePermTexture", хотя меня бросила.

Функция она имеет в виду: (в том же файле)

float4 GeneratePermTexture(float p : POSITION) : COLOR 
{ 
    return permutation[p*256]/255.0; 
} 

Там в комментарий выше этой секции файла (который содержит больше этих функций для своих текстур) говорят // Functions to generate textures using CPU runtime

Есть ли простой способ сделать это с помощью Dx11? Мой текущий след исследования предполагает, что я должен использовать часть функций CreateTexture.

ответ

2

Вещи между < и > в декларации текстуры называются annotations. Хотя система эффектов в D3DX9 имеет несколько "standard annotations", «функция» не является одной из них. Стандартные аннотации в основном использовались внешними инструментами, помогающими создавать шейдеры, например, в RenderMonkey.

Эти значения не дают никакой дополнительной дополнительной функциональности в контексте DirectX, но скорее всего служат метаданными, которые код C++ будет использовать для генерации текстур. Значения аннотации могут быть запрошены (в C++) с помощью GetAnnotation или GetAnnotationByName. Если вы портируете их на DirectX 11, вы можете просто скопировать эти значения в свой код на C++ или загрузить их из файла данных.

+0

Стандартные аннотации также привязаны к старой системе эффектов, поэтому они действительно не используются в контексте «прямой HLSL» кодировки, которая является рекомендуемым современным решением. Тем не менее, вы можете использовать [Эффекты для Direct3D 11] (https://github.com/Microsoft/FX11), если хотите. См. [Эту тему] (https://fx11.codeplex.com/discussions/450240) для получения подробной информации о статусе «Эффекты» и [этой теме] (https://fx11.codeplex.com/discussions/551307) для FX против HLSL. –

+0

Спасибо за разъяснение, я ищу предварительные генерации изображений сейчас. –