Home | History | Annotate | Download | only in gl
      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