-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCVPOpenGLBuffer.m
74 lines (56 loc) · 1.25 KB
/
CVPOpenGLBuffer.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#import "CVPOpenGLBuffer.h"
@interface CVPOpenGLBuffer ()
{
@private
CVOpenGLBufferRef buffer;
}
@end
@implementation CVPOpenGLBuffer
+ (instancetype)bufferWithCVOpenGLBuffer:(CVOpenGLBufferRef)buffer
{
return [[self alloc] initWithCVOpenGLBuffer:buffer];
}
- (instancetype)initWithCVOpenGLBuffer:(CVOpenGLBufferRef)buffer_
{
if(buffer_ == NULL)
{
return nil;
}
self = [super init];
if(self != nil)
{
buffer = buffer_;
CVOpenGLBufferRetain(buffer);
}
return self;
}
- (void)dealloc
{
CVOpenGLBufferRelease(buffer);
}
- (NSDictionary *)attributes
{
return (__bridge NSDictionary *)CVOpenGLBufferGetAttributes(buffer);
}
- (BOOL)attach
{
CGLContextObj context = CGLGetCurrentContext();
GLint virtualScreen = 0;
CGLGetVirtualScreen(context, &virtualScreen);
return [self attachToFace:0 level:0 virtualScreen:virtualScreen context:context];
}
- (BOOL)attachToFace:(GLenum)face level:(GLint)level virtualScreen:(GLint)virtualScreen context:(CGLContextObj)context
{
CVReturn err = CVOpenGLBufferAttach(buffer, context, face, level, virtualScreen);
return err == kCVReturnSuccess;
}
- (void)detach
{
CGLContextObj context = CGLGetCurrentContext();
CGLClearDrawable(context);
}
- (CVOpenGLBufferRef)CVOpenGLBuffer
{
return buffer;
}
@end