#include "../cwc/aGLSL.h"
#include <GL/glut.h>
#include <iostream>
using namespace std;
//Shader and Program Objects:
aShaderObject* myShader = 0;
aVertexShader* myVertexShader = 0;
aFragmentShader* myFragmentShader = 0;
void AppInit(void)
{
// it is important a GL context is availble before creating
// shader and Program objects.
myShader = new aShaderObject;
myVertexShader = new aVertexShader;
myFragmentShader = new aFragmentShader;
// Load Vertex Program
if (myVertexShader->load("simple.vert") != 0)
{
cout << "can't load vertex shader!\n";
exit(-1); // if file is missing: major error, better exit
}
// Load Fragment Program
if (myFragmentShader->load("simple.frag") != 0)
{
cout << "can't load fragment shader!\n";
exit(-1); // if file is missing: major error, better exit
}
// Compile Vertex Program, if it fails output log
if (!myVertexShader->compile())
{
cout << "***COMPILER ERROR:\n";
cout << myVertexShader->getCompilerLog() << endl;
}
// Compile fragment Program, if it fails output log
if (!myFragmentShader->compile())
{
cout << "***COMPILER ERROR:\n";
cout << myFragmentShader->getCompilerLog() << endl;
}
// Add (compiled Programs) to object
myShader->addShader(myVertexShader);
myShader->addShader(myFragmentShader);
//Link the Program
if (!myShader->link())
{
cout << "**LINKER ERROR\n";
cout << myShader->getLinkerLog() << endl;
}
}
//*************************************************************
//Draw one Frame (don't swap buffers)
void DrawFrame(void)
{
myShader->begin();
glutSolidTeapot(1.0);
myShader->end();
}
//*************************************************************
// use AppExit to clean up
void AppExit(void)
{
if (myShader!=0) delete myShader;
if (myVertexShader!=0) delete myVertexShader;
if (myFragmentShader!=0) delete myFragmentShader;
}
//***********************************************************
|