OpenGL着色器使用流程

着色器使用流程

整个着色器的使用流程如下:

  • 1,创建着色器对象
  • 2,把源码关联到每个着色器对象
  • 3,编译着色器
  • 4,创建程序
  • 5,关联着色器到程序对象
  • 6,链接程序
  • 7,激活和关闭着色器程序
  • 8,删除着色器和程序

1,创建着色器对象

 
 
  1. GLint vertSahder,fragShader;//顶点着色器,片元着色器
  2. vertSahder = glCreateShader(GL_VERTEX_SHADER);
  3. fragShader = glCreateShader(GL_FRAGMENT_SHADER);

2,把源码关联到每个着色器对象

 
 
  1. //着色器源码位置
  2. OGLTextFile vertSources("D://","vert.shader");
  3. OGLTextFile fragSources("D://","frag.shader");
  4. //获取源码内容
  5. OGLString vertText = vertSources.getText();
  6. OGLString fragText = fragSources.getText();
  7. //关联着色器
  8. glShaderSource(vertSahder,1,(const GLchar **)&vertText,NULL);
  9. glShaderSource(fragShader,1,(const GLchar **)&fragText,NULL);

3,编译着色器

 
 
  1. glCompileShader(vertSahder);
  2. glCompileShader(fragShader);
  3. //这里检查编译是否成功
  4. GLint status;
  5. glGetShaderiv(vertSahder,GL_COMPILE_STATUS,&status);
  6. if(status!=GL_TRUE){
  7. println("顶点着色器编译失败");
  8. exit(EXIT_FAILURE);
  9. }
  10. glGetShaderiv(fragShader,GL_COMPILE_STATUS,&status);
  11. if(status!=GL_TRUE){
  12. println("片元着色器编译失败");
  13. exit(EXIT_FAILURE);
  14. }

4,创建程序

 
 
  1. GLuint program;
  2. program = glCreateProgram();

5,关联着色器到程序对象

 
 
  1. glAttachShader(program,vertSahder);
  2. glAttachShader(program,fragShader);

6,链接程序

 
 
  1. glLinkProgram(program);
  2. //检查是否链接错误
  3. glGetProgramiv(program,GL_LINK_STATUS,&status);
  4. if(status!=GL_TRUE){
  5. println("程序链接失败");
  6. exit(EXIT_FAILURE);
  7. }

7,激活和关闭着色器程序 
我们在使用着色器之前应该将着色器程序设置为活动的

 
 
  1. glUseProgram(program);

在关闭着色器时只需要传入参数0即可

 
 
  1. glUseProgram(0);

8,删除着色器和程序 
我们在使用完毕后需要删除着色器与着色器程序,删除着色器程序对象仅仅是解除了它与着色器的关联,这些着色器仍然可以继续使用。所以我们需要在删除程序之后再删除着色器。假如我们先调用了删除着色器的方法,实际着色器并不会被删除,直到其与着色器程序的关联被解除才会被真正的删除。

 
 
  1. glDeleteProgram(program);
  2. glDeleteShader(vertSahder);
  3. glDeleteShader(fragShader);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值