安卓OpenGL ES 2.0 入门

通过学习《OpenGL ES应用开发实践指南》总结如何在安卓上创建一个OpenGL程序,并且在屏幕上绘制图案。

一、OpenGL管道

首先知道OpenGL在把本地内存中的数据绘制到屏幕所经历的步骤

这里写图片描述

  • Read Vertex Data:读取顶点数据
  • Execute Vertex Shader:执行顶点着色器

    顶点着色器:生成每个顶点的最终位置,每个顶点都会执行一次,一旦顶点的最终位置确定,OpenGL就把这些可见的顶点集合组装成点、线和三角形。

  • Assemble Primitives:组装图元

    图元:组成图像的基本单元

  • Rasterize Primitives:光栅化图元

    光栅化:即把每个点、直线及三角形分解成小片段

  • Execute Fragment Shader:执行片段着色器

    片段着色器:组成点、直线或者三角形的每个片段的最终颜色,针对每个片段,它都会执行一次,一个片段是一个小的、单一的长方形区域,类似于计算机屏幕上的一个像素

  • Write to Frame Buffer:写入帧缓冲区
  • See It on the Screen: 显示在屏幕上

上述过程描:
1. 先读取保存在内存的顶点数据;
2. 执行顶点着色器把顶点数据转化成为点、线或者三角形,并且确定在屏幕上的位置;
3. 之后为了确定这些点、线和三角形的颜色,而光栅化它们,即把它们分解成一个个的小片段
4. 执行片段着色器,确定每一个小片段的颜色
5. 确定完位置和颜色后,写入一个叫帧缓冲区的内存区域
6. 显示在屏幕上

二、创建程序

2.1 创建一个初始化OpenGL的实例

2.1.1 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.opengl.GLSurfaceView
        android:id="@+id/surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</FrameLayout>

2.1.2 初始化类

public class MainActivity extends AppCompatActivity{
   
     private GLSurfaceView mGLSurfaceView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mGLSurfaceView = (GLSurfaceView)findViewById(R.id.surface);

        //checking if the system supports OpenGL ES 2.0
        final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();

        final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000
                || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
                &&(Build.FINGERPRINT.startsWith("generic"))
                || Build.FINGERPRINT.startsWith("unknow")
                || Build.MODEL.contains("google_sdk")
                || Build.MODEL.contains("Emulator")
                || Build.MODEL.contains("Android SDK built for x86");

        if(supportsEs2){
            mGLSurfaceView.setEGLContextClientVersion(2);
            mGLSurfaceView.setRenderer(new MyRenderer());
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mGLSurfaceView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLSurfaceView.onResume();
    }
}
创建GLSurfaceView实例
setContentView(R.layout.activity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值