Line data Source code
1 0 : /*
2 :
3 : OOMaterial.m
4 :
5 :
6 : Copyright (C) 2007-2013 Jens Ayton and contributors
7 :
8 : Permission is hereby granted, free of charge, to any person obtaining a copy
9 : of this software and associated documentation files (the "Software"), to deal
10 : in the Software without restriction, including without limitation the rights
11 : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 : copies of the Software, and to permit persons to whom the Software is
13 : furnished to do so, subject to the following conditions:
14 :
15 : The above copyright notice and this permission notice shall be included in all
16 : copies or substantial portions of the Software.
17 :
18 : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 : SOFTWARE.
25 :
26 : */
27 :
28 : #import "OOMaterial.h"
29 : #import "OOFunctionAttributes.h"
30 : #import "OOLogging.h"
31 :
32 :
33 0 : static OOMaterial *sActiveMaterial = nil;
34 :
35 :
36 : @implementation OOMaterial
37 :
38 : + (void)setUp
39 : {
40 : // I thought we'd need this, but the stuff I needed it for turned out to be problematic. Maybe in future. -- Ahruman
41 : }
42 :
43 :
44 0 : - (void)dealloc
45 : {
46 : // Ensure cleanup happens; doing it more than once is safe.
47 : [self willDealloc];
48 :
49 : [super dealloc];
50 : }
51 :
52 :
53 0 : - (NSString *)descriptionComponents
54 : {
55 : return [NSString stringWithFormat:@"\"%@\"", [self name]];
56 : }
57 :
58 :
59 : - (NSString *)name
60 : {
61 : OOLogGenericParameterError();
62 : return nil;
63 : }
64 :
65 :
66 : // Make this the current GL shader program.
67 : - (void)apply
68 : {
69 : [sActiveMaterial unapplyWithNext:self];
70 : [sActiveMaterial release];
71 : sActiveMaterial = nil;
72 :
73 : if ([self doApply])
74 : {
75 : sActiveMaterial = [self retain];
76 : }
77 : }
78 :
79 :
80 : + (void)applyNone
81 : {
82 : [sActiveMaterial unapplyWithNext:nil];
83 : [sActiveMaterial release];
84 : sActiveMaterial = nil;
85 : }
86 :
87 :
88 : + (OOMaterial *)current
89 : {
90 : return [[sActiveMaterial retain] autorelease];
91 : }
92 :
93 :
94 : - (void)ensureFinishedLoading
95 : {
96 :
97 : }
98 :
99 :
100 : - (BOOL) isFinishedLoading
101 : {
102 : return YES;
103 : }
104 :
105 :
106 : - (void)setBindingTarget:(id<OOWeakReferenceSupport>)target
107 : {
108 :
109 : }
110 :
111 :
112 : - (BOOL) wantsNormalsAsTextureCoordinates
113 : {
114 : return NO;
115 : }
116 :
117 :
118 : #if OO_MULTITEXTURE
119 : - (NSUInteger) countOfTextureUnitsWithBaseCoordinates
120 : {
121 : return 1;
122 : }
123 : #endif
124 :
125 :
126 : #ifndef NDEBUG
127 : - (NSSet *) allTextures
128 : {
129 : return nil;
130 : }
131 : #endif
132 :
133 : @end
134 :
135 :
136 : @implementation OOMaterial (OOSubclassInterface)
137 :
138 : - (BOOL)doApply
139 : {
140 : OOLogGenericSubclassResponsibility();
141 : return NO;
142 : }
143 :
144 :
145 : - (void)unapplyWithNext:(OOMaterial *)next
146 : {
147 : // Do nothing.
148 : }
149 :
150 :
151 : - (void)willDealloc
152 : {
153 : if (EXPECT_NOT(sActiveMaterial == self))
154 : {
155 : OOLog(@"shader.dealloc.imbalance", @"%@", @"***** Material deallocated while active, indicating a retain/release imbalance.");
156 : [self unapplyWithNext:nil];
157 : sActiveMaterial = nil;
158 : }
159 : }
160 :
161 : @end
|