Как я могу разобрать текст в DirectX? (IDirect3DTexture9 *) - PullRequest
0 голосов
/ 18 июня 2010

Я пытался понять, как анализировать текстуры в DirectX по двум причинам: написать свой собственный формат текстуры и манипулировать данными в существующих текстурах типа IDirect3DTexture9.

Я смотрел наФункция IDirect3DTexture9 :: LockRect (), но я не уверен, как она работает, void * pBits, которые я получаю из нее в D3DLOCKED_RECT, данные в текстуре?Означает ли это, что я могу прочитать это, преобразовав его в D3DXCOLOR или что-то в этом роде?

Я просто хочу иметь возможность читать значения rgba и записывать их, если я хочу ...

Действительно не уверен, куда идти, любая помощь будет оценена!

1 Ответ

1 голос
/ 23 июня 2010

Значение pBits является указателем на фактические данные текстуры. Формат данных указывается вами при создании текстуры.

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

Таким образом, если вы создали текстуру D3DFMT_A32B32G32R32F, вы можете INDEED привести указатель pBits к указателю D3DXCOLOR и получить доступ к цветовым компонентам, таким как массив (т.е. color [count] .r и т. Д.).

Однако, если он 32-битный, вам понадобится структура, подобная следующей (я не уверен, что мои компоненты правильно расположены, но вы можете легко выяснить, каков правильный порядок)

struct ARGB
{
    unsigned char a;
    unsigned char r;
    unsigned char g;
    unsigned char b;
};

Затем вы можете привести pBits к указателю ARGB и получить к нему доступ таким же образом.

Все становится намного сложнее, когда вы вносите в него сжатые текстуры, но это основы.

...