Вычислить шейдерные ошибки на Android - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь смешать Texture2D в RWTexture2D в вычислительном шейдере.Мне нужно сделать это канал за каналом

Поскольку я видел, что RWTexture2D<float4> текстуры не поддерживаются в Android, я использую свою собственную структуру RGBA32, которая состоит из 4-х чисел с плавающей запятой.Когда я пытаюсь суммировать или интерполировать каналы обеих текстур в Unity Editor, все работает нормально.В Android возникает ошибка (Kernel at Index(0) is invalid).

   ARBG32 finalColor;
    float finalColor.r = colorA.r + colorB.r

Если я изменю код на finalColor.r = colorB.r, он отлично работает на Android.Можно ли так работать, добавляя или интерполируя каналы?Или мне нужно сделать побитовую операцию или распаковать их для объединения двух каналов?Я думал, что не должен был этого делать, поскольку этот код в редакторе работает отлично.

Обновление -------

Дополнительная информация: я пытаюсь сделать этосоздайте маску, используя Render Texture во время выполнения, эта маска после ее создания будет использоваться для смешивания некоторых текстур на местности.Каждый канал (RGBA) этой маски будет окрашен некоторыми формами (кистями) и использован для смешивания различной текстуры на материале.Это приведет к созданию ландшафта, состоящего из участков земли, травы и снега.

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

Моя главная цель сейчас - это работать, оптимизации придут позже.Кисти серого цвета.Так что в этом проекте все работает, кроме функции AddIntensity ().Код прекрасно работает на редакторе Unity, но не на Android.Если я это сделаю:

        mainTexColor.r = brushColor.r;

Это работает на Android, но мне нужно добавить больше интенсивности каждый раз, когда кисть рисует в этом пикселе.Фактически, каждая операция, которую я пытаюсь выполнить в цветном канале, прекрасно работает в редакторе, но не в Android.Я очень новичок в графическом программировании, но знаю, что редактор Unity работает на Vulkan и Android на OpenGL.

Например: я обнаружил, что float4 не работает на Android.

Я надеюсь, чтоэто поможет вам лучше понять мою проблему.

// Textures
RWTexture2D<ARBG32> ResultMask;
Texture2D<ARBG32> Brush;
//Color class
class ARBG32
{
    float r;
    float g;
    float b;
    float a;
};

//Function to add a brush value to a channel
       ARBG32 AddIntensity(ARBG32 mainTexColor, ARBG32 brushColor, int channel)
        {
            if(channel == 0)
                mainTexColor.r += brushColor.r;
            else if (channel == 1)
                mainTexColor.g += brushColor.r;
            else if (channel == 2)
                mainTexColor.b += brushColor.r;
            else 
                mainTexColor.a += brushColor.r;

            return mainTexColor;
        }
...