OcclusionQuery.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <anki/gr/OcclusionQuery.h>
  6. #include <anki/gr/gl/OcclusionQueryImpl.h>
  7. #include <anki/gr/gl/CommandBufferImpl.h>
  8. namespace anki
  9. {
  10. //==============================================================================
  11. OcclusionQuery::OcclusionQuery(GrManager* manager)
  12. : GrObject(manager)
  13. {
  14. }
  15. //==============================================================================
  16. OcclusionQuery::~OcclusionQuery()
  17. {
  18. }
  19. //==============================================================================
  20. class CreateOqCommand final : public GlCommand
  21. {
  22. public:
  23. OcclusionQueryPtr m_q;
  24. OcclusionQueryResultBit m_condRenderingBit;
  25. CreateOqCommand(OcclusionQuery* q, OcclusionQueryResultBit condRenderingBit)
  26. : m_q(q)
  27. , m_condRenderingBit(condRenderingBit)
  28. {
  29. }
  30. Error operator()(GlState&)
  31. {
  32. OcclusionQueryImpl& impl = m_q->getImplementation();
  33. impl.init(m_condRenderingBit);
  34. GlObject::State oldState =
  35. impl.setStateAtomically(GlObject::State::CREATED);
  36. (void)oldState;
  37. ANKI_ASSERT(oldState == GlObject::State::TO_BE_CREATED);
  38. return ErrorCode::NONE;
  39. }
  40. };
  41. void OcclusionQuery::init(OcclusionQueryResultBit condRenderingBit)
  42. {
  43. m_impl.reset(getAllocator().newInstance<OcclusionQueryImpl>(&getManager()));
  44. CommandBufferPtr cmdb =
  45. getManager().newInstance<CommandBuffer>(CommandBufferInitInfo());
  46. cmdb->getImplementation().pushBackNewCommand<CreateOqCommand>(
  47. this, condRenderingBit);
  48. cmdb->flush();
  49. }
  50. } // end namespace anki