У меня есть буфер, содержащий «сырую» текстуру 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];
}
}
Но результат при рендеринге не полностью зеленый экран, а вот это:
Что я могу здесь делать не так?
Вы неправильно индексируете.
Вот как это должно быть сделано:
rgba[(x + y * width) * 4] = bgra[(x + y * width) * 4 + 2]
Других решений пока нет …