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. Mysql数据库之调整最大连接数

    .查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_connections = 200; 以下的文章主 ...

  2. vue - 过滤器-钩子函数路由

    一.关于路由 1.使用vue router 本质上是声明一种可以通过路径进行 挂子,用子 找到对应的 template 进行页面渲染 <!DOCTYPE html> <html la ...

  3. vuex中mapGetters的使用及简单实现原理

    一.项目中的mapGetters在Vue项目的开发过程中必然会使用到vuex,对vue项目公用数据进行管理,从而解决组件之间数据相互通信的问题,如果不使用vuex,那么一些非父子组件之间的数据通信将会 ...

  4. I2C协议简介

    主从芯片如何传输数据 AT24C02是一个存储芯片,需要把数据从ARM板发给AT24C02,也需要从AT24C02读取数据. I2C是一个主从结构,Master发起传输,slave接收或回应 一主多从 ...

  5. plv8 require 模块试用

    plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...

  6. 10-day03-注释

    Python注释 msg = “我爱你中国!” #单行注释使用 ''''''多行注释使用 print(msg) #this code is for >>>> ‘’‘print( ...

  7. postman使用--Monitor

    前戏 现在我们已经能完成接口的批量执行,添加断言,数据驱动,设置变量等等方法.但是有一天,用户反应说我们的网站访问不了了.这时候,那帮程序猿查日志的查日志,看数据库的看数据库,找到原因在发布到线上已经 ...

  8. B1003

    import re n = input() for i in range(int(n)): str = input() if re.match(r'A*PA+TA*',str): a = re.spl ...

  9. 设置 npm 源为淘宝镜像

    淘宝 npm 网址 https://npm.taobao.org/ 修改 npm config set registry http://registry.npm.taobao.org/ 还原 npm ...

  10. SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器

    191213-SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器 我们知道在 spring 中可以通过@Component,@Service, @Repository 装饰 ...