#include<string>
using namespace std;
GLhandleARB vsh = NULL;
GLhandleARB fsh = NULL;
GLhandleARB pobj = NULL;
const char** vt;
const char** ft;
void Init(void)
{
string s("/*varying vec2 texcoord;*/ void main(void){/*texcoord = gl_MultiTexCoord1.st;*/gl_Position = ftransform();}");
vt =(const char**) malloc(s.length() * sizeof(char));
(*vt) = s.c_str();
string s1("uniform bool drawpos;/*varying vec2 texcoord;*/void main(void){if(!drawpos){ vec4 i = vec4(0.0);} else { vec4 j = vec4(0.0);} gl_FragColor = vec4(0.0);}");
ft =(const char**) malloc(s1.length() * sizeof(char));
(*ft) = s1.c_str();
glEnable(GL_TEXTURE_2D);
glClearColor(0.0,0.0,0.0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-20,20);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
vsh = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
glShaderSourceARB(vsh,1,vt,NULL);
glCompileShaderARB(vsh);
fsh = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
glShaderSourceARB(fsh,1,ft,NULL);
glCompileShaderARB(fsh);
pobj = glCreateProgramObjectARB();
glAttachObjectARB(pobj,vsh);
glAttachObjectARB(pobj,fsh);
glLinkProgramARB(pobj);
glColor3f(1.0f,1.0f,1.0f);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glUseProgramObjectARB(pobj);
GLint hvar = glGetUniformLocationARB(pobj,"drawpos");
glUniform1fARB(hvar,true);
glutSwapBuffers();
glFlush();
}
void idle()
{
glutPostRedisplay();
}
void keyboardFunc(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
{
exit(0);
break;
}
}
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800,800);
int in = glutCreateWindow("Springs Chain");
OGLSL::Init(in);
Init();
//glutFullScreen();
glutDisplayFunc(display);
//glutSpecialFunc(SpecialKey);
//glutMouseFunc(mouseFunc);
//glutMotionFunc(mouseMotionFunc);
//glutPassiveMotionFunc(passiveMotionFunc);
glutKeyboardFunc(keyboardFunc);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}