BsD3D11EventQuery.cpp 1.1 KB

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