从渲染管线学 GLES2.0(二)----着色器

1、着色器与 OpenGL ES

现代 OpenGL ES 渲染管线严重依赖着色器来处理传入的数据,如果不使用着色器,那么用 OpenGL ES 可以做到的事情就只有清除窗口内容了,可见着色器与 OpenGL ES 的重要性。

无论是 OpenGL ES 还是其它图形的 API 着色器,通常都是通过一种特殊的编程语言去编写的,对于 OpenGL ES 来说使用的是 GLSL,也就是 OpenGL Shading Language,虽然 GLSL 是一种专门为图形开发设计的语言,但是它与 C 语言非常相似,当然还有一点 C++ 的影子。

2、基础类型

类型

说明

void

没有函数返回值或者空的参数列表

bool

布尔值

int

有符号整型

float

浮点类型

vec2, vec3, vec4

浮点vector数组

bvec2, bvec3, bvec4

布尔vector数组

ivec2, ivec3, ivec4

有符号整型vector数组

mat2, mat3, mat4

2x2,3x3,4x4 浮点矩阵

sampler2D

2D 纹理

samplerCube

立方体纹理

3、内置宏

内置宏

说明

__LINE__

十进制整型常量,当前程序行的行号

__FILE__

当前的源文件名,表示字符串常量

__VERSION__

十进制整数,例如:100

GL_ES

如果在OpenGL-ES着色语言上运行,定义并设置为整数1

GL_FRAGMENT_PRECISION_HIGH

如果fragment语言支持high,则为undefined

4、变量修饰符

修饰符

说明

none

默认的,可以省略

const

声明变量或者函数的参数为只读类型

attribute

只能用于 vertex shader 中,一般用于保存顶点属性或者法向量等数据

uniform

在运行时 shader 无法改变 uniform 变量,一般用来放置程序传递给 shader 的变换矩阵,材质,光照参数等

varying

主要负责在 vertex 和 fragment 之间传递变量

5、函数参数限定符

限定符

说明

in

传递给函数的参数

out

用于从函数传回的函数参数

inout

用于传入和传出的函数参数

6、精度限定

精度限定符

说明

highp

高精度

mediump

中精度

lowp

低精度

通过 precision 关键字可以批量声明一批变量的精度或者单个变量的精度

比如在顶点着色器中设置 precision mediump float; 那么就表示顶点着色器中所有浮点数的精度都是高精度

precision mediump float;

7、内置变量

顶点着色器

变量名称

类型

说明

highp vec4 gl_Position

输出变量

顶点位置坐标

mediump float gl_PointSize

输出变量

顶点大小,只有当图元类型为点时才生效

片段着色器

变量名称

类型

说明

mediump vec4 gl_FragCoord

输入变量

片段在帧缓冲区中的位置

bool gl_FrontFacing

输入变量

片段前后面信息

mediump vec2 gl_PointCoord

输出变量

点精灵坐标,范围是[0.0, 1.0],左上角是 0,右下角是 1,在画点时可以利用 gl_PointCoord 画出一个圆形的点

mediump vec4 gl_FragColor

输出变量

设置当前片段的颜色

mediump vec4 gl_FragData[n]

输出变量

设置当前片段的颜色,使用glDrawBuffers数据数组时生效,在 GLES2.0 中 drawBuffers 数量为 1,所以 gl_FragData 在 GLES2.0 中不会使用到

8、内置常量

常量名称

最小值

说明

const mediump int gl_MaxVertexAttribs

8

gl_MaxVertexAttribs 表示在vertex shader(顶点着色器)中可用的最大attributes数.这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 8 个.

const mediump int gl_MaxVertexUniformVectors

128

gl_MaxVertexUniformVectors 表示在vertex shader(顶点着色器)中可用的最大uniform vectors数. 这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 128 个.

const mediump int gl_MaxVaryingVectors

8

gl_MaxVaryingVectors 表示在vertex shader(顶点着色器)中可用的最大varying vectors数. 这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 8 个.

const mediump int gl_MaxVertexTextureImageUnits

0

gl_MaxVaryingVectors 表示在vertex shader(顶点着色器)中可用的最大纹理单元数(贴图). 这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 甚至可以一个都没有(无法获取顶点纹理)

const mediump int gl_MaxCombinedTextureImageUnits

8

gl_MaxVaryingVectors 表示在 vertex Shader和fragment Shader总共最多支持多少个纹理单元. 这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 8 个.

const mediump int gl_MaxTextureImageUnits

8

gl_MaxVaryingVectors 表示在 fragment Shader(片元着色器)中能访问的最大纹理单元数,这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 8 个.

const mediump int gl_MaxFragmentUniformVectors

16

gl_MaxFragmentUniformVectors 表示在 fragment Shader(片元着色器)中可用的最大uniform vectors数,这个值的大小取决于 OpenGL ES 在某设备上的具体实现, 不过最低不能小于 16 个.

const mediump int gl_MaxDrawBuffers

1

gl_MaxDrawBuffers 表示可用的drawBuffers数,在OpenGL ES 2.0中这个值为1, 在将来的版本可能会有所变化

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gles2-gears是一个基于OpenGL ES 2.0的图形渲染示例程序。该程序主要用于演示OpenGL ES 2.0中的基本图形渲染功能和性能。它由几个齿轮组成,每个齿轮由多个三角形组成,通过旋和平移操作,可以观察到各个齿轮之间的相互作用和渲染效果。 通过使用OpenGL ES 2.0gles2-gears可以利用硬件加速图形渲染,提供高性能的图形处理能力。它支持通过着色器程序来实现各种渲染效果,如光照、阴影和纹理等。同时,该示例程序也提供了用户交互接口,用户可以通过触摸或鼠标操作来改变齿轮的旋速度和方向,从而观察不同的视觉效果。 gles2-gears不仅是一个OpenGL ES 2.0的示例程序,也是一个性能测试工具。通过改变齿轮数量和分辨率等参数,可以测试设备对于大规模场景和高分辨率渲染的性能表现。这对于开发者来说是非常有价值的,可以帮助他们评估设备的图形处理能力,并根据测试结果进行相应的优化。 总而言之,gles2-gears是一个基于OpenGL ES 2.0的演示和性能测试程序,可以帮助开发者习和评估设备的图形处理能力。它充分利用硬件加速,通过渲染齿轮的旋和交互操作,展示了OpenGL ES 2.0的高性能实时图形渲染能力。 ### 回答2: gles2-gears是一个基于OpenGL ES 2.0的开源项目,它展示了使用OpenGL ES 2.0绘制的齿轮模型。它是一个典型的图形示例,用于演示OpenGL ES 2.0的功能和特性。 在gles2-gears中,通过使用OpenGL ES 2.0着色器语言GLSL,实现了光照、纹理贴图等高级渲染技术。整个场景由齿轮模型组成,通过旋、缩放等操作,可以观察到齿轮之间的互动效果。 gles2-gears的源代码可用于OpenGL ES 2.0编程,了解图形渲染的基本原理和技术。通过阅读和理解其代码结构和逻辑,可以了解OpenGL ES 2.0的编程模式和渲染流程。 此外,gles2-gears还可以用作性能测试工具,用于测试硬件设备的图形渲染性能。通过调整渲染分辨率、齿轮数量等参数,可以评估设备的图形处理能力,并进行性能对比。 总的来说,gles2-gears是一个教育和性能测试的工具,用于展示和验证OpenGL ES 2.0的功能和性能。无论是初者还是专业开发者,都可以使用它来习和优化图形渲染技术。 ### 回答3: gles2-gears是一个使用OpenGL ES 2.0图形库编写的一个开源项目,它展示了三个互动的齿轮,用于测试和演示OpenGL ES 2.0的性能和功能。 在它的实现过程中,作者使用了OpenGL ES 2.0着色器语言GLSL来处理图形渲染。齿轮之间的动是通过在每个齿轮上应用旋变换来实现的,通过修改齿轮的旋角度和速度,可以调整和控制齿轮之间的相对运动。此外,作者还为齿轮和整个场景设计了适当的材质、光照和阴影效果,以增强视觉效果。 这个项目最初是为了展示OpenGL ES 2.0在移动设备上的性能和功能而创建的,但它也可以在其他支持OpenGL ES 2.0的平台上运行。用户可以通过触摸或鼠标交互来控制和改变齿轮的旋和速度,从而创建不同的视觉效果和交互体验。 值得一提的是,该项目的源代码开放,并经常作为一种教工具,帮助人们习和理解OpenGL ES 2.0的基本概念和应用技巧。许多人使用和修改这个项目,以满足不同的需求和目标。 总的来说,gles2-gears是一个展示和测试OpenGL ES 2.0在三维图形渲染中的性能和功能的开源项目。它不仅仅是一个演示程序,还可以作为习和教工具来帮助人们更好地理解和应用OpenGL ES 2.0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值