OpenGL ES 内建变量以及多重纹理渲染计算

2020-08-27  本文已影响0人  为了自由的白菜

我们用GLSL来编写着色器代码时, 要了解他们的一些内建变量参数的含义. 本文就是对内建变量做一些介绍.

在顶点着色器中的内建变量

顶点着色器的内建变量可以分为特殊变量(顶点着色器输入/输出), 统一状态(深度范围)以及规定的最大值(属性数量, 顶点着色器变量数量和统一变量数量)的常量.

在顶点着色器内可用的唯一内建 Uniform状态是窗口坐标中的深度范围, 这些由内建统一变量名 gl_DepthRange 给出.

struct gl_DepthRangeParameters {  
highp float near; //near z  
highp float far; //near far  
highp float diff; //far - near  
}  
uniform gl_DepthRangeParameters gl_DepthRange;  

顶点着色器中的内建常量

const mediump int gl_MaxVertexAttribs = 16;  
const mediump int gl_MaxVertexUniformVectors = 256;  
const mediump int gl_MaxVertexOutputVectors = 16;  
const mediump int gl_MaxVertexTextureImageUnits = 16;   
const mediump int gl_MaxCombinedTextureImageUnits = 32;  

gl_MaxVertexAttribs : 可以指定的顶点数据最大的数量.
gl_MaxVertexUniformVectors : 顶点着色器可以使用的vec4 Uniform 变量最大数量.
gl_MaxVertexOutputVectors : 是输出向量的足底啊数量.
gl_MaxVertexTextureImageUnits : 顶点着色器可用纹理单元的最大数量.
gl_MaxCombinedTextureImageUnits : 顶点/片元着色器中的可用纹理单元的最大数量的总和.

片元着色器的内建特殊变量

片元着色器中的内建常量

const mediump int gl_MaxFragmentInputVectors = 15;   
const mediump int gl_MaxTextureImageUnits = 16;   
const mediump int gl_MaxFragmentUniformVectors = 224;   
onst mediump int gl_MaxDrawBuffers = 4;
const mediump int gl_MinProgramTexelOffset = -8;   
const mediump int gl_MaxProgramTexelOffset = 7;  

gl_MaxFragmentInputVectors : 片段着色器输入的最大数量.
gl_MaxTextureImageUnits : 可用纹理图像单元的最大数量.
gl_MaxFragmentUniformVectors : 片段着色器可用vec4 Uniform变量最大数量.
gl_MaxDrawBuffers : 多重渲染目标最大支持数量.

多重纹理渲染计算

意思就是最终颜色, 由多张纹理合成计算.

attribute vec2 v_texCoord;   
uniform sampler2D s_baseMap;   
uniform sampler2D s_SecondMap;  
 void main()  
 {  
    vec4 baseColor;  
    vec4 secondColor;  
    baseColor = texture(s_baseMap, v_texCoord);  
    secondColor = texture(s_SecondMap, v_texCoord);  
    gl_FragColor = baseColor * secondColor;  
 }  

客户端代码: 将各个纹理对象绑定到纹理单元0和1, 为采样设置数值, 将采集器绑定到对应的纹理单元

  glActiveTexutre(GL_TEXTURE0);   
  glBindTeture(GL_TEXTURE_2D,baseMapTexId);     
  glUniformli(baseMapTexId,0);    

    
  glActiveTexutre(GL_TEXTURE1);  
  glBindTeture(GL_TEXTURE_2D,secondMapTexId);  
  glUniformli(secondMapTexId,1);  
上一篇下一篇

猜你喜欢

热点阅读