Direct3D10: нет 32-битного формата ARGB? - PullRequest
2 голосов
/ 17 марта 2009

Я начинаю добавлять поддержку d3d10, чтобы дополнить мой существующий графический интерфейс d3d9.

Проблема в том, что весь существующий код (в нескольких приложениях ...) использует цвета в формате ARGB, однако я не смог найти режим форматирования, соответствующий d3d10. D3d10 вообще не поддерживает цветовые форматы ARGB или я что-то пропустил? Если я пропустил что-то, что является хорошим способом преобразования между ними, просто требуется, чтобы первый байт был перемещен до конца, это кажется довольно простой концепцией, однако я не вижу возможности сделать это иначе, чем разбивать цвет на его компоненты. и восстановить его ... например:

//unsigned colIn, colOut
unsigned char
    a = (colIn & 0xFF000000) >> 24,
    r = (colIn & 0x00FF0000) >> 16,
    g = (colIn & 0x0000FF00) >> 8,
    b = (colIn & 0x000000FF);
colOut = (r << 24) | (g << 16) | (b << 8) | a;

Ответы [ 2 ]

2 голосов
/ 17 марта 2009

Мне кажется, что этот формат пропал, поэтому вам придется изменить порядок своих данных. Однако, если вы собираетесь использовать RGBA, вам не нужно будет разделять все цвета, как в вашем примере, поскольку R, G и B все еще находятся в одном и том же порядке последовательно, вы можете переместить эти 3 канала как один блок.

1 голос
/ 17 марта 2009

Глядя на соответствующий тип enum , я (тоже) не могу найти какие-либо форматы AxRxGxBx. Так что, кажется, вам нужно самому заняться этим.

Это очень подходит для оптимизации SSE конечно, проверьте, может ли ваш компилятор оптимизировать код до чего-то, что использует SSE, и производительность должна быть в порядке.

Подумайте о проблемах с порядком байтов при выполнении этого кода, легко ошибиться, и этот код трудно написать, не заботясь о порядке байтов.

...