blob: 7a63ae1f057bbb57ca134d7fdacec40bff5f6463 [file] [log] [blame]
alokp@chromium.org76b82082010-03-24 17:59:39 +00001//
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
daniel@transgaming.combbf56f72010-04-20 18:52:13 +00007#include "compiler/TranslatorGLSL.h"
8
9#include "compiler/OutputGLSL.h"
alokp@chromium.org9ecf3952010-10-13 19:28:25 +000010#include "compiler/VersionGLSL.h"
11
12static 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}
alokp@chromium.org76b82082010-03-24 17:59:39 +000023
alokp@chromium.org4888ceb2010-10-01 21:13:12 +000024TranslatorGLSL::TranslatorGLSL(ShShaderType type, ShShaderSpec spec)
25 : TCompiler(type, spec) {
alokp@chromium.org76b82082010-03-24 17:59:39 +000026}
27
alokp@chromium.org07620a52010-09-23 17:53:56 +000028void TranslatorGLSL::translate(TIntermNode* root) {
alokp@chromium.org9ecf3952010-10-13 19:28:25 +000029 TInfoSinkBase& sink = getInfoSink().obj;
30
31 // Write GLSL version.
32 writeVersion(getShaderType(), root, sink);
33
34 // Write translated shader.
35 TOutputGLSL outputGLSL(sink);
alokp@chromium.orga499cfc2010-05-03 23:14:49 +000036 root->traverse(&outputGLSL);
alokp@chromium.org76b82082010-03-24 17:59:39 +000037}