Поделиться через


Вспомогательные функции HLSL

Чтобы помочь авторам эффектов при написании связываемых пиксельных шейдеров, d2d1effecthelpers.hlsli определяет набор расширений языка HLSL в виде вспомогательных методов и макросов.

Чтобы добавить d2d1effecthelpers.hlsli в проект, добавьте оператор #include в файл HLSL. d2d1effecthelpers.hlsli находится в том же расположении, что и другие заголовки Direct2D, такие как d2d1.h; На него можно ссылаться со страницы свойств HLSL-файла, добавив макрос $(WindowsSDK_IncludePath) в свойство Дополнительные каталоги включения. Обратите внимание, что оператор #include должен поступать после определения всех директив препроцессора, таких D2D_INPUT_COUNT.

#include <d2d1effecthelpers.hlsli>

Direct2D не поддерживает связывание вычислительных или вершинных шейдеров. Однако если в эффекте используется как вершинный шейдер, так и шейдер пикселей, выходные данные шейдера пикселей по-прежнему можно связать.

Директивы препроцессора

Директивы препроцессора необходимы для передачи сведений о эффекте. Сюда входит количество входных данных и тип выборки для каждого входного ввода. Следующие значения должны быть определены в коде шейдера эффекта над соответствующей точкой входа шейдера, если применимо.

  • D2D_INPUT_COUNT <N> : объявляет количество входных данных текстуры для эффекта. Если эффект имеет переменное число входных данных, это значение должно быть соответствующим образом ограничено каждой точкой входа шейдера. Определение этого значения является обязательным.
  • D2D_INPUT<N>_SIMPLE : объявляет N-й вход для использования простой выборки. Если значение не определено, значение N-го входного значения по умолчанию будет сложным. Определение этого значения является необязательным.
  • D2D_INPUT<N>_COMPLEX : объявляет N-й вход для использования сложной выборки. Если значение не определено, значение N-го входного значения по умолчанию будет сложным. Определение этого значения является необязательным.
  • D2D_REQUIRES_SCENE_POSITION : указывает, что функция шейдера вызывает вспомогательные методы, использующие значение позиции сцены (а именно, вспомогающую функцию D2DGetScenePosition ). Этот параметр следует включать только при необходимости, так как только одна функция для каждого связанного шейдера может использовать этот параметр. Определение этого значения является необязательным.
  • D2D_CUSTOM_ENTRY : указывает, что функция пиксельного шейдера использует выходные данные пользовательского вершинного шейдера и, таким образом, объявит его входные параметры. Все входные данные пользовательского шейдера вершин используют сложную выборку и не могут использовать выходные данные другой функции шейдера (т. е. они доступны только для последующей компоновки). Определение этого значения является необязательным.

Пример:

#define D2D_INPUT_COUNT 3
#define D2D_INPUT0_SIMPLE
#define D2D_INPUT1_SIMPLE
#define D2D_INPUT2_COMPLEX
#include <d2d1effecthelpers.hlsli>
          

Вспомогательные функции

Вспомогательные функции используются в качестве замены некоторых встроенных функций HLSL. Во время компиляции эти вспомогательные функции переопределяются Direct2D в соответствующую версию в зависимости от типа целевого объекта компиляции (полный шейдер или функция экспорта).

Вспомогательные функции:

D2DGetInput
D2DSampleInput
D2DSampleInputAtOffset
D2DSampleInputAtPosition
D2DGetInputCoordinate
D2DGetScenePosition
D2D_PS_ENTRY

Связывание шейдеров эффектов