准备工作

工具安装

  • jdk安装

  • sdk安装

  • IDE开发环境

  • 一个手机

    推荐使用真机,它可以反映真实的性能和结果。

    虚拟机创建

    • Android SDK 执行SDK Manager.exe

    • Tools--> Manage AVDS

    • new

    GLSurfaceView

  • 他是一个特殊的类初始化OpenGL,可以处理OpenGLES的基本操作,,渲染器可以在一个称为surface的里面完成。渲染是在一个“surface”的特定区域中完成的,也就是视口。

  • 它可以轻松的管理声明周期。

  • GLSurfaceView是没有动画和特效的。可以使用TextView,TextView可以通过GLSurfaceView转换.或者直接使用TextView。

    回顾声明周期

    create:创建 destroy:销毁 pause:暂停 resume:回来继续。

创建程序

1.创建一个项目

2.初始化OpenGL

  • 使用一个特殊的类GKSurfaceView进行初始化,他会初始化比较基本的操作

  • GLSurfaceView类也可以使用activity的生命周期方法。

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

在MainActivity中引入GLSurfaceView

//引入一个gLSurfaceView
private GLSurfaceView gLSurfaceView;
//设置GLSurfaceView的状态
private boolean renderSet = false;

我们去掉本身的setContentView,初始化GLSurfaceView。

下来需要在生命周期中初始化GLSurfaceView对象。

glSurfaceView = new GLSurfaceView(this);

下来为了可以使用GLSurfaceView,或者是否支持,进行判断,是否支持使用GLSurfaceView,并设置它使用的版本号。

  • 首先获得activityManager通过service获得。

  • 得到相关的配置信息。

  • 判断GLES的版本是否大于2.

  • 然后设置使用的版本【这个版本可以在配置中设置】

  • 就可以使用渲染器进行渲染了。

final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion>=0x20000;

根据supportsEs2的返回值得出是否支持OpenGLEs,如果支持设置版本,这个可以在配置文件中设置。

if(supportsEs2) {
gLSurfaceView.setEGLContextClientVersion(2);
renderSet=true;
}else {
Toast.makeText(this, "不支持", Toast.LENGTH_LONG).show();
return ;
}

并且设置OpenGlES标志位。

GLSurfaceView基本设置完毕,下来设置Renderer类,通过gLSurface.setRender新实例。通过标志参数可以在知道,renderer已经设置过了。下来如果发生改变,或者是启动,那么这个渲染器就会被调用。

gLSurfaceView.setRenderer(new MyRenderer());

将GLsurfaceView设置到activity中去。

setContentView(gLSurfaceView); 以上步骤已经将GL设置完毕,并且将渲染器也设置完成,下来讲GL输出到屏幕上。

2、我们需要设置生命周期,否则会出现崩溃或者程序无法运行。它才可以在后台继续渲染或者是正常停止。

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
gLSurfaceView.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
gLSurfaceView.onResume();
}

上面代码可以正常执行,主要因为是它也可以支持声明周期的缘故。其实在这里我们为了保险起见,我们可以进行判断,判断之后在执行声明周期操作。


创建Renderer

创建一个渲染器,渲染器的创建有三个方法。

- 绘制时
- 一定会绘制 即使是空屏幕
- 因为缓存区会被交换,并显示 如果没有数据显示。那么将会出现闪锁
- 这个就是每次都会执行,每画一阵就会执行一次。
@Override
public void onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
}
- 屏幕尺寸发生变化的时候   横竖屏切换
@Override
public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
- 创建一定会执行  
- 设备唤醒,或者其他的activity跳转过来的时候,可能会执行,执行声明周期的时候会执行。
- 被调用多次
@Override
public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
// TODO Auto-generated method stub
}

方法使用:

设置清空屏幕的颜色

public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
// TODO Auto-generated method stub
glClearColor(1.0f,1.0f,1.0f,1.0f);
}

设置窗口的大小 视口,也就是每次显示的时候显示窗口的大小。

@Override
public void onSurfaceChanged(GL10 arg0, int width, int height) {
// TODO Auto-generated method stub
glViewport(0,0,width,height);
}

将屏幕清空,并将之前的颜色填充进来。

    @Override
public void onDrawFrame(GL10 arg0) {
// TODO Auto-generated method stub
glClear(GL_COLOR_BUFFER_BIT);
}

GLSurfaceView是一个线程来渲染的,在主线程中只做一个调用,默认会以刷新频率进行刷新不断渲染。

上面主要介绍了GLSurfaceView在java中连接java程序和OpenGLes的使用,GLSurfaceView设置渲染器,通过渲染器进行页面属性的设置。

错误方法

​ 在顶点和片段着色器中,向GPU着色程序或者片段着色器,由于在开发者色器脚本文件中国的代码,没有一个实时地编译个运行的差错,所以写一个检查方法。


做了什么??

1.安装环境

2.为后面做准备,创建一个简单的案例

3.渲染的基本步骤。

openGLES(一)的更多相关文章

  1. iOS给图片添加滤镜&使用openGLES动态渲染图片

    给图片增加滤镜有这两种方式: CoreImage / openGLES 下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤: #1.导入CIImage格式的原始图片 #2.创建CIF ...

  2. KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2796 上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的Op ...

  3. OpenGLES入门笔记二

    #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> #import <OpenGLES/ES2/gl.h& ...

  4. OpenGLES入门笔记一

    学习地址:http://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0 中文翻译:http://www.cnblogs ...

  5. Opengles 管线编程介绍

      OpenGL ES 2.0可编程管道 上图橙色部分(Vertex Shader和Fragment Shader)为此管道的可编程部分.整个管道包含以下两个规范: 1)         OpenGL ...

  6. [ios][opengles]GLKit如何搭一个app的框架

    一个外文对GLKit的讲解: Beginning OpenGL ES 2.0 with GLKit Part 1    英文原文链接:http://www.raywenderlich.com/5223 ...

  7. UIKit,Core Data , Core Graphics, Core Animation,和OpenGLES框架

    iOS的主要框架介绍   框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. IOS提供了很多你可以在应用程序 ...

  8. 广州麒麟网络工作室 qlgame eninge(anroid) opengles c++ matrix

    在opengles中,采用的是可编程渲染管线,矩阵需要自己实现! 先说一下矩阵的理论: 参考一下资料:http://blog.sina.com.cn/s/blog_6084f588010192ug.h ...

  9. OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的!

    OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...

  10. 【转】emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so

    [转]emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so ./emulator64-arm ...

随机推荐

  1. jython awt demo

    jython awt demo : """\ Create a panel showing all of the colors defined in the pawt.c ...

  2. 手把手教你在VMware虚拟机中安装Ubuntu14.04系统

    在VMware中创建完虚拟机之后,一般需要给虚拟机安装系统,比较受青睐的系统有Ubuntu和Centos,关于Centos系统的安装之前已经写过了,感兴趣的小伙伴可以戳这篇文章:靠谱的centos7. ...

  3. 学习NLP:《精通Python自然语言处理》中文PDF+英文PDF+代码

    自然语言处理是计算语言学和人工智能之中与人机交互相关的领域之一. 推荐学习自然语言处理的一本综合学习指南<精通Python自然语言处理>,介绍了如何用Python实现各种NLP任务,以帮助 ...

  4. K-近邻算法学习

    # -- coding: utf-8 -- from numpy import * import operator def createDataSet(): group = array([[1.0,1 ...

  5. Android Developer:内存分析器

    Heap Viewer,Memory Monitor和Allocation Tracker是用来可视化你的app使用内存的补充工具. 使用Memory Monitor Tool来发现是否有不好的内存回 ...

  6. sdut 2805(最小生成树)

    大家快来A水题 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 (1<= N <=2000)(1<= M <= N*(N-1)/2 ...

  7. jquery2.0.3 全部源码

    /*! * Includes Sizzle.js 选择器,独立的库 * http://sizzlejs.com/ */ (function( window, undefined ) { //" ...

  8. Kinect 开发 —— 常见手势识别(下)

    划动(Swipe) 划动手势和挥手(wave)手势类似.识别划动手势需要不断的跟踪用户手部运动,并保持当前手的位置之前的手的位置.因为手势有一个速度阈值,我们需要追踪手运动的时间以及在三维空间中的坐标 ...

  9. jQuery对象与js对象转换

    前言 jq方法和js的方法属性是不能互相使用的,所以有时候就需要转一下,下面就介绍下方法. js对象转化为jQuery对象 var box=document.getElementById(" ...

  10. LuoguP2765 魔术球问题(最大流)

    题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...