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