OpenGLTexture2D.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "pch.h"
  2. #include "OpenGLTexture2D.h"
  3. #include "OpenGLContext.h"
  4. #if CUDA_PLATFORM
  5. #include <cudaGL.h>
  6. #endif
  7. namespace unity
  8. {
  9. namespace webrtc
  10. {
  11. //---------------------------------------------------------------------------------------------------------------------
  12. OpenGLTexture2D::OpenGLTexture2D(uint32_t w, uint32_t h, GLuint tex, ReleaseOpenGLTextureCallback callback)
  13. : ITexture2D(w,h)
  14. , m_texture(tex)
  15. , m_pbo(0)
  16. , m_callback(callback)
  17. {
  18. RTC_DCHECK(m_texture);
  19. }
  20. OpenGLTexture2D::~OpenGLTexture2D()
  21. {
  22. m_callback(this);
  23. }
  24. void OpenGLTexture2D::Release()
  25. {
  26. if(glIsTexture(m_texture))
  27. {
  28. glDeleteTextures(1, &m_texture);
  29. }
  30. if(glIsBuffer(m_pbo))
  31. {
  32. glDeleteBuffers(1, &m_pbo);
  33. }
  34. }
  35. void OpenGLTexture2D::CreatePBO()
  36. {
  37. RTC_DCHECK_EQ(m_pbo, 0);
  38. glGenBuffers(1, &m_pbo);
  39. glBindBuffer(GL_PIXEL_UNPACK_BUFFER, m_pbo);
  40. const size_t bufferSize = GetBufferSize();
  41. glBufferData(GL_PIXEL_UNPACK_BUFFER, bufferSize, nullptr, GL_DYNAMIC_DRAW);
  42. glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
  43. if(m_buffer.empty())
  44. m_buffer.resize(bufferSize);
  45. }
  46. } // end namespace webrtc
  47. } // end namespace unity