S.No. | 類型 | 描述 |
---|---|---|
1 | void |
表示一個空值
|
2 | bool |
接受true或false
|
3 | int |
這是一個有符號整數(shù)數(shù)據(jù)類型
|
4 | float |
這是一個浮點標(biāo)量數(shù)據(jù)類型
|
5 | vec2, vec3, vec4 |
正分量浮點矢量
|
6 | bvec2, bvec3, bvec4 |
布爾矢量
|
7 | ivec2, ivec3, ivec4 |
有符號整數(shù)矢量
|
8 | mat2, mat3, mat4 | 2x2, 3x3, 4x4 浮點矩陣 |
9 | sampler2D |
訪問2D紋理
|
10 | samplerCube |
訪問立方體映射紋理
|
S.No. |
修飾符
|
描述 |
---|---|---|
1 | attribute |
這個修飾符充當(dāng)每個頂點數(shù)據(jù)的頂點著色器和OpenGL ES之間的鏈接。此頂點著色器屬性的值在每次執(zhí)行時變化
|
2 | uniform |
這修飾符鏈接著色器程序及其WebGL的應(yīng)用程序。不同屬性修飾詞,制服(uniforms)的值不會改變。制服(uniforms)是只讀的; 可以用它們與任何基本數(shù)據(jù)類型來聲明一個變量。
示例 - 統(tǒng)一 vec4 光的位置;
|
3 | varying |
這個修飾符形成頂點著色器的內(nèi)插數(shù)據(jù)和片段著色器之間的聯(lián)系。它可用于下列數(shù)據(jù)類型- float, vec2, vec3, vec4, mat2, mat3, mat4, 或數(shù)組。
示例 - 改變VEC3正常;
|
S.No. | 變量 | 描述 |
---|---|---|
1 | highp vec4 gl_Position; |
保存頂點的位置
|
2 | mediump float gl_PointSize; |
保存變換點的大小。此變量的單位是像素
|
attribute vec2 coordinates; void main(void) { gl_Position = vec4(coordinates, 0.0, 1.0); };
S.No. | 變量 | 描述 |
---|---|---|
1 | mediump vec4 gl_FragCoord; |
保存幀緩沖器中的片段位置
|
2 | bool gl_FrontFacing; |
存放屬于一個前置原語的片段
|
3 | mediump vec2 gl_PointCoord; |
存放在一個點(點僅光柵化)片段的位置
|
4 | mediump vec4 gl_FragColor; |
保存著色器的輸出片段的顏色值
|
5 | mediump vec4 gl_FragData[n] |
持有該片段顏色的色彩附件n
|
void main(void) { gl_FragColor = vec4(0, 0.8, 0, 1); }
var vertCode = 'attribute vec2 coordinates;' + 'void main(void) {' + ' gl_Position = vec4(coordinates, 0.0, 1.0);' + '}';
Object createShader (enum type)
gl.VERTEX_SHADER創(chuàng)建頂點著色器
gl.FRAGMENT_SHADER 創(chuàng)建片段著色器。
void shaderSource(Object shader, string source)
shader ? 必須創(chuàng)建Shader對象傳遞作為一個參數(shù)。
Source ? 必須以字符串格式傳入著色器程序代碼。
compileShader(Object shader)
// Vertex Shader var vertCode = 'attribute vec3 coordinates;' + 'void main(void) {' + ' gl_Position = vec4(coordinates, 1.0);' + '}'; var vertShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertShader, vertCode); gl.compileShader(vertShader); // Fragment Shader var fragCode = 'void main(void) {' + ' gl_FragColor = vec4(0, 0.8, 0, 1);' + '}'; var fragShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragShader, fragCode); gl.compileShader(fragShader);
createProgram();
attachShader(Object program, Object shader);
Program ? 通過創(chuàng)建空的程序?qū)ο笞鳛橐粋€參數(shù)
Shader ? 傳遞的著色器編譯程序中的一個(頂點著色器,片段著色器)
linkProgram(shaderProgram);
useProgram(shaderProgram);
var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertShader); gl.attachShader(shaderProgram, fragShader); gl.linkProgram(shaderProgram); gl.useProgram(shaderProgram);