2013-02-10 133 views
1

後如題所說,我能做到這一點在我的計劃:我們可以刪除頂點和片段着色器鏈接着色器程序

vertex = glCreateShader(GL_VERTEX_SHADER); 
/* ... */ 
fragment = glCreateShader(GL_FRAGMENT_SHADER); 
/* ... */ 
program = glCreateProgram(); 
glAttachShader(program, vertex); 
glAttachShader(program, fragment); 
glLinkProgram(program); 
/* All things done */ 

glDeleteShader(vertex); /* <~ Can I do this now? */ 
glDeleteShader(vertex); /* <~ Can I do this now? */ 

/* And in render procedure */ 
glUseProgram(program); /* <~ Still use program without any problem? */ 
/* ... */ 
+1

[正確的方法來刪除GLSL着色器?](http://stackoverflow.com/questions/9113154/proper-way-to-delete-glsl-shader) – 2013-02-10 19:06:22

回答

1

是,這一完全合法的。着色器對象仍然由程序對象在內部引用,並且在程序對象被刪除時將被隱式釋放。

+0

請再問一個問題:D。如果我們在鏈接程序之後不刪除着色器,我們是否需要稍後刪除着色器(也許在刪除程序時......)? – 2013-02-12 01:57:13

+0

@BìnhNguyên:不可以。您也可以將單個着色器對象鏈接到多個程序。例如,您可以重複使用與幾個不同片段着色器相同的頂點着色器(這些必須與頂點着色器的變化輸出匹配)。如果你丟失了一個OpenGL對象的句柄,你不能再使用它,但是當OpenGL上下文被刪除時,所有東西都會被隱式釋放。 – datenwolf 2013-02-12 10:44:19

相關問題