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 |