Android 深入系统完全讲解(21)

news2024/11/27 14:41:14

关键性 EGLSurface 代码位置

在这里插入图片描述
继续再看看,代码跑到 C 里面去了。

在这里插入图片描述
然后关键点:
在这里插入图片描述
获取本地窗口,创建 Surface,然后 toEGLHandle 进行包裹,变成 EGL 上下文。
EGLSurface 。 绘制的设计本质逻辑
在这里就回归一点,我们再聊下之前说的,绘制的本质就是屏幕的缓存区域,那个区域是自
动刷新,然后我们只需要把数据丢上去就可以。
但是,我们的界面,不可能只有一个界面,会有多个界面,所以上层不能共用一个缓存区域。
(当然最早的 功能机,使用的一个缓存区域,原因是内存不足)
所以,我们都会设计成,每个 Activity 都有一个画布,都对应一个缓存区域,上面的各种控
件,默认的常见控件,TextView 都画在这里。
然后底层会在每一帧完成后,进行合并,依据每个界面的上下级关系,透明度,大小进行合
并,然后推送到屏幕的缓存区域。
这样子就完成了整个设计。
而画布怎么画,我拿到的一个内存区域,该如何去画,需要工具,所以默认的包裹方式是
canvas,这个叫做画布。
然而这个画布的缺陷就是在主线程里面,如果大量绘制运算,势必不能在主线程,所以就出
现了 surfaceView,进行单独创建画布,可以使用 canvas。
同时这个 canvas 使用的是 CPU,在硬件里面还有个专门做图像运算的,做特效更快一些,
就是 GPU。
所以我们需要使用 GPU,这块就是 OpenGL 或者现在的 Vulkan。
下面我们看看一些框架,关于图形的一些介绍,后面我们会说下关于 GLSurfaceView ,这个专
门提供的 OpenGL VIew ,更加方便一些。

图形框架
在前面的讲解里面,大家熟悉了 Surface SurfaceHolder SurfaceView 以及普通 View 的绘制过
程。这 一 节 我 们 简 单 聊 一 些 组 件 , 概 念 , 这 块 参 考 官 网 。
https://source.android.google.cn/devices/graphics/architecture

在这里插入图片描述
然后上层主要就是 SurfaceView 和 GLSurfaceView 。像 TextureView ,SurfaceTexture 都是
可以去用。TextureView 会有 View 的一些特性,动画,可以使用 View 动画。
在这里,我们还是需要看一个信息,就是关于 SurfaceFlinger 和 WindowManager,我们看
下官方的解释。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

目录前言一、File.ReadAllLines参数返回例子二、File.ReadAllText参数返回例子注意事项可能出现的问题总结前言 最近在做文件存储以及读取的时候,需要用到C#给我们提供的类:File 具体使用方法可以看官方文档:C# File 类 这篇文章只会说File.…

深度学习基础理念(一)

文章目录1. 机器学习 Machine Learing机器学习类别2. 机器如何找函数深度学习输入类型和输出类型机器如何找函数的1. 机器学习 Machine Learing 什么是机器学习,顾名思义 机器 拥有会学习的能力,机器学习就是让机器具备能够找函数的能力 机器学习就是找…

【C语言课程设计】通讯录(1.0版本)

前言 相信各位对于通讯录都不是很陌生吧。通讯录我们在学校的大作业,课程设计经常会去使用它。那么今天我们将使用C语言来实现一个简单的通讯录。 目录 前言 一、通讯录的需求 二、工程文件的创建 三、通讯录的声明和定义 四、通讯录各函数的声明和定义 五、通…

Mysql入门技能树-数据查询-练习篇

SELECT 下列 SQL 语句,哪一项不合法? 答案是:C select now(),3.14 now() |3.14| ----------------------- 2023-01-16 16:47:04|3.14|MySQL查询表中所有的数据可以通过“SELECT * 通配符”或者“SELECT 所有字段”实现。 SE…

hadoop3.x源码编译及cmake的问题解决:CMake failed with error code 1

一、准备工作 基础环境:centos7 (1)官方源码中编译之前对基础环境及版本的要求(重点是红色部分) Requirements: * Unix System* JDK 1.8 * Maven 3.3 or later * ProtocolBuffer 2.5.0 * CMake 3.1 or newer (if com…

OSCP-Vulnhub靶机记录-Hacker_Kid-v1.0.1

Vulnhub靶机记录-Hacker_Kid-v1.0.1介绍&安装信息收集页面源代码DIG信息收集xxe漏洞探测9999端口SSTI模板注入发现具有Capabilities特殊操作权限的程序原理介绍&安装 靶机名称:Hacker_Kid-v1.0.1 靶机难度:中等 虚拟机环境:此靶机推…

【Linux】线程互斥

目录🌈前言🌸1、Linux线程互斥🍧1.1、线程间互斥相关背景概念🍨1.2、互斥量(锁)相关背景🍯1.3、互斥量(锁)相关API🍯1.3.1、初始化和销毁互斥锁🍰1.3.2、互斥量加锁和解锁🍲1.3.3、互…

Python爬虫403错误的解决方案

前言程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装,变成…

1.浮动float

提示:如果多一个盒子(都设置浮动,则它们会按照属性值一行内显示并且顶端对齐排列) 注意: 浮动的元素是互相贴靠在一起的,(没有缝隙),如果父级宽度装下这些浮动盒子&#…

MyBatis 详解 (2) -- 增删改操作

MyBatis 详解 2 -- 增删改操作前言一、准备工作1.1 创建数据库和表1.2 添加实体类1.3 添加 mapper 接口 (数据持久层)1.4 创建与接口对应的 xml 文件二、增加操作2.1 默认返回受影响的行数2.2 特殊的新增:返回自增 id三、删除操作四、修改操作五、实现完整交互5.1 添…

爆肝9万字,我已从小白晋升ARM嵌入式工程师!带你从零熟悉常用的M4嵌入式功能,建议收藏(含码源)

📚 前言 📑博客主页:丘比特惩罚陆 💖欢迎关注:点赞收藏⭐留言✒ 💬系列专栏:web前端、嵌入式、笔记专栏 🎮 加入社区: 丘比特惩罚陆 🥇人生格言:选…

【教学赛】金融数据分析赛题1:银行客户认购产品预测(0.9676)

本文是对天池教学赛,银行客户认购产品预测的记录,教学赛网址如下: 【教学赛】金融数据分析赛题1:银行客户认购产品预测_学习赛_天池大赛-阿里云天池 1. 读取数据 import pandas as pd# 加载数据 train pd.read_csv(train.csv) …

P5587 打字练习————C++

题目 打字练习 题目描述 R 君在练习打字。 有这样一个打字练习网站,给定一个范文和输入框,会根据你的输入计算准确率和打字速度。可以输入的字符有小写字母、空格和 .(英文句号),输入字符后,光标也会跟…

c语言小练pintia11-20

11.计算平均分已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。输入格式:本题无输入输出格式:按照下列格式输出结果:math 87, eng 72, com…

深耕地市区县市场,新华三智行中国走新路

2022年就这样结束了,但是企业数字化的进程从未结束。回顾这一年,对于任何企业而言,数字化优先的战略仍然在继续。不仅如此,数字化走向地市区县市场,带来了更多的机遇和发展,让我们看到了中国的数字经济还有…

Flurry iOS端调研和使用

Flurry iOS端调研使用 flurry官方资料较少,且只有英文文档没有代码demo。公司项目确定要用Flurry,所以深入调研,顺便记录过程。有需要的小伙伴也可以顺便参考 一.创建应用拿api_key 官网:https://www.flurry.com/ 用邮箱去官网…

【目标检测】55、YOLOv8 | YOLOv5 团队 Ultralytics 再次出手,又实现了 SOTA

文章目录一、YOLO 系列算法的简单回顾二、YOLOv8 简介2.1 安装和简单使用2.2 Ultralytics HUB2.2.1 Upload Dataset2.3 YOLOv8 主要改动三、YOLOv8 细节详述论文:暂无 官方文档:https://docs.ultralytics.com/ 代码:https://github.com/ult…

【算法数据结构初阶篇】:链表问题

一、反转单双链表 一、数据结构图 二、代码演示 public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int value;public DoubleNode last;public …

Spring Cloud Gateway从注册中心自动注册配置路由信息

环境信息Spring Boot:2.0.8.RELEASESpring Boot内置的tomcat:tomcat-embed-core 8.5.37Spring Cloud Gateway:2.0.4.RELEASENacos:2.0.4.RELEASE需求Spring Cloud Gateway注册到注册中心(这里是Nacos,其它注…

Spring学习系列(二)

Spring_特殊值的注入问题和各种类型的自动装配1.set两种方式的区别第4中赋值方式:自动装配(只适用于ref类型)使用注解定义bean1.set两种方式的区别 (1)把值写到value属性里面,必须加引号,写到子…