Частные данные Surface (Direct3D 9)
С помощью поверхности можно хранить любые данные, относящиеся к конкретному приложению. Например, поверхность, представляющая карту в игре, может содержать сведения о местности.
Поверхность может иметь несколько частных буферов данных. Каждый буфер идентифицируется идентификатором GUID, который предоставляется при присоединении данных к поверхности.
Для хранения частных данных поверхности используйте SetPrivateData, передав указатель на исходный буфер, размер данных и определяемый приложением GUID для данных. При необходимости исходные данные могут существовать в виде COM-объекта; в этом случае передается указатель на указатель интерфейса IUnknown объекта и устанавливается флаг D3DSPD_IUNKNOWNPOINTER.
SetPrivateData выделяет внутренний буфер для данных и копирует их. Затем можно безопасно освободить исходный буфер или объект . Внутренний буфер или ссылка на интерфейс освобождается при вызове FreePrivateData. Это происходит автоматически при освобождении поверхности.
Чтобы получить частные данные для поверхности, необходимо выделить буфер правильного размера, а затем вызвать метод GetPrivateData, передав идентификатор GUID, назначенный данным. Вы несете ответственность за освобождение любой динамической памяти, используемой для этого буфера. Если данные являются COM-объектом, этот метод извлекает указатель IUnknown .
Если вы не знаете, какой размер буфера нужно выделить, сначала вызовите GetPrivateData с нулевым значением в pSizeOfData. Если метод завершается сбоем с D3DERR_MOREDATA, он возвращает необходимое количество байтов для буфера.
Связанные темы