Короче говоря, у меня есть шейдер, который абсолютно имеет для работы с логическим ИЛИ смешиванием. Я упаковываю битовые данные в один шейдер, где пиксели перекрываются, объединяя эти данные в выходной RenderTexture, а затем распаковываю их в другой шейдер.
Это должно быть кроссплатформенным. Я хочу поддерживать DX11 / 12 (где он работает нормально), OpenGL (стандарт, ядро и ES), а в идеале - Vulkan и Metal.
Вот в чем дело.
Unity заявляет , что он может использовать логическое ИЛИ смешивание только в определенном подмножестве DX11. На самом деле кажется, что он отлично работает на всех версиях DX11.1 + и DX12. Однако он не работает ни на какой другой платформе.
Списки поддержки OpenGL для логического ИЛИ смешивания в их спецификации . Похоже, что это должно работать со всеми версиями OpenGL выше 2 (включая ES, если я что-то пропустил).
Как в Unity я могу сделать этот шейдер кросс-компиляцией с GLSL и включить эту операцию смешивания? Я предполагаю, что это может быть возможно с помощью P / Invoking библиотеки для glEnable и связанных с ней функций, но я хотел бы знать, есть ли способ написать на шейдере Cg и правильно выполнить кросс-компиляцию. Metal / Vulkan не является нарушителем, было бы неплохо расширить поддержку, но я более чем рад согласиться только на поддержку DX11 + и OpenGL 2+.