ROOT logo
// $Id: ZGlShader.cxx 2234 2009-09-16 15:35:48Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "ZGlShader.h"
#include "ZGlShader.c7"

#include <Glasses/ZQueen.h>

#include <GL/glew.h>

#include <fstream>

// ZGlShader

//______________________________________________________________________________
//
//

ClassImp(ZGlShader);

//==============================================================================

void ZGlShader::_init()
{
  mType = 0;
  bAutoRecompile = true;

  bCompiled = false;
}

ZGlShader::ZGlShader(const Text_t* n, const Text_t* t) :
  ZGlass(n, t)
{
  _init();
}

ZGlShader::~ZGlShader()
{}

//==============================================================================

void ZGlShader::SetProgram(const Text_t* s)
{
  mProgram = s;
  Stamp(FID());
  if (bAutoRecompile)
    EmitRecompileRay();
}

void ZGlShader::EmitRecompileRay()
{
  if (mQueen && mSaturn->AcceptsRays()) {
    auto_ptr<Ray> ray
      (Ray::PtrCtor(this, PRQN_recompile, mTimeStamp, FID()));
    mQueen->EmitRay(ray);
  }
}

//==============================================================================

void ZGlShader::Load(const Text_t* file)
{
  if (file != 0)
  {
    mFile = file;
    if (mFile.EndsWith(".vert"))
      mType = GL_VERTEX_SHADER;
    else if (mFile.EndsWith(".frag"))
      mType = GL_FRAGMENT_SHADER;
    else
      mType = 0;
  }

  {
    GMutexHolder prog_lock(mProgMutex);
    ifstream f(mFile);
    mProgram.ReadFile(f);
    f.close();
  }

  Stamp(FID());
}

void ZGlShader::Save(const Text_t* file)
{
  ofstream f(mFile);
  f << mProgram;
  f.close();
}

//==============================================================================

TString ZGlShader::type_as_string()
{
  switch (mType)
  {
    case GL_VERTEX_SHADER:   return "Vertex";
    case GL_FRAGMENT_SHADER: return "Fragment";
    default:                 return "Undef";
  }
}

void ZGlShader::PrintProgram()
{
  cout << type_as_string() << " program for " << Identify() << "\n" << mProgram;
}

void ZGlShader::PrintLog()
{
  cout << "Compile log for " << Identify() << "\n" << mLog;
}
 ZGlShader.cxx:1
 ZGlShader.cxx:2
 ZGlShader.cxx:3
 ZGlShader.cxx:4
 ZGlShader.cxx:5
 ZGlShader.cxx:6
 ZGlShader.cxx:7
 ZGlShader.cxx:8
 ZGlShader.cxx:9
 ZGlShader.cxx:10
 ZGlShader.cxx:11
 ZGlShader.cxx:12
 ZGlShader.cxx:13
 ZGlShader.cxx:14
 ZGlShader.cxx:15
 ZGlShader.cxx:16
 ZGlShader.cxx:17
 ZGlShader.cxx:18
 ZGlShader.cxx:19
 ZGlShader.cxx:20
 ZGlShader.cxx:21
 ZGlShader.cxx:22
 ZGlShader.cxx:23
 ZGlShader.cxx:24
 ZGlShader.cxx:25
 ZGlShader.cxx:26
 ZGlShader.cxx:27
 ZGlShader.cxx:28
 ZGlShader.cxx:29
 ZGlShader.cxx:30
 ZGlShader.cxx:31
 ZGlShader.cxx:32
 ZGlShader.cxx:33
 ZGlShader.cxx:34
 ZGlShader.cxx:35
 ZGlShader.cxx:36
 ZGlShader.cxx:37
 ZGlShader.cxx:38
 ZGlShader.cxx:39
 ZGlShader.cxx:40
 ZGlShader.cxx:41
 ZGlShader.cxx:42
 ZGlShader.cxx:43
 ZGlShader.cxx:44
 ZGlShader.cxx:45
 ZGlShader.cxx:46
 ZGlShader.cxx:47
 ZGlShader.cxx:48
 ZGlShader.cxx:49
 ZGlShader.cxx:50
 ZGlShader.cxx:51
 ZGlShader.cxx:52
 ZGlShader.cxx:53
 ZGlShader.cxx:54
 ZGlShader.cxx:55
 ZGlShader.cxx:56
 ZGlShader.cxx:57
 ZGlShader.cxx:58
 ZGlShader.cxx:59
 ZGlShader.cxx:60
 ZGlShader.cxx:61
 ZGlShader.cxx:62
 ZGlShader.cxx:63
 ZGlShader.cxx:64
 ZGlShader.cxx:65
 ZGlShader.cxx:66
 ZGlShader.cxx:67
 ZGlShader.cxx:68
 ZGlShader.cxx:69
 ZGlShader.cxx:70
 ZGlShader.cxx:71
 ZGlShader.cxx:72
 ZGlShader.cxx:73
 ZGlShader.cxx:74
 ZGlShader.cxx:75
 ZGlShader.cxx:76
 ZGlShader.cxx:77
 ZGlShader.cxx:78
 ZGlShader.cxx:79
 ZGlShader.cxx:80
 ZGlShader.cxx:81
 ZGlShader.cxx:82
 ZGlShader.cxx:83
 ZGlShader.cxx:84
 ZGlShader.cxx:85
 ZGlShader.cxx:86
 ZGlShader.cxx:87
 ZGlShader.cxx:88
 ZGlShader.cxx:89
 ZGlShader.cxx:90
 ZGlShader.cxx:91
 ZGlShader.cxx:92
 ZGlShader.cxx:93
 ZGlShader.cxx:94
 ZGlShader.cxx:95
 ZGlShader.cxx:96
 ZGlShader.cxx:97
 ZGlShader.cxx:98
 ZGlShader.cxx:99
 ZGlShader.cxx:100
 ZGlShader.cxx:101
 ZGlShader.cxx:102
 ZGlShader.cxx:103
 ZGlShader.cxx:104
 ZGlShader.cxx:105
 ZGlShader.cxx:106
 ZGlShader.cxx:107
 ZGlShader.cxx:108
 ZGlShader.cxx:109
 ZGlShader.cxx:110
 ZGlShader.cxx:111
 ZGlShader.cxx:112
 ZGlShader.cxx:113
 ZGlShader.cxx:114