Xcode+Opengl学习(8)高级——使用自己的着色器

利用GLSL
我的Xcode版本version130打不开,所以改了.vp和.fp文件

  1. .vp
#version 120
attribute vec4 vColor;
attribute vec4 vVertex;

varying vec4 vVaryingColor;
void main(void)
{
vVaryingColor = vColor;
gl_Position = vVertex;
}

  1. .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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值