Dados do Surface Privado (Direct3D 9)

Você pode armazenar qualquer tipo de dados específicos do aplicativo com uma superfície. Por exemplo, uma superfície que representa um mapa em um jogo pode conter informações sobre o terreno.

Uma superfície pode ter mais de um buffer de dados privado. Cada buffer é identificado por um GUID que você fornece ao anexar os dados à superfície.

Para armazenar dados de superfície privada, use SetPrivateData, passando um ponteiro para o buffer de origem, o tamanho dos dados e um GUID definido pelo aplicativo para os dados. Opcionalmente, os dados de origem podem existir na forma de um objeto COM; Nesse caso, você passa um ponteiro para o ponteiro da interface IUnknown do objeto e define o sinalizador D3DSPD_IUNKNOWNPOINTER.

SetPrivateData aloca um buffer interno para os dados e os copia. Em seguida, você pode liberar com segurança o buffer ou objeto de origem. A referência interna de buffer ou interface é lançada quando FreePrivateData é chamado. Isso acontece automaticamente quando a superfície é liberada.

Para recuperar dados privados de uma superfície, você deve alocar um buffer do tamanho correto e, em seguida, chamar o método GetPrivateData, passando o GUID que foi atribuído aos dados. Você é responsável por liberar qualquer memória dinâmica usada para esse buffer. Se os dados forem um objeto COM, esse método recuperará o ponteiro IUnknown .

Se você não souber o tamanho de um buffer a ser alocado, primeiro chame GetPrivateData com zero em pSizeOfData. Se o método falhar com D3DERR_MOREDATA, ele retornará o número necessário de bytes para o buffer.

Superfícies Direct3D