netlib.narod.ru< Назад | Оглавление | Далее >

11.1. ID3DXBuffer

В предыдущей главе мы упомянули интерфейс ID3DXBuffer, но подробно его не обсуждали. При работе с библиотекой D3DX мы будем часто сталкиваться с этим интерфейсом, так что имеет смысл познакомиться с ним поближе.

Интерфейс ID3DXBuffer представляет собой структуру данных общего назначения, которую библиотека D3DX использует для хранения данных в непрерывном блоке памяти. У интерфейса всего два метода:

Чтобы структуру можно было применять для любых данных, используются указатели типа void. Это означает, что при получении хранящихся в буфере данных необходимо выполнять приведение типа. Например, функция D3DXLoadMeshFromX использует ID3DXBuffer чтобы возвратить информацию о смежности граней сетки. Поскольку данные о смежности граней хранятся в массиве значений типа DWORD, то, когда мы хотим использовать хранящуюся в буфере информацию о смежности граней, нам надо выполнить приведение типа буфера к массиву DWORD.

Вот пара примеров:

DWORD* info =(DWORD*)adjacencyInfo->GetBufferPointer();
D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();

Поскольку ID3DXBuffer это COM-объект, после завершения работы с ним его следует освободить, чтобы не было утечек памяти:

adjacencyInfo->Release();
mtrlBuffer->Release();

Мы можем создать пустой буфер ID3DXBuffer с помощью следующей функции:

HRESULT D3DXCreateBuffer(
     DWORD NumBytes,        // Размер буфера в байтах
     LPD3DXBUFFER *ppBuffer // Возвращает указатель на буфер
);

Приведенный ниже фрагмент кода создает буфер для хранения четырех целых чисел:

ID3DXBuffer* buffer = 0;
D3DXCreateBuffer(4 * sizeof(int), &buffer);

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz