bzr branch
/browse/iphone/common
| Line | Revision | Contents |
| 1 | 66 | // |
| 2 | // gfx.m |
|
| 3 | // TestTools |
|
| 4 | // |
|
| 5 | // Created by döme on 10.14.08. |
|
| 6 | // Copyright 2008 Doemoetoer Gulyas. All rights reserved. |
|
| 7 | // |
|
| 8 | ||
| 9 | #import <OpenGLES/ES2/gl.h> |
|
| 10 | #import "gfx.h" |
|
| 11 | ||
| 12 | #define USE_VBOS 1 |
|
| 13 | /* |
|
| 14 | void _LogGLError(NSString* str) |
|
| 15 | { |
|
| 16 | GLenum error = glGetError(); |
|
| 17 | if (error != GL_NO_ERROR) |
|
| 18 | NSLog(@"%@: '%s'", str, gluErrorString(error)); |
|
| 19 | } |
|
| 20 | ||
| 21 | ||
| 22 | static int _extension_supported(const char *extension) |
|
| 23 | { |
|
| 24 | return gluCheckExtension( |
|
| 25 | (const GLubyte *)extension, |
|
| 26 | glGetString(GL_EXTENSIONS)); |
|
| 27 | } |
|
| 28 | */ |
|
| 29 | ||
| 30 | static GLResourceDisposal* _sharedDisposal = nil; |
|
| 31 | ||
| 32 | @implementation GLResourceDisposal |
|
| 33 | ||
| 34 | - (id) init |
|
| 35 | { |
|
| 36 | if (!(self = [super init])) |
|
| 37 | return nil; |
|
| 38 | |
|
| 39 | vbos = NULL; |
|
| 40 | fbos = NULL; |
|
| 41 | rbos = NULL; |
|
| 42 | textures = NULL; |
|
| 43 | // programs = calloc(1,1); |
|
| 44 | |
|
| 45 | lock = [[NSRecursiveLock alloc] init]; |
|
| 46 | |
|
| 47 | return self; |
|
| 48 | } |
|
| 49 | ||
| 50 | enum |
|
| 51 | { |
|
| 52 | kResourceTypeTexture, |
|
| 53 | kResourceTypeFramebuffer, |
|
| 54 | kResourceTypeVertexbuffer, |
|
| 55 | kResourceTypeRenderbuffer, |
|
| 56 | kResourceTypeShader, |
|
| 57 | kResourceType_ |
|
| 58 | }; |
|
| 59 | ||
| 60 | - (void) disposeOfResourcesWithTypes: (size_t) firstRsrc varArgs: (va_list) argumentList |
|
| 61 | { |
|
| 62 | size_t rsrc = firstRsrc; |
|
| 63 | if (rsrc) |
|
| 64 | { |
|
| 65 | [lock lock]; |
|
| 66 | do |
|
| 67 | { |
|
| 68 | size_t type = va_arg(argumentList, size_t); |
|
| 69 | switch(type) |
|
| 70 | { |
|
| 71 | case kResourceTypeTexture: |
|
| 72 | textures = realloc(textures, sizeof(*textures)*(numTextures+1)); |
|
| 73 | textures[numTextures++] = rsrc; |
|
| 74 | break; |
|
| 75 | case kResourceTypeVertexbuffer: |
|
| 76 | vbos = realloc(vbos, sizeof(*vbos)*(numVbos+1)); |
|
| 77 | vbos[numVbos++] = rsrc; |
|
| 78 | break; |
|
| 79 | case kResourceTypeFramebuffer: |
|
| 80 | fbos = realloc(fbos, sizeof(*fbos)*(numFbos+1)); |
|
| 81 | fbos[numFbos++] = rsrc; |
|
| 82 | break; |
|
| 83 | case kResourceTypeRenderbuffer: |
|
| 84 | rbos = realloc(rbos, sizeof(*rbos)*(numRbos+1)); |
|
| 85 | rbos[numRbos++] = rsrc; |
|
| 86 | break; |
|
| 87 | /* |
|
| 88 | case kResourceTypeShader: |
|
| 89 | programs = realloc(programs, sizeof(*programs)*(numPrograms+1)); |
|
| 90 | programs[numPrograms++] = (GLhandleARB)rsrc; |
|
| 91 | break; |
|
| 92 | */ |
|
| 93 | default: |
|
| 94 | assert(0); |
|
| 95 | } |
|
| 96 | } |
|
| 97 | while ((rsrc = va_arg(argumentList, size_t))); |
|
| 98 | ||
| 99 | [lock unlock]; |
|
| 100 | } |
|
| 101 | } |
|
| 102 | - (void) performDisposal |
|
| 103 | { |
|
| 104 | [lock lock]; |
|
| 105 | ||
| 106 | glDeleteTextures(numTextures, textures); |
|
| 107 | numTextures = 0; |
|
| 108 | |
|
| 109 | glDeleteFramebuffers(numFbos, fbos); |
|
| 110 | numFbos = 0; |
|
| 111 | ||
| 112 | glDeleteRenderbuffers(numRbos, rbos); |
|
| 113 | numRbos = 0; |
|
| 114 | ||
| 115 | glDeleteBuffers(numVbos, vbos); |
|
| 116 | numVbos = 0; |
|
| 117 | ||
| 118 | /* |
|
| 119 | for (size_t i = 0; i < numPrograms; ++i) |
|
| 120 | glDeleteObjectARB(programs[i]); |
|
| 121 | numPrograms = 0; |
|
| 122 | */ |
|
| 123 | ||
| 124 | [lock unlock]; |
|
| 125 | } |
|
| 126 | ||
| 127 | + (void) performDisposal |
|
| 128 | { |
|
| 129 | if (!_sharedDisposal) |
|
| 130 | { |
|
| 131 | _sharedDisposal = [[GLResourceDisposal alloc] init]; |
|
| 132 | } |
|
| 133 | [_sharedDisposal performDisposal]; |
|
| 134 | } |
|
| 135 | ||
| 136 | + (void) disposeOfResourcesWithTypes: (size_t) firstRsrc, ... |
|
| 137 | { |
|
| 138 | if (!_sharedDisposal) |
|
| 139 | { |
|
| 140 | _sharedDisposal = [[GLResourceDisposal alloc] init]; |
|
| 141 | } |
|
| 142 | if (firstRsrc) |
|
| 143 | { |
|
| 144 | va_list argumentList; |
|
| 145 | va_start(argumentList, firstRsrc); |
|
| 146 | [_sharedDisposal disposeOfResourcesWithTypes: firstRsrc varArgs: argumentList]; |
|
| 147 | va_end(argumentList); |
|
| 148 | } |
|
| 149 | } |
|
| 150 | ||
| 151 | ||
| 152 | @end |
|
| 153 | ||
| 154 | ||
| 155 | ||
| 156 | ||
| 157 |
Loggerhead 1.17 is a web-based interface for Bazaar branches