Guest User

Untitled

a guest
Jan 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. - (void)attachBufferToTexture:(uint8_t*)buffer inContext:(CGLContextObj)context{
  2.  
  3. CGLSetCurrentContext(context);
  4.  
  5. if (buffer != nil) {
  6.  
  7. if (_usePBO == YES) {
  8.  
  9. glEnable(GL_TEXTURE_RECTANGLE_ARB);
  10.  
  11. glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, _pbo[0]);
  12. glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, movieWidth * movieHeight * [_pixelType byteCount], 0, GL_STREAM_DRAW_ARB);
  13. GLubyte* ptr = (GLubyte*)glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB);
  14. if (ptr) {
  15. GLubyte * data = (GLubyte *)buffer;
  16. memcpy(ptr, data, movieWidth * movieHeight * [_pixelType byteCount]);
  17. glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB);
  18. }
  19.  
  20. glBindTexture(GL_TEXTURE_2D, _surfaceTexture);
  21. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
  22. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
  23. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  24. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  25.  
  26. // copy pixels from PBO to texture object && Use offset instead of pointer see the (zero) !!!!!!
  27. glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, movieWidth, movieHeight, [_pixelType format], [_pixelType type], 0);
  28.  
  29. glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
  30. glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
  31. glDisable(GL_TEXTURE_RECTANGLE_ARB);
  32.  
  33.  
  34. } else {
  35.  
  36. glEnable(GL_TEXTURE_RECTANGLE_ARB);
  37. glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _surfaceTexture);
  38. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
  39. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
  40. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  41. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  42. GLubyte * data = (GLubyte *)buffer;
  43. glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, [_pixelType internalFormat], movieWidth, movieHeight, 0, [_pixelType format], [_pixelType type], data);
  44. glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
  45. glDisable(GL_TEXTURE_RECTANGLE_ARB);
  46.  
  47. }
  48.  
  49. }
  50. }
Add Comment
Please, Sign In to add comment