• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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