Line data Source code
1 0 : /* 2 : 3 : OOShaderProgram.h 4 : 5 : Encapsulates a vertex + fragment shader combo. In general, this should only be 6 : used though OOShaderMaterial. The point of this separation is that more than 7 : one OOShaderMaterial can use the same OOShaderProgram. 8 : 9 : 10 : Copyright (C) 2007-2013 Jens Ayton 11 : 12 : Permission is hereby granted, free of charge, to any person obtaining a copy 13 : of this software and associated documentation files (the "Software"), to deal 14 : in the Software without restriction, including without limitation the rights 15 : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 : copies of the Software, and to permit persons to whom the Software is 17 : furnished to do so, subject to the following conditions: 18 : 19 : The above copyright notice and this permission notice shall be included in all 20 : copies or substantial portions of the Software. 21 : 22 : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 : SOFTWARE. 29 : 30 : */ 31 : 32 : 33 : #import <Foundation/Foundation.h> 34 : #import "OOOpenGL.h" 35 : #import "OOOpenGLExtensionManager.h" 36 : 37 : #if OO_SHADERS 38 : 39 : 40 : @interface OOShaderProgram: NSObject 41 : { 42 : @private 43 : GLhandleARB program; 44 : NSString *key; 45 : NSArray *standardMatrixUniformLocations; 46 : } 47 : 48 : + (id) shaderProgramWithVertexShader:(NSString *)vertexShaderSource 49 : fragmentShader:(NSString *)fragmentShaderSource 50 : vertexShaderName:(NSString *)vertexShaderName 51 : fragmentShaderName:(NSString *)fragmentShaderName 52 : prefix:(NSString *)prefixString // String prepended to program source (both vs and fs) 53 : attributeBindings:(NSDictionary *)attributeBindings // Maps vertex attribute names to "locations". 54 : cacheKey:(NSString *)cacheKey; 55 : 56 : // Loads a shader from a file, caching and sharing shader program instances. 57 : + (id) shaderProgramWithVertexShaderName:(NSString *)vertexShaderName 58 : fragmentShaderName:(NSString *)fragmentShaderName 59 : prefix:(NSString *)prefixString // String prepended to program source (both vs and fs) 60 : attributeBindings:(NSDictionary *)attributeBindings; // Maps vertex attribute names to "locations". 61 : 62 : - (void) apply; 63 : + (void) applyNone; 64 : 65 : - (GLhandleARB) program; 66 : 67 : @end 68 : 69 : #endif // OO_SHADERS