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


Метод IDirect3DQuery9::GetData (d3d9helper.h)

Опрашивает запрошенный ресурс для получения состояния запроса или результата запроса. Дополнительные сведения о запросах см. в статье Запросы (Direct3D 9).

Синтаксис

HRESULT GetData(
  [in, out] void  *pData,
  [in]      DWORD dwSize,
  [in]      DWORD dwGetDataFlags
);

Параметры

[in, out] pData

Тип: void*

Указатель на буфер, содержащий данные запроса. Пользователь несет ответственность за выделение этого. Значение pData может иметь значение NULL , только если dwSize имеет значение 0.

[in] dwSize

Тип: DWORD

Количество байтов данных в pData. Если параметру dwSize присвоено нулевое значение, этот метод можно использовать для опроса ресурса на наличие состояния запроса. См. примечания.

[in] dwGetDataFlags

Тип: DWORD

Флаги данных, указывающие тип запроса. Допустимые значения: 0 или D3DGETDATA_FLUSH. Используйте значение 0, чтобы избежать сброса пакетных запросов к драйверу, и используйте D3DGETDATA_FLUSH для их очистки. Для приложений, которые пишут собственную версию ожидания, результат запроса не реализуется до тех пор, пока драйвер не получит очистку.

Возвращаемое значение

Тип: HRESULT

Тип возвращаемого значения определяет состояние запроса (см. раздел Запросы (Direct3D 9)). Метод возвращает S_OK, если данные запроса доступны, и S_FALSE, если нет. Они считаются успешными возвращаемыми значениями. Если метод завершается сбоем при использовании D3DGETDATA_FLUSH, возвращаемое значение можно D3DERR_DEVICELOST.

Комментарии

Устройство можно потерять при опросе состояния запроса. Если указан D3DGETDATA_FLUSH , этот метод возвращает D3DERR_DEVICELOST в ответ на потерянное устройство. Это позволяет приложению предотвратить бесконечный опрос потоков из-за потери устройства (которое не может ответить на запрос).

Приложение никогда не должно писать код, который вызывает только GetData ( ... , 0 ), ожидая, что GetData в конечном итоге возвратит S_OK сам по себе с течением времени. Это верно, даже если в прошлом приложение использовало флаг FLUSH с GetData. Пример:

// Enables an infinite loop:
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Still enables an infinite loop:
pQuery->GetData( ... , D3DGETDATA_FLUSH );
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Does not enable an infinite loop because eventually the command
// buffer will fill up and that will cause a flush to occur.
while( pQuery->GetData( ..., 0 ) == S_FALSE ) {
	pDevice->SetTexture(...);
	pDevice->Draw(...);
}

Требования

Требование Значение
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

См. также раздел

IDirect3DQuery9