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

android 异屏同显二.

android主屏:                                                                                android副屏

        |                                                                                                        |

mediaProjection ----SufaceTextrue ---OpenGL---------    Activity               

GraphicBuffer 和 Fence 是 Android 中用于处理图形缓冲区和同步操作的重要类。下面,我将为你提供一个简单的介绍和使用示例。

   

GraphicBuffer

GraphicBuffer 类用于表示一个图形缓冲区,它可以被多个图形组件(例如 Surface 或 GLTexture)共享。GraphicBuffer 的主要用途是将图形数据传输到 GPU 进行渲染。

使用示例

假设你需要创建一个 GraphicBuffer 对象并将其内容渲染到一个 SurfaceView 上:

import android.graphics.GraphicBuffer;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.SurfaceView;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private GraphicBuffer graphicBuffer;private SurfaceView surfaceView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);surfaceView = findViewById(R.id.surfaceView);// 创建一个 GraphicBufferint width = 800;int height = 600;graphicBuffer = GraphicBuffer.create(width, height, PixelFormat.RGBA_8888,GraphicBuffer.USAGE_HW_TEXTURE | GraphicBuffer.USAGE_HW_RENDER);// 使用 graphicBuffer 进行渲染的代码(示例中未详细实现)renderToSurfaceView();}private void renderToSurfaceView() {// 获取 SurfaceView 的 SurfaceSurface surface = surfaceView.getHolder().getSurface();// 在 Surface 上进行渲染// 这里你可以使用 OpenGL 或其他图形库进行渲染}@Overrideprotected void onDestroy() {super.onDestroy();if (graphicBuffer != null) {graphicBuffer.destroy();}}
}

在上述示例中,GraphicBuffer 被创建为一个宽度为 800 像素,高度为 600 像素,格式为 RGBA_8888 的缓冲区。使用 GraphicBuffer.USAGE_HW_TEXTURE | GraphicBuffer.USAGE_HW_RENDER 表示该缓冲区可用于硬件纹理和渲染。

Fence

Fence 类用于同步 GPU 和 CPU 之间的操作。它允许你在 GPU 完成某些操作之前阻止 CPU 继续执行,确保同步操作的正确性。

 

使用示例

假设你需要在 GPU 完成某些渲染操作后再进行下一步操作:

import android.os.Bundle;
import android.view.Surface;
import android.view.SurfaceView;
import android.graphics.GraphicBuffer;
import android.graphics.PixelFormat;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private GraphicBuffer graphicBuffer;private SurfaceView surfaceView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);surfaceView = findViewById(R.id.surfaceView);// 创建一个 GraphicBufferint width = 800;int height = 600;graphicBuffer = GraphicBuffer.create(width, height, PixelFormat.RGBA_8888,GraphicBuffer.USAGE_HW_TEXTURE | GraphicBuffer.USAGE_HW_RENDER);// 使用 GraphicBuffer 进行渲染renderToSurfaceView();}private void renderToSurfaceView() {// 获取 SurfaceView 的 SurfaceSurface surface = surfaceView.getHolder().getSurface();// 在 Surface 上进行渲染(简化示例)// 创建一个同步 Fenceint fenceFd = nativeCreateFence();Fence fence = new Fence(fenceFd);// 等待 Fence 信号fence.await();}@Overrideprotected void onDestroy() {super.onDestroy();if (graphicBuffer != null) {graphicBuffer.destroy();}}// 本地方法,用于创建同步 Fence(此处需要你实现具体的本地代码)private native int nativeCreateFence();
}

     

在上述示例中,nativeCreateFence 是一个本地方法,它应该调用底层的图形库来创建一个 Fence 对象。在渲染完成后,Fence 对象将用于等待 GPU 完成渲染操作。

总结

  • GraphicBuffer 用于管理图形缓冲区,可以被多个图形组件共享。
  • Fence 用于同步 GPU 和 CPU 之间的操作,确保 GPU 完成任务后再继续执行 CPU 操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 方差,标准差,CPK指标数据分析 (使用SQL做数据分析)
  • Mongodb使用$<identifier>过滤更新数组元素
  • 高通Android开关机动画踩坑简单记录
  • 【QT】QSettings读取中文乱码
  • 小程序外卖开发中的关键技术与实现方法
  • Android WebSocket长连接的实现
  • winhttp劫持dll
  • 文字悬停效果
  • PCIE的吞吐量如何计算和记忆诀窍?
  • Calibre版图验证工具调用_笔记
  • 下载kibana-7.10.2教程
  • 恭喜!X医生斩获英国伦敦大学学院访问学者邀请函
  • Java工程师入职指南:从准备到适应新工作的每一步
  • [Python学习篇] Python运算符
  • GStreamer编译安装——使用Meson从源代码编译
  • 深入了解以太坊
  • 自己简单写的 事件订阅机制
  • 08.Android之View事件问题
  • co模块的前端实现
  • ES2017异步函数现已正式可用
  • golang 发送GET和POST示例
  • Laravel 实践之路: 数据库迁移与数据填充
  • mysql 5.6 原生Online DDL解析
  • Vue.js 移动端适配之 vw 解决方案
  • XForms - 更强大的Form
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 使用agvtool更改app version/build
  • 通信类
  • 王永庆:技术创新改变教育未来
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Android开发者必备:推荐一款助力开发的开源APP
  • HanLP分词命名实体提取详解
  • 如何用纯 CSS 创作一个货车 loader
  • ​比特币大跌的 2 个原因
  • #565. 查找之大编号
  • (day 12)JavaScript学习笔记(数组3)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (k8s中)docker netty OOM问题记录
  • (SpringBoot)第二章:Spring创建和使用
  • (多级缓存)多级缓存
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二十四)Flask之flask-session组件
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十六)Flask之蓝图
  • (十三)MipMap
  • (十一)手动添加用户和文件的特殊权限
  • (四)鸿鹄云架构一服务注册中心
  • (转) Android中ViewStub组件使用
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .dwp和.webpart的区别
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 托管代码与非托管代码