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. org.apache.subversion.javahl.ClientException: svn: E155004: "" run 'svn cleanup' first.

    原文:https://blog.csdn.net/Duqian94/article/details/53791250 解决方法:1.在eclipse中右键项目“team-->refresh/cl ...

  2. Httpclient文件上传

    public static void upload(String url,File file,String filename) { CloseableHttpClient httpclient = H ...

  3. curl-7.21.2

    curl 源码编译 自己定义的库编译 https://blog.csdn.net/initiallht/article/details/92655025 静态库,debug,x86nmake /f M ...

  4. 解决opencart设置SSL后评论不能翻页的问题

    为了网站的安全和seo,我们为客户的opencart网站添加了SSL加密实现https,并设置了301跳转使http跳到https,基本所有的功能都完好,就是有一点评论分页无法加载分页,去分析了链接源 ...

  5. JavaScript之保留两位小数

    if (!isNumeric(fm.ChangeFee.value)) { alert("请输入正确的变更费用"); document.getElementsByName('Cha ...

  6. html--前端javascript初识

    一.JavaScript简介 JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动.使用它的目的是与HTML超文本标识语言.Java 脚本语 ...

  7. 图的遍历 | 1034 map处理输入数据,连通块判断

    这题写得比较痛苦.首先有点不在状态,其次题目比较难读懂. “Gang”成立的两个条件:①成员数大于两个  ②边权总和大于阈值K 首先,在录数据的时候通过map或者字符串哈希建立string到int的映 ...

  8. R语言中的特殊值 NA NULL NaN Inf

    这几个都是R语言中的特殊值,都是R的保留字, NA:Not available  表示缺失值   用 is.na() 来判断是否为缺失值 NULL:表示空值,即没有内容  用 is.null() 来判 ...

  9. 【IntelliJ IDEA学习之四】IntelliJ IDEA常用插件

    版本:IntelliJIDEA2018.1.4 一.代码规范Alibaba Java Coding Guidelines:阿里巴巴代码规范检查插件FindBugs-IDEA:潜在 Bug 检查Sona ...

  10. CentOS环境设置Hbase自启动

    1.在/etc/init.d/目录创建hbase文件 #!/bin/bash # chkconfig: #export JAVA_HOME=/usr/local/jdk1.8.0_191 HBASE_ ...