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 接口测试的更多相关文章

  1. "Unity测试系列"文章索引

    对Unity各种API的细节进行测试 Common 一些Unity基础操作的性能测试 Animation/Animator Animation Play/Stop测试 关于Animation动画事件的 ...

  2. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  3. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  4. Unity游戏内版本更新

    最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...

  5. Unity 序列化

    Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...

  6. Unity 序列化 总结

    查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件

    系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入

    系列目录 前言: 有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选 本节记录Asp.net MVC WebApi怎么利用Unity注入.系列开头已 ...

  9. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

随机推荐

  1. 如何将MultipartFile转换成based4

    public String test(MultipartFile file) throws Exception{ BASE64Encoder base64Encoder =new BASE64Enco ...

  2. yandexbot ip列表整理做俄罗斯市场的站长可以关注一下

    这段时间ytkah在负责一个客户的网站,主要做俄罗斯市场,当然是要研究Yandex了,首先是要知道yandexbot的ip有哪些,本文通过分析这个站从2018.12.02到2019.05.21这段时间 ...

  3. 码云因为认证失败导致推送失败 生成 SSH 密钥对

  4. css字体名称中英文对照表

    华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 俪黑 Pro:LiHei Pro ...

  5. XIX Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia, Division 1.

    A 签到. C 源点向每个软件连边.把每个软件拆成对应版本数个点,每个软件向版本连边.把每个conflict也看成一个点.每个版本向它对应的conflict连边,conflict向汇点连边.没有在co ...

  6. IComparable<T>.CompareTo(T) 方法

    IComparable<T>.CompareTo(T) 方法 定义 命名空间: System 程序集: System.Runtime.dll, mscorlib.dll, netstand ...

  7. ubunt 文件permission denied问题的解决

    在linux系统使用过程中,升级python到3.6以后,执行pip命令,遇到permission denied问题,系统显示如下: -bash: /home/www/my_flask/venv/bi ...

  8. Python实现终端FTP文件传输

    实现终端FTP文件传输 代码结构: .├── client.py├── readme.txt└── server.py 运行截图: readme.txt tftp文件服务器 项目功能: * 客户端有简 ...

  9. 刷题记录and日记

  10. 深入js系列-类型(显式强制转换)

    什么是显式 这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是"显式",相反你不知道的话,对你就是"隐式" 抽象操作 字符串.数字. ...