当前位置: 首页 > article >正文

Android OpenGLES2.0开发(二):环境搭建

世界没有悲剧和喜剧之分,如果你能从悲剧中走出来,那就是喜剧,如果你沉缅于喜剧之中,那它就是悲剧。——科马克·麦卡锡《路》 ​​​

OpenGL ES环境搭建

Android 应用中使用 OpenGL ES 绘制图形,必须创建一个显示容器。我们需要同时实现 GLSurfaceViewGLSurfaceView.Renderer接口。 GLSurfaceView 是使用 OpenGL 绘制图形的视图容器, GLSurfaceView.Renderer 用于控制该视图中绘制的内容。

1. 在清单中声明 OpenGL ES 的使用

在清单文件中声明使用OpenGL ES 2.0 API

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

2. 创建GLSurfaceView

public class EnvGLSurfaceView extends GLSurfaceView {

    private Context mContext;
    private MyGLRenderer mRenderer;

    public EnvGLSurfaceView(Context context) {
        super(context);
        init(context);
    }

    public EnvGLSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context) {
        mContext = context;
        // 创建OpenGL ES 2.0 context
        setEGLContextClientVersion(2);

        mRenderer = new MyGLRenderer();

        // 设置渲染器
        setRenderer(mRenderer);
        // 设置渲染模式:仅当图形数据发生更改时渲染视图
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
}

3. 创建渲染类Renderer

GLSurfaceView.Renderer 类(即渲染程序)的实现,他包含了三个接口

  • onSurfaceCreated:该方法中可以用来初始化数据等操作
  • onDrawFrame:该方法中编写我们要绘制的内容
  • onSurfaceChanged:当视图大小发生变化时,我们需要重新设置窗口大小
static class MyGLRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // 设置背景颜色为红色
        GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    }

    public void onDrawFrame(GL10 unused) {
        // 设置红色清屏
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    public void onSurfaceChanged(GL10 unused, int width, int height) {
    	// 修改OpenGL ES窗口大小
        GLES20.glViewport(0, 0, width, height);
    }
}

4. 添加布局显示

将我们定义的MyGLSurfaceView加入到布局中

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GLEnvActivity">

    <com.android.xz.opengldemo.view.EnvGLSurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

启动Activity显示界面如下:
Alt
恭喜你^_^你已经成功搭建好了OpenGL ES的开发环境,是不是很简单呢?我们将在接下来的章节中会详细介绍onDrawFrame中绘制各种图形图像

最后

本章节我们搭建了OpenGL ES的开发环境,GLSurfaceView实际上已经帮我们把OpenGL核心环境搭建完成,我们只需要实现渲染接口即可。如果你想更加自由的使用OpenGL ES,可以使用SurfaceView或者TextureView,但是需要您自行搭建EGL环境,请参考该篇文章,自行完整的搭建OpenGL ES环境:Android OpenGLES开发:EGL环境搭建


http://www.kler.cn/a/316670.html

相关文章:

  • 重构开发之道,Blackbox.AI为技术注入智能新动力
  • 4-6-2.C# 数据容器 - ArrayList 扩展(ArrayList 注意事项、ArrayList 存储对象的特性、ArrayList 与数组的转换)
  • 如何进行产线高阶能耗数据的计算和可视化?
  • 如何保护 Microsoft 网络免受中间人攻击
  • 缓存与数据库不一致的解决方案:深入理解与实践
  • 45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua
  • 付费电表系统的通用功能和应用过程参考模型(中)
  • GPT1-GPT3论文理解
  • 关于wordPress中的用户登录注册等问题
  • MySQL函数介绍--日期与时间函数(二)
  • react hooks--useMemo
  • linux文件IO 缓存,行缓存,三类读写函数,fprint,sprintf等
  • 计算机网络-小型综合网络的搭建涉及到无线路由交换安全
  • Qt C++,QByteArray读取一个超过2GB的文件,写一类封装一下
  • Windows 配置docker和ubuntu系统
  • css如何设置间距
  • 防火墙详解(一) 网络防火墙简介
  • 网络爬虫到底难在哪里?
  • 数据结构(十二)——栈(下)(面试题)
  • Informer模型复现项目实战
  • 数据库性能优化之分表
  • ollama 部署教程(window、linux)
  • 自定义类型
  • Redis五种基本数据结构的使用
  • ARM/Linux嵌入式面经(三四):CVTE
  • U盘格式化了怎么办?这4个工具能帮你恢复数据。