| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
| 6 #error "This file requires ARC support." | |
| 7 #endif | |
| 8 | |
| 9 #import "remoting/ios/ui/desktop_texture.h" | |
| 10 | |
| 11 @implementation DesktopTexture | |
| 12 | |
| 13 - (const webrtc::DesktopSize&)textureSize { | |
| 14 return _textureSize; | |
| 15 } | |
| 16 | |
| 17 - (void)setTextureSize:(const webrtc::DesktopSize&)size { | |
| 18 if (!_textureSize.equals(size)) { | |
| 19 _textureSize.set(size.width(), size.height()); | |
| 20 _needInitialize = true; | |
| 21 } | |
| 22 } | |
| 23 | |
| 24 - (void)bindToEffect:(GLKEffectPropertyTexture*)effectProperty { | |
| 25 glGenTextures(1, &_textureId); | |
| 26 [Utility bindTextureForIOS:_textureId]; | |
| 27 | |
| 28 // This is the HOST Desktop layer, and each draw will always replace what is | |
| 29 // currently in the draw context | |
| 30 effectProperty.target = GLKTextureTarget2D; | |
| 31 effectProperty.name = _textureId; | |
| 32 effectProperty.envMode = GLKTextureEnvModeReplace; | |
| 33 effectProperty.enabled = GL_TRUE; | |
| 34 | |
| 35 [Utility logGLErrorCode:@"DesktopTexture bindToTexture"]; | |
| 36 // Release context | |
| 37 glBindTexture(GL_TEXTURE_2D, 0); | |
| 38 } | |
| 39 | |
| 40 - (BOOL)needDraw { | |
| 41 return _needInitialize; | |
| 42 } | |
| 43 | |
| 44 - (void)drawRegion:(GLRegion*)region rect:(CGRect)rect { | |
| 45 if (_textureSize.height() == 0 && _textureSize.width() == 0) { | |
| 46 return; | |
| 47 } | |
| 48 | |
| 49 [Utility bindTextureForIOS:_textureId]; | |
| 50 | |
| 51 if (_needInitialize) { | |
| 52 glTexImage2D(GL_TEXTURE_2D, | |
| 53 0, | |
| 54 GL_RGBA, | |
| 55 _textureSize.width(), | |
| 56 _textureSize.height(), | |
| 57 0, | |
| 58 GL_RGBA, | |
| 59 GL_UNSIGNED_BYTE, | |
| 60 NULL); | |
| 61 | |
| 62 [Utility logGLErrorCode:@"DesktopTexture initializeTextureSurfaceWithSize"]; | |
| 63 _needInitialize = false; | |
| 64 } | |
| 65 | |
| 66 [Utility drawSubRectToGLFromRectOfSize:_textureSize | |
| 67 subRect:webrtc::DesktopRect::MakeXYWH( | |
| 68 region->offset->x(), | |
| 69 region->offset->y(), | |
| 70 region->image->size().width(), | |
| 71 region->image->size().height()) | |
| 72 data:region->image->data()]; | |
| 73 | |
| 74 [Utility logGLErrorCode:@"DesktopTexture drawRegion"]; | |
| 75 // Release context | |
| 76 glBindTexture(GL_TEXTURE_2D, 0); | |
| 77 } | |
| 78 | |
| 79 - (void)releaseTexture { | |
| 80 glDeleteTextures(1, &_textureId); | |
| 81 } | |
| 82 | |
| 83 @end | |
| OLD | NEW |