Я реализую некоторые функции, которые требуют от меня реализовать API, чтобы дождаться завершения d3d10. В основном я пытаюсь реализовать синхронизацию доступа к общей текстуре, чтобы я мог обновить текстура после того, как d3d10 успешно может подавать на бэкбуффер. Называя этот черный ящик api, я думаю, что это может быть достигнуто, и я думаю, что это будет нечто похожее на glfinish(). Я читал, что мы можем использовать запросы ID3D10Query для реализации синхронизации доступа.Внедрить API, чтобы ждать завершения команд d3d10
D3D10_QUERY_DESC queryDesc;
... // Fill out queryDesc structure
ID3D10Query * pQuery;
pDevice->CreateQuery(&queryDesc, &pQuery);
pQuery->Begin();
... // Issue graphis commands, do whatever
pQuery->End();
UINT64 queryData; // This data type is different depending on the query type
while(S_OK != pQuery->GetData(&queryData, sizeof(UINT64), 0))
{
}
Должен ли я помещать некоторую фиктивную команду между началом и концом? так как я хочу раскрывать эту функциональность, как открытый API, что-то названо waitforgraphiscompletion
что должно быть фиктивной командой здесь?
спасибо, что это имеет смысл для меня. У меня есть один или два вопроса. Как glfinish отличается от glFenceSync, за которым следует glClientWaitSync? Что касается D3D10, это просто означает, что мне просто нужно называть конец ID3D10Query (это означает, что нет начала), и он будет ждать выполнения всей команды на устройстве, с которого был создан ID3D10Query? –
glFinish будет ждать завершения всех операций OpenGL, включая запись в фреймбуфер. glClientWaitSync не гарантирует этого, это только гарантирует, что любые команды GL, выпущенные до завершения glFenceSync. Обычно это не обязательно, если вы хотите синхронизировать доступ к определенной текстуре, как вы должны знать, когда она считывается/записывается из вашего собственного кода рендеринга. – MuertoExcobito
Хм получилось спасибо –