Unity AsyncGPUReadback 接口测试
Unity2018新加入了该接口,可以做到异步RenderTexture->像素数据和异步的ComputeBuffer.GetData
那么写了几个例子来测试下。
1.RenderTexture->Texture2D
异步:
IEnumerator Start()
{
var rt = new RenderTexture(, , );
//Graphics.xxx...
var req = AsyncGPUReadback.Request(rt);
yield return new WaitUntil(() => req.done); var tex = new Texture2D(, , TextureFormat.RGBA32, false);
var colorArray = req.GetData<Color32>().ToArray();
tex.SetPixels32(colorArray);
tex.Apply();
}
同步:
RenderTexture.active = rt;
var tex = new Texture2D(, , TextureFormat.RGBA32, false);
tex.ReadPixels(new Rect(, , , ), , , false);
tex.Apply();
2.AsyncGPUReadback GetData
cs:
#pragma kernel CSMain struct TestData
{
float3 pos;
};
RWStructuredBuffer<TestData> MyData; [numthreads(,,)]
void CSMain (uint3 id : SV_DispatchThreadID)
{
MyData[id.x].pos = MyData[id.x].pos * ;
}
异步:
public class ComputeShaderAsyncRequest : MonoBehaviour
{
public struct TestData
{
public Vector3 pos;
}
public ComputeShader computeShader; IEnumerator Start()
{
var kernelID = computeShader.FindKernel("CSMain"); var testData = new List<TestData>();
for (int i = ; i < ; i++)
testData.Add(new TestData() { pos = new Vector3(i, , ) }); var computeBuffer = new ComputeBuffer(testData.Count, );
computeBuffer.SetData(testData);
computeShader.SetBuffer(kernelID, "MyData", computeBuffer);
computeShader.Dispatch(kernelID, , , );
var request = AsyncGPUReadback.Request(computeBuffer);
Debug.Log("frame1: " + Time.frameCount);//
yield return new WaitUntil(() => request.done);
Debug.Log("frame2: " + Time.frameCount);// var testDataArray = request.GetData<TestData>().ToArray();
for (int i = ; i < testDataArray.Length; i++)
Debug.Log("i :" + i + "item: " + testDataArray[i].pos);
}
}
同步:
public class ComputeShaderAsyncRequest_Sync : MonoBehaviour
{
public struct TestData
{
public Vector3 pos;
} public ComputeShader computeShader; void Start()
{
var kernelID = computeShader.FindKernel("CSMain"); var testData = new List<TestData>();
for (int i = ; i < ; i++)
testData.Add(new TestData() { pos = new Vector3(i, , ) }); var computeBuffer = new ComputeBuffer(testData.Count, );
computeBuffer.SetData(testData);
computeShader.SetBuffer(kernelID, "MyData", computeBuffer);
computeShader.Dispatch(kernelID, , , );
var array = new TestData[testData.Count];
computeBuffer.GetData(array);
for (int i = ; i < array.Length; i++)
Debug.Log("i :" + i + "item: " + array[i].pos);
}
}
Unity AsyncGPUReadback 接口测试的更多相关文章
- "Unity测试系列"文章索引
对Unity各种API的细节进行测试 Common 一些Unity基础操作的性能测试 Animation/Animator Animation Play/Stop测试 关于Animation动画事件的 ...
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 聊聊Unity项目管理的那些事:Git-flow和Unity
0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件
系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入
系列目录 前言: 有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选 本节记录Asp.net MVC WebApi怎么利用Unity注入.系列开头已 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
随机推荐
- centos7下安装docker 以及简单使用
一 环境准备1.虚拟机or物理机 2.centos7系统(稳定,对docker支持友好) 二 安装过程step1:使用yum命令进行安装 yum install -y docker备注:-y 表示不询 ...
- 《Exception团队》第三次作业:团队项目的原型设计
一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 学习原型设计过程以及工具的使用 二.原型设计细 ...
- el获取对象属性大小写问题
当el表达式首字母大写,会判断第二个字母大小写,小写,抛异常:大写,则直接拼接get,形成getter方法 当el表达式首字母小写,会判断第二个字母大小写,大写,必须第一个字母大写:否则无法获取值 e ...
- java spring框架的定时任务
由于测试的原因,最近有接触java spring @Scheduled的定时任务,当时还以为配置起来表达式和crontab是完全一样的,没想到还有些许不一样. 在spring中,一个cron表达式至 ...
- java GC jvm 内存分布 和新生代,老年代,永久代,(详细)
如果大家想深入的了解JVM,可以读读周志明<深入理解Java虚拟机:JVM高级特性与最佳实践> 需要掌握的东西,包括以下内容.判断对象存活还是死亡的算法(引用计数算法.可达性分析算法).常 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(WIFI模块AT指令TCP透传方式),定时访问升级
前言 学习此代码所需: 实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说 ...
- 洛谷 P1508
P1508 所属知识点:DP 主要题意: 就是求一个矩阵从下边走到上边,可以走自己前方或左前方或右前方. 问走到上边一共经过的路径和. 类型题:P1216 解题思路: 参考上边的类型题(因为比较简单) ...
- ORA-01950:对表空间“”XXXX”无权限,解决办法
上图报错 解决方案比如你要在用户(或SCHEMA)usera中建表,那么你用SYSTEM登录ORACLE后,执行如下SQL : ALTER USER 用户名 QUOTA UNLIMITED ON 表空 ...
- Scala 在挖财的应用实践
编者按:本文是根据ArchSummit 大会上挖财资深架构师王宏江的演讲<Scala 在挖财的应用实践>整理而成. 这次分享有三个方面,一是介绍一下挖财当前的开发情况和后端的架构, 二是挖 ...
- Win10,Anaconda,tensorflow-gpu安装教程
,参考于:https://www.cnblogs.com/guoyaohua/p/9265268.html 目录 前言 第一步:安装Anaconda 1.下载和安装 2.配置Anaconda环境变量 ...