anroid OpenGL ES之 向shader传递数据

void glUseProgram( int program );

glUseProgram()真正载入着色器程序到我们的程序中在这之后我们就可以向shader中传递数据了

int glGetAttribLocation( int program, String name );

向shader中的Attribute变量或者Uniform变量传递数据,首先要知道其在内存中的位置。glGetAttribLocation()得到属性的位置。program参数是程序的句柄,name参数是shader程序中变量的名称

void glVertexAttribPointer(int index, int size, int type, boolean normalized, int stride, int offset)

glVertexAttribPointer可以向Attribute变量传递数据。参数index是变量位置参数size, 1 for float; 2 for vec2; 3 for vec3参数type,可选 GLES20.GL_FLOAT GLES20.GL_INT参数normalized,为true,则把数据按比例缩小到-1~1

int glGetUniformLocation( int program, String name );

glGetUniformLocation获得Uniform变量在内存中的位置

void glUniform1f( int location, float x );

glUniform1f向Uniform变量传递数据

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 03:50:32

anroid OpenGL ES之 向shader传递数据的相关文章

android OpenGL ES开发之shader

shader是OpenGL ES中重要内容. 简介 shader程序是运行在GPU上的程序,是用GLSL语言编写的程序. 功能 使用OpenGL的着色器,可以丰富渲染效果,能实现的功能包括: (1) 更加真实的材质-金属.石头.木头等 (2) 更加真实的光照效果-区域光照.柔和阴影等 (3) 自然现象-火.烟.水.云等 (4) 高级渲染效果-全局光照.光线追踪器等 (5) 非照片级材质-绘画效果.笔写效果等 (6) 纹理内存新的一些用途-向量的存储.模糊值.多项式系数等 (7) 过程纹理-动态生

基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)

Cocos2d-x底层图形绘制是使用OpenGL ES协议的.OpenGL ES是什么呢? OpenGL ES(OpenGl for Embedded System)是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准.OpenGL ES是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.Cocos2d-x底层图形渲染使

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)

OpenGL ES着色语言-光照效果之散射光

OpenGL光照模型,在固定管线中,主要是调用OpenGL函数实现,如果使用着色器,该怎么实现.本文的例子是移植OpenGL 4.0 Shading Language Cookbook中第二章的例子.代码已经移植到Android上. 散射光计算主要涉及到两个向量,第一个是顶点到光源的向量S,以及顶点处的法向量N.光照计算在眼睛坐标中进行.具体见下图所示: 有这两个向量之后,还要考虑顶点处的漫反射系数以及光源强度,最终顶点处的光照强度的结果可以通过下列公式计算: Ld为光源强度,Kd为漫反射系数.

[转] iOS OpenGL ES Guide

OpenGL ES 小结 概述 OpenGL ES (Open Graphics Library for Embedded Systems)是访问类似 iPhone 和 iPad 的现代嵌入式系统的 2D 和 3D 图形加速硬件的标准. 把程序提供的几何数据转换为屏幕上的图像的过程叫做渲染. GPU 控制的缓存是高效渲染的关键.容纳几何数据的缓存定义了要渲染的点.线段和三角形. OpenGL ES 3D 的默认坐标系.顶点和矢量为几何数据的描述提供了数学基础. 渲染的结果通常保存在帧缓存中.有两

OpenGL ES为缓存提供数据的7个步骤

OpenGL ES为缓存提供数据的7个步骤: 1.生成glGenBuffers()——请求OpenGL ES为图形处理器控制的缓存生成一个独一无二的标识符. 2.绑定glBindBuffer()——告诉OpenGL ES为接下来的运算使用一个缓存. 3.缓冲数据glBufferData()或glBufferSubData()——让OpenGL ES为当前绑定的缓存分配病初始化足够的连续内存(通常是从CPU控制的内存复制数据到分配的内存). 4.启用或者禁止glEnableVertexAttrib

基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)

在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时,我们还会介绍VBO(顶点缓冲区对象)和VAO(顶点数组对象)的基本用法. 在编写自己的shader之前,我觉得有必要提一下OpenGL渲染管线. 理解OpenGL渲染管线,对于学习OpenGL非常重要.下面是OpenGL渲染管线的示意图:(图中淡蓝色区域是可以编程的阶段) 此图是从wiki中拿过来的

Mali GPU OpenGL ES 应用性能优化--基本方法

1. 常用优化工具 2. 常用优化方案 OpenGL ES优化的主要工作是在图形管道中找到影响性能的bottleneck,其bottleneck一般表现在以下几方面: ? 在应用程序代码中,如冲突检测     ? GPU与主内存间的数据传输     ? 在VP(Vertex Processor)中的顶点处理     ? 在FP(Fragment Processor)中的片断处理 可通过DS-5 Streamline来定位性能瓶颈(Locate bottleneck).为了获取更好的性能,可从以下

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

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