BsD3D11EventQuery.cpp 972 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "BsD3D11EventQuery.h"
  2. #include "BsD3D11RenderSystem.h"
  3. #include "BsD3D11Device.h"
  4. #include "BsException.h"
  5. namespace BansheeEngine
  6. {
  7. D3D11EventQuery::D3D11EventQuery()
  8. :mQuery(nullptr)
  9. {
  10. D3D11RenderSystem* rs = static_cast<D3D11RenderSystem*>(RenderSystem::instancePtr());
  11. D3D11Device& device = rs->getPrimaryDevice();
  12. D3D11_QUERY_DESC queryDesc;
  13. queryDesc.Query = D3D11_QUERY_EVENT;
  14. queryDesc.MiscFlags = 0;
  15. HRESULT hr = device.getD3D11Device()->CreateQuery(&queryDesc, &mQuery);
  16. if(hr != S_OK)
  17. {
  18. BS_EXCEPT(RenderingAPIException, "Failed to create an Event query.");
  19. }
  20. mContext = device.getImmediateContext();
  21. }
  22. D3D11EventQuery::~D3D11EventQuery()
  23. {
  24. if(mQuery != nullptr)
  25. {
  26. mQuery->Release();
  27. }
  28. }
  29. void D3D11EventQuery::begin()
  30. {
  31. mContext->End(mQuery);
  32. setActive(true);
  33. }
  34. bool D3D11EventQuery::isReady() const
  35. {
  36. BOOL queryData;
  37. return mContext->GetData(mQuery, &queryData, sizeof(BOOL), 0) == S_OK;
  38. }
  39. }