OpenGLGraphicsDevice.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #pragma once
  2. #if SUPPORT_OPENGL_CORE
  3. #include <glad/gl.h>
  4. #endif
  5. #include "GraphicsDevice/IGraphicsDevice.h"
  6. #if CUDA_PLATFORM
  7. #include "GraphicsDevice/Cuda/CudaContext.h"
  8. #endif
  9. namespace unity
  10. {
  11. namespace webrtc
  12. {
  13. namespace webrtc = ::webrtc;
  14. class OpenGLContext;
  15. struct OpenGLTexture2D;
  16. class OpenGLGraphicsDevice : public IGraphicsDevice
  17. {
  18. public:
  19. OpenGLGraphicsDevice(UnityGfxRenderer renderer, ProfilerMarkerFactory* profiler);
  20. virtual ~OpenGLGraphicsDevice();
  21. virtual bool InitV() override;
  22. virtual void ShutdownV() override;
  23. inline virtual void* GetEncodeDevicePtrV() override;
  24. ITexture2D* CreateDefaultTextureV(uint32_t w, uint32_t h, UnityRenderingExtTextureFormat textureFormat) override;
  25. ITexture2D* CreateCPUReadTextureV(uint32_t width, uint32_t height, UnityRenderingExtTextureFormat textureFormat) override;
  26. bool CopyResourceV(ITexture2D* dest, ITexture2D* src) override;
  27. rtc::scoped_refptr<webrtc::I420Buffer> ConvertRGBToI420(ITexture2D* tex) override;
  28. bool CopyResourceFromNativeV(ITexture2D* dest, void* nativeTexturePtr) override;
  29. std::unique_ptr<GpuMemoryBufferHandle> Map(ITexture2D* texture) override;
  30. #if CUDA_PLATFORM
  31. bool IsCudaSupport() override { return m_isCudaSupport; }
  32. CUcontext GetCUcontext() override { return m_cudaContext.GetContext(); }
  33. NV_ENC_BUFFER_FORMAT GetEncodeBufferFormat() override { return NV_ENC_BUFFER_FORMAT_ABGR; }
  34. #endif
  35. private:
  36. bool CopyResource(GLuint dstName, GLuint srcName);
  37. void ReleaseTexture(OpenGLTexture2D* texture);
  38. #if CUDA_PLATFORM
  39. CudaContext m_cudaContext;
  40. bool m_isCudaSupport;
  41. #endif
  42. std::unique_ptr<OpenGLContext> mainContext_;
  43. std::vector<std::unique_ptr<OpenGLContext>> contexts_;
  44. };
  45. void* OpenGLGraphicsDevice::GetEncodeDevicePtrV() { return nullptr; }
  46. //---------------------------------------------------------------------------------------------------------------------
  47. } // end namespace webrtc
  48. } // end namespace unity