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. rollup入门

    作为js程序员,掌握rollup是必要的. 有了webpack后,为什么还要用rollup, 因为webpack不专业,webpack是打包一切. rollup只为打包js而生. rollup通过的五 ...

  2. 让Linux中的Nginx支持中文文件名

    原文:https://blog.csdn.net/soeben/article/details/79525964 首先你的服务器需要安装了UTF-8字符集在命令行里输入env|grep LANG如果显 ...

  3. python 使用sort 对列表排序的性能测试

    首先对一百万数据进行排序: 对一千万数据进行排序: 对一亿数据进行排序:

  4. 2019徐州网络赛H :function (min25筛)

    题意:f(i)=i的幂次之和. 求(N+1-i)*f(i)之和. 思路:可以推论得对于一个素数p^k,其贡献是ans=(N+1)[N/(P^k)]+P^k(1+2+3...N/(P^k)); 我们分两 ...

  5. 18-C#笔记-继承

    1. 子类可以使用父类的成员和函数. 和C++不同,使用的是一个冒号 2. 不支持多重继承 但是可以通过接口(interface)这种结构实现.后续讲解. using System; namespac ...

  6. Python实战之ATM+购物车

    ATM + 购物车 需求分析 ''' - 额度 15000或自定义 - 实现购物商城,买东西加入 购物车,调用信用卡接口结账 - 可以提现,手续费5% - 支持多账户登录 - 支持账户间转账 - 记录 ...

  7. hadoop 参数大全

    方法一.可以通过hadoop官方网址查询, 网址如下: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ ...

  8. PDB files out of the debugger

    我想我不需要强调在调试时拥有有效的PDB文件有多重要.通常,PDB文件是由调试器静默加载的,并且您很高兴在modules窗口中看到解析的所有符号.不幸的是,您还可能遇到调试器找不到匹配符号的情况.其原 ...

  9. Codeforces886(Technocup2018) F Symmetric Projections

    Codeforces886(Technocup2018) F Symmetric Projections You are given a set of n points on the plane. A ...

  10. 链接指示:extren"C"

    C++程序有时需要调用其他语言编写的函数,最常见的是调用C语言编写的函数.像所有其他名字一样,其他语言中的函数名字也必须在C++中进行声明,并且该声明必须指定返回类型和形参列表.对于其他语言编写的函数 ...