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,創建程序

GLuint program;
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,激活和關閉着色器程序 
我們在使用着色器之前應該將着色器程序設置為活動的

在關閉着色器時只需要傳入參數0即可

 
1 glUseProgram(program);
2 glUseProgram(0);

8,刪除着色器和程序 
我們在使用完畢后需要刪除着色器與着色器程序,刪除着色器程序對象僅僅是解除了它與着色器的關聯,這些着色器仍然可以繼續使用。所以我們需要在刪除程序之后再刪除着色器。假如我們先調用了刪除着色器的方法,實際着色器並不會被刪除,直到其與着色器程序的關聯被解除才會被真正的刪除。

1 glDeleteProgram(program);
2 glDeleteShader(vertSahder);
3 glDeleteShader(fragShader);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM