Home | History | Annotate | Download | only in compiler
      1 //
      2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #include "compiler/TranslatorGLSL.h"
      8 
      9 #include "compiler/OutputGLSL.h"
     10 #include "compiler/VersionGLSL.h"
     11 
     12 static void writeVersion(ShShaderType type, TIntermNode* root,
     13                          TInfoSinkBase& sink) {
     14     TVersionGLSL versionGLSL(type);
     15     root->traverse(&versionGLSL);
     16     int version = versionGLSL.getVersion();
     17     // We need to write version directive only if it is greater than 110.
     18     // If there is no version directive in the shader, 110 is implied.
     19     if (version > 110) {
     20         sink << "#version " << version << "\n";
     21     }
     22 }
     23 
     24 TranslatorGLSL::TranslatorGLSL(ShShaderType type, ShShaderSpec spec)
     25     : TCompiler(type, spec) {
     26 }
     27 
     28 void TranslatorGLSL::translate(TIntermNode* root) {
     29     TInfoSinkBase& sink = getInfoSink().obj;
     30 
     31     // Write GLSL version.
     32     writeVersion(getShaderType(), root, sink);
     33 
     34     // Write translated shader.
     35     TOutputGLSL outputGLSL(sink);
     36     root->traverse(&outputGLSL);
     37 }
     38