OpenGL ES 学习初识(1)

1.认识OpenGL ES

OpenGL是跨平台2D/3D图形API,而OpenGL ES是在前者基础上扩展的版本,适用于手机等嵌入式设备。具有以下版本:

版本 解释
OpenGL ES 1.0 2003年发布
OpenGL ES 1.1 支持了多纹理,顶点缓冲对象等
OpenGL ES 2.0 2007年发布,基于OpenGL 2.0,删除了1.x中的固定管线(pipeline),提供可编程的管线
OpenGL ES 3.0 2012年发布,向后兼容2.x
OpenGL ES 3.1 2014年发布
OpenGL ES 3.2 2015年发布

OpenGL ES 1.x 和OpenGL ES2.0不兼容的,是完全两种不同的实现。

  • OpenGL EX 1.x仅支持固定管线渲染,可以固件支持或软件模拟,但渲染能力有限。

  • OpenGL EX 2.X采用可编程的渲染管线,提高了渲染能力。但编程难度也提高了,且要求设备中必须有对应GPU硬件支持。
    图源Android3D游戏开发技术宝典图源Android3D游戏开发技术宝典
    上面图3-16和图3-21分别是OpenGL 1.x和OpenGL 2.x渲染管线过程示意图。

  • “变换和光照”---->“顶点着色器”

  • “纹理环境和颜色求和”、“雾”、“Alpha测速”---->“片元着色器”

本系列文章将主要介绍OpenGL ES2.x

2.初识OpenGL ES2.x程序面貌

在认识了OpenGL ES基础后,下面直接带来一个入门级Demo(本程序官网也有类似的可以学习)。代码中添加了注释,可以更好帮助入门学习。

2.1 效果图

在这里插入图片描述

2.2 工具类ShaderUtil.java

public class ShaderUtil {
    private static final String TAG = "ShaderUtil";

    /**
     * 加载着色器编码进GPU并编译
     *
     * @param shaderType 着色器类型
     * @param source     着色器脚本字符串
     * @return
     */
    public static int loadShader(int shaderType, String source) {
        int shader = GLES20.glCreateShader(shaderType);
        if (shader != 0) {
            GLES20.glShaderSource(shader, source);
            GLES20.glCompileShader(shader);
            int[] compiled = new int[1];
            GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
            if (compiled[0] == 0) {
                Log.e(TAG, "loadShader: ES20_ERROR,Could not compile shader " + shaderType + ";");
                Log.e(TAG, "loadShader: ES20_ERROR,shader = " + GLES20.glGetShaderInfoLog(shader));
                GLES20.glDeleteShader(shader);
                shader = 0;
            }
        }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值