BsD3D11EventQuery.cpp 1.3 KB

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