BGRA -> RGBA и вертикальное отражение, OptiX

У меня есть буфер, содержащий "сырую" текстуру BGRA с одним байтом на цвет. Линии расположены в обратном порядке (текстура перевернута).

Буфер BGRA весь зеленый (0, 255, 0, 255).

Мне нужно преобразовать это в RGBA и перевернуть линии текстур. Я попробовал это:

// bgra is an  unsigned char*

int width = 1366;
int height = 768;    

unsigned char* rgba = new unsigned char[width * height * 4];

for(int y = height - 1; y >= 0; y--)
{
    for(int x = 0; x < width; x++)
    {
        rgba[(x * y * 4)]     = bgra[(x * y * 4) + 2];
        rgba[(x * y * 4) + 1] = bgra[(x * y * 4) + 1];
        rgba[(x * y * 4) + 2] = bgra[(x * y * 4)];
        rgba[(x * y * 4) + 3] = bgra[(x * y * 4) + 3];
    }
}

Но результат при рендеринге не полностью зеленый экран, а вот это:

Что я могу здесь делать не так?

1 ответ

Решение

Вы неправильно индексируете.

Вот как это должно быть сделано:

rgba[(x + y * width) * 4]     = bgra[(x + y * width) * 4 + 2]
Другие вопросы по тегам