Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует несколько интересных запросов на драйвере, которые приложение может сделать, если нет затрат на производительность. В Direct3D 7 и Direct3D 8 синхронный механизм запроса GetInfo хорошо работал для таких вещей, как статистика, но не были добавлены критически важные для производительности запросы. Существуют и другие вещи (например, заборы), которые по сути асинхронны. Это простой API для синхронных и асинхронных запросов. GetInfo будет прекращен в Direct3D 9.
Создайте запрос с помощью IDirect3DDevice9::CreateQuery. Этот метод принимает D3DQUERYTYPE, который определяет тип запроса и возвращает указатель на объект IDirect3DQuery9. Если тип запроса не поддерживается, вызов возвращает ошибку D3DERR_NOTAVAILABLE. С помощью объекта запроса приложение отправляет запрос в среду выполнения с помощью IDirect3DQuery9::Issueи опрашивает состояние запроса с помощью IDirect3DQuery9::GetData. Если результат запроса доступен, возвращается S_OK; в противном случае возвращается S_FALSE. Ожидается, что приложение передает соответствующий буфер размера для результатов запроса.
Приложение может принудительно удалить запрос до драйвера, используя D3DGETDATA_FLUSH с IDirect3DQuery9::GetData. Это приводит к очистке, заставляя драйвер видеть запрос. В этом случае D3DERR_DEVICELOST возвращается, если устройство теряется.
Все запросы теряются при потере устройства, приложение должен повторно создать их. Если устройство не поддерживает запрос и pQueryID NULL, создание запроса завершится ошибкой D3DERR_INVALIDCALL.
В следующей таблице приведены важные сведения о каждом типе запроса.
| QuertyType | Допустимый флаг проблемы | Буфер GetData | Среды выполнения | Неявное начало запроса |
|---|---|---|---|---|
| D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Розничная торговля и отладка | CreateDevice |
| D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Отладка только | Присутствующий |
| D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Отладка только | Присутствующий |
| D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Розничная торговля и отладка | CreateDevice |
| D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN,D3DISSUE_END | DWORD | Розничная торговля и отладка | N/A |
Поле флагов для IDirect3DQuery9::Issue:
#define D3DISSUE_END (1 << 0)
// Tells the runtime to issue the end of a query, changing its state to
// "non-signaled"
#define D3DISSUE_BEGIN (1 << 1) // Tells the runtime to issue the
// beginning of a query.
Поле флагов для IDirect3DQuery9::GetData:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
Связанные разделы