Метод 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 |