14 WebGL 著色器程式語言GLSL ES的預處理指令
阿新 • • 發佈:2019-02-19
GLSL ES支援預處理指令。預處理指令用來在真正編譯之前對程式碼進行預處理,都以井號(#)開始。下面就是我們曾使用的預處理指令。
#ifdef GL_ES
precision mediump float;
#endif
這段程式碼檢查了是否已經定義了GL_ES巨集,如果是,那就執行#ifdef和#endif之間的部分。這個預處理指令的格式和C語言或JavaScript中的if語句很類似。
下面是我們在GLSL ES中可能用到的三種預處理指令。
你可以使用#define指令進行巨集定義。和C語言中的巨集不同,GLSL ES中的巨集沒有巨集引數:
#define 巨集名 巨集內容
你可以使用#undef指令解除巨集定義:
你可以使用#else指令配合#ifdef(就像C語言或JavaScript中if語句中的else),比如:#undef 巨集名
巨集的名稱可以任意起,只要不和預定義的內建巨集名稱(表6.17)相同即可。
所以,我們可以這樣使用巨集來進行精度限定:
#ifdef GL_ES
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float; //支援高精度,限定浮點型為高精度
#else
precision mediump float; //不支援高精度,限定浮點型為中精度
#endif
#endif
可以使用#version來指定著色器使用的GLSL ES版本:
可以接受的版本包括100(GLSL ES 1.00)和101(GLSL ES 1.01)。如果不適用#version 指令,著色器將預設GLSL ES的版本是1.00。指定1.01版本的程式碼如下:#version number
#version 101
#version指令必須在著色器頂部,在它之前只能有註釋和空白。