OpenGL ES 2.0 shader开发

1.创建一个shader容器

GLES20.glCreateShader(shaderType);

函数原型为:

int glCreateShader (int type)

方法参数:

GLES20.GL_VERTEX_SHADER (顶点shader)

GLES20.GL_FRAGMENT_SHADER (片元shader)

返回值:

函数将返回一个整形的正整数作为shader容器的id。

2.加载shader的源代码

 GLES20.glShaderSource(shader, source);

要在创建好的shader容器中添加shader的源代码。源代码应该以字符串数组的形式表示。当然,也可以只用一个字符串来包含所有的源代码。

函数的原型:

void glShaderSource (int shader, String string)

方法参数:

shader是代表shader容器的id(由glCreateShader返回的整形数);

strings是包含源程序的字符串数组;

3.编译shader

GLES20.glCompileShader(shader);

使用glCompileShader函数来对shader容器中的源代码进行编译。

函数的原型如下:

void glCompileShader (int shader)

参数含义:

shader是代表shader容器的id

4.调试

4.1 编译阶段使用glGetShaderiv获取编译情况

函数原型:
void glGetShaderiv (int shader, int pname, int[] params, int offset)
参数含义:
shader是一个shader的id;
pname使用GL_COMPILE_STATUS;
params是返回值,如果一切正常返回GL_TRUE代,否则返回GL_FALSE。

4.2编译阶段使用glGetShaderInfoLog获取编译错误

函数原型:
String glGetShaderInfoLog (int shader)
参数含义:
shader是一个顶点shader或者片元shader的id。

4.3 在连接阶段使用glGetProgramiv获取连接情况

函数原型:
void glGetProgramiv (int program, int pname, int[] params, int offset)
参数含义:
program是一个着色器程序的id;
pname是GL_LINK_STATUS;
param是返回值,如果一切正常返回GL_TRUE代,否则返回GL_FALSE。

4.4 在连接阶段使用glGetProgramInfoLog获取连接错误

函数原型:
String glGetProgramInfoLog (int program)
参数含义:
program是一个着色器程序的id。

5.清理shader

当不再需要某个shader或某个程序的时候,需要对其进行清理,以释放资源。

函数原型:

void glDeleteShader (int shader)

参数含义:

shader是要被排除的顶点shader或者片元shader的id

6.创建程序对象

int program = GLES20.glCreateProgram();
函数原型:
int glCreateProgram ()
如果函数调用成功将返回一个正整数作为该着色器程序的id。

7.Shader连接程序对象

//向程序中加入顶点着色器
GLES20.glAttachShader(program, vertexShader);//向程序中加入片元着色器
GLES20.glAttachShader(program, pixelShader);       
函数原型:
void glAttachShader (int program, int shader)
参数含义:
program是着色器程序容器的id;
shader是要添加的顶点或者片元shader容器的id。

8.链接程序

函数原型:
void glLinkProgram (int program)
参数含义:
program是着色器程序容器的id。

9.使用链接好的程序

  如果将program设置为0,表示使用固定功能管线。

函数原型:
void glUseProgram (int program)
参数含义:
program是要使用的着色器程序的id。

参考:

http://www.tuicool.com/articles/VZVJra

http://fengmm521.blog.163.com/blog/static/2509135820133254936364/

时间: 2024-10-10 00:09:34

OpenGL ES 2.0 shader开发的相关文章

win7下搭建opengl es 2.0开发环境

http://codingnow.cn/opengles/1501.html =================================================================== 1. 下载AMD的OpenGL ES2.0的模拟器 ,下载地址: http://www.opengles-book.com/ESEmulator.2009-04-28-v1.4.APRIL_2009_RELEASE.msi 2. 下载<OpenGL ES2.0 Programming

Chapter 1 : OpenGLES 3.0 简介 (2)—— OpenGL ES 3.0

管道 如前所属,本书讲解的API版本是OpenGL ES 3.0.本书的目标是,深入讲解OpenGL ES 3.0的技术细节,给出具体的例子来说明如何使用某个特性,并且讨论了各种性能优化技术.当您读完这本书,您应该可以对OpenGL ES 3.0API有一个很好的把握.您将可以轻松的写出让人新服的OpenGL ES 3.0的应用程序,并且您不必通过阅读多种OpenGL ES的规范来搞懂某个特性是如何工作的. OpenGL ES 3.0实现了可编程着色图形管道.OpenGL ES 3.0规范包含两

OpenGL ES 2.0基本概念

1. OpenGL ES 2.0可编程管道 OpenGL负责把三维空间中的对象通过投影.光栅化转换为二维图像,然后呈现到屏幕上. 上图黄色部分(Vertex Shader和Fragment Shader)为此管道的可编程部分.整个管道包含以下两个规范: 1) OpenGL ES 2.0 API specification 2) OpenGL ES Shading Language Specification (OpenGL ES SL) 详细流程图如下: 此流程把三维数据变换为可以显示的二维数据

OpenGL ES 2.0 渲染管线 学习笔记

图中展示整个OpenGL ES 2.0可编程管线 图中Vertex Shader和Fragment Shader 是可编程管线: Vertex Array/Buffer objects 顶点数据来源,这时渲染管线的顶点输入,通常使用 Buffer objects效率更好. Vertex Shader 顶点着色器通过矩阵变换位置.计算照明公式来生成逐顶点颜色已经生成或变换纹理坐标等基于顶点的操作. Primitive Assembly 图元装配经过着色器处理之后的顶点在图片装配阶段被装配为基本图元

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译)

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译) (2012-12-24 13:22:17) 转载▼ 标签: it cocos2d opengl 着色器 渲染 翻译:弹涂鱼 PS:欢迎加入开发群:285275050 本文翻译自:http://www.raywenderlich.com/10862/how-to-create-cool-effects-with-custom-shaders-in-opengl-es-2-0-and-cocos2d-2-x#

基于Cocos2d-x学习OpenGL ES 2.0系列——你的第一个三角形(1)

[本系列转自]http://cn.cocos2d-x.org/tutorial/lists?id=79 前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2d-x为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2d-x过程中,知其然,更知其所以然.本系列教程不会涉及非常底层的数学原理,同时也不会过多地提及OpenGL本身的一些细节知识.但是我会在每篇文章的最后给出一些参考链接,大家可以顺藤摸瓜,一举Get OpenGL这个新

基于Cocos2d-x学习OpenGL ES 2.0系列——使用VBO索引(4)

在上一篇文章中,我们介绍了uniform和模型-视图-投影变换,相信大家对于OpenGL ES 2.0应该有一点感觉了.在这篇文章中,我们不再画三角形了,改为画四边形.下篇教程,我们就可以画立方体了,到时候就是真3D了. 为什么三角形在OpenGL教程里面这么受欢迎呢?因为在OpenGL的世界里面,所有的几何体都可以用三角形组合出来.我们的四边形也一样,它可以用两个三角形组合出来. 你的第一个四边形 首先,因为OpenGL里面没有直接绘制四边形的命令的,所以我们需要画两个三角形来拼成一个四边形.

OpenGL ES 3.0 支持的设备和模拟器

最近自己写的引擎想要做OpenGL ES 3.0,因为现在市场大部分是是 OpenGL ES 2.0,首先要找一个支持OpenGL ES 3.0的设备或者模拟器,所以顺带着对市面上支持的设备做了一些调查. 1.支持OpenGL ES 3.0设备 IOS从IOS7以上版本开始支持ES 3.0 *IOS                             GPU                                       CPU (1) iphone 5s            

iOS下OpenGL ES 3.0编程入门(一):构建Hello World环境

OpenGL ES简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准. OpenGL ES 3.0主要新功能有: 1.渲染管线多重增强,实现先进视觉效果的加速,包括遮挡查询(Occlusion Query).变缓反馈(Transform Feedback)