利用GLSL
我的Xcode版本version130打不开,所以改了.vp和.fp文件
- .vp
#version 120
attribute vec4 vColor;
attribute vec4 vVertex;
varying vec4 vVaryingColor;
void main(void)
{
vVaryingColor = vColor;
gl_Position = vVertex;
}
- .fp
#version 120
varying vec4 vVaryingColor;
void main(void)
{
gl_FragColor = vVaryingColor;
}
#include<GLTools.h>
#include<GLShaderManager.h>
#include<GLUT/GLUT.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
GLint myIdentityShader;
void ChangeSize(int w,int h)
{
glViewport(0,0,w,h);
}
void SetupRC()
{
glClearColor(0.0f,0.0f,0.0f,1.0f);
shaderManager.InitializeStockShaders();
GLfloat vVertes[]={-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f};
GLfloat vColors[]{1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f};
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVertes);
triangleBatch.CopyColorData4f(vColors);
triangleBatch.End();
myIdentityShader=gltLoadShaderPairWithAttributes("/Users/mac/Downloads/1/ShadedIdentity.vp","/Users/mac/Downloads/1/ShadedIdentity.fp",2,GLT_ATTRIBUTE_VERTEX,"vVertex",GLT_ATTRIBUTE_COLOR,"vColor");
}
void ShutdownRC()
{
glDeleteProgram(myIdentityShader);
}
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
glUseProgram(myIdentityShader);
triangleBatch.Draw();
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
glutInitWindowSize(800,600);
glutCreateWindow("Shaded Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
ShutdownRC();
return 0;
}