1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrGLSL_DEFINED 9 #define GrGLSL_DEFINED 10 11 #include "gl/GrGLInterface.h" 12 13 class GrGLShaderVar; 14 15 // Limited set of GLSL versions we build shaders for. Caller should round 16 // down the GLSL version to one of these enums. 17 enum GrGLSLGeneration { 18 /** 19 * Desktop GLSL 1.10 and ES2 shading lang (based on desktop GLSL 1.20) 20 */ 21 k110_GrGLSLGeneration, 22 /** 23 * Desktop GLSL 1.30 24 */ 25 k130_GrGLSLGeneration, 26 /** 27 * Dekstop GLSL 1.50 28 */ 29 k150_GrGLSLGeneration, 30 }; 31 32 /** 33 * Gets the most recent GLSL Generation compatible with the OpenGL context. 34 */ 35 GrGLSLGeneration GrGetGLSLGeneration(GrGLBinding binding, 36 const GrGLInterface* gl); 37 38 /** 39 * Returns a string to include at the begining of a shader to declare the GLSL 40 * version. 41 */ 42 const char* GrGetGLSLVersionDecl(GrGLBinding binding, 43 GrGLSLGeneration v); 44 45 /** 46 * Returns a string to include in a variable decleration to set the fp precision 47 * or an emptry string if precision is not required. 48 */ 49 const char* GrGetGLSLVarPrecisionDeclType(GrGLBinding binding); 50 51 /** 52 * Returns a string to set the default fp precision for an entire shader, or 53 * an emptry string if precision is not required. 54 */ 55 const char* GrGetGLSLShaderPrecisionDecl(GrGLBinding binding); 56 57 /** 58 * Depending on the GLSL version being emitted there may be an assumed output 59 * variable from the fragment shader for the color. Otherwise, the shader must 60 * declare an output variable for the color. If this function returns true: 61 * * Parameter var's name will be set to nameIfDeclared 62 * * The variable must be declared in the fragment shader 63 * * The variable has to be bound as the color output 64 * (using glBindFragDataLocation) 65 * If the function returns false: 66 * * Parameter var's name will be set to the GLSL built-in color output name. 67 * * Do not declare the variable in the shader. 68 * * Do not use glBindFragDataLocation to bind the variable 69 * In either case var is initialized to represent the color output in the 70 * shader. 71 */ 72 bool GrGLSLSetupFSColorOuput(GrGLSLGeneration gen, 73 const char* nameIfDeclared, 74 GrGLShaderVar* var); 75 76 #endif 77