FenceImpl.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Gr/gl/FenceImpl.h>
  6. #include <AnKi/Gr/CommandBuffer.h>
  7. #include <AnKi/Gr/gl/CommandBufferImpl.h>
  8. #include <AnKi/Gr/GrManager.h>
  9. #include <AnKi/Gr/gl/GrManagerImpl.h>
  10. #include <AnKi/Gr/gl/RenderingThread.h>
  11. namespace anki {
  12. FenceImpl::~FenceImpl()
  13. {
  14. class DeleteFenceCommand final : public GlCommand
  15. {
  16. public:
  17. GLsync m_fence;
  18. DeleteFenceCommand(GLsync fence)
  19. : m_fence(fence)
  20. {
  21. }
  22. Error operator()(GlState&)
  23. {
  24. glDeleteSync(m_fence);
  25. return Error::kNone;
  26. }
  27. };
  28. if(m_fence)
  29. {
  30. GrManagerImpl& manager = static_cast<GrManagerImpl&>(getManager());
  31. RenderingThread& thread = manager.getRenderingThread();
  32. if(!thread.isServerThread())
  33. {
  34. CommandBufferPtr commands;
  35. commands = manager.newCommandBuffer(CommandBufferInitInfo());
  36. static_cast<CommandBufferImpl&>(*commands).pushBackNewCommand<DeleteFenceCommand>(m_fence);
  37. static_cast<CommandBufferImpl&>(*commands).flush();
  38. }
  39. else
  40. {
  41. glDeleteSync(m_fence);
  42. }
  43. }
  44. }
  45. } // end namespace anki