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


Вспомогательные службы 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: объявляет входные данные Nth для использования простой выборки. Если не определено, входные данные Nth по умолчанию сложны. Определение этого значения является необязательным.
  • D2D_INPUT<N>_COMPLEX: объявляет входные данные Nth для использования сложной выборки. Если не определено, входные данные Nth по умолчанию сложны. Определение этого значения является необязательным.
  • 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

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