Поделиться через


Частные данные Surface (Direct3D 9)

Вы можете хранить любые данные, относящиеся к приложению, с помощью поверхности. Например, поверхность, представляющая карту в игре, может содержать сведения о местности.

Поверхность может иметь несколько частных буферов данных. Каждый буфер определяется идентификатором GUID, предоставляемым при присоединении данных к поверхности.

Чтобы хранить данные частной поверхности, используйте SetPrivateData, передав указатель на исходный буфер, размер данных и идентификатор GUID, определенный приложением для данных. При необходимости исходные данные могут существовать в виде COM-объекта; В этом случае указатель на интерфейса IUnkn own объекта передается и задается флаг D3DSPD_IUNKNOWNPOINTER.

SetPrivateData выделяет внутренний буфер для данных и копирует его. Затем можно безопасно освободить исходный буфер или объект. Внутренняя ссылка на буфер или интерфейс освобождается при вызове FreePrivateData. Это происходит автоматически при освобождении поверхности.

Чтобы получить частные данные для поверхности, необходимо выделить буфер правильного размера, а затем вызвать метод GetPrivateData, передав GUID, назначенный данным. Вы несете ответственность за освобождение динамической памяти, используемой для этого буфера. Если данные являются COM-объектом, этот метод извлекает указатель IUnknown.

Если вы не знаете, насколько большой буфер выделяется, сначала вызовите GetPrivateData с нулем в pSizeOfData. Если метод завершается ошибкой с D3DERR_MOREDATA, он возвращает необходимое количество байтов для буфера.

Surfaces Direct3D