著色器語言之uniform限制符

  • 一.定義

以上是opengl es3.2官方文檔中對於 uniform限制符的描述,主要說了幾點:

1在shader代碼中,它必須申明為全局變數(global variable)。

2它的值在整個圖元處理的過程中不會發生改變。

3它的值是只讀的(read-only),可以通過api初始化也可以在鏈接期初始化。

4採樣器(用於訪問紋理)不需要初始化。

5它可以用來修飾任何基礎類型,即使是結構體或各種類型的數組。

本質上說,uniform就是在應用程序和各個shader之間搭建了一個橋樑,讓它們之間可以傳遞一個在各個shader內不可以修改值的變數。

  • 二.在應用程序中,操作uniform修飾變數

首先在著色器中申明一個uniform修飾的變數

然後在鏈接期 生成一個uniform變數列表(variable』s initializer),如果需要設置著色器中gScale的值,必須先獲取列表中的索引,通過glGetUniformLocation()函數獲得。

ShaderProgram表示著色器程序,是通過函數直接創建的

gScale即變數名字

gScaleLocation就是gScale變數在當前uniform變數列表中的索引值(除非再次調用glLinkProgram()函數重新鏈接項目,否則這個索引值不會改變)。有了這個值之後,在程序中就可以通過

來給這個變數賦值。

函數說明

Reference:

  1. 函數說明blog.csdn.net/wangyuchu

  2. GLSL_ES_Specification_3.20.withchanges https://khronos.org/registry/gl

  3. ogldev.atspace.co.uk/ww

推薦閱讀:

小隨筆:利用Shader給斯坦福兔子長毛和實現雪地效果

TAG:计算机图形学 | OpenGL | OpenGLES |