ユニティAsyncGPUReadbackインターフェース・テスト

Unity2018は新しいインターフェイスに入社、あなたは非同期RenderTexture->にTexture2Dおよび非同期ComputeBuffer.GetDataを行うことができます

その後、次のテストするためにいくつかの例を記述します。

 

1.RenderTexture->にTexture2D

非同期:

IEnumeratorを開始()
{ 
    VARの RT = 新しい RenderTexture(5125120 );
    // Graphics.xxx ... 
    するvar reqは= AsyncGPUReadback.Request(RT);
    収量は 返す 新しい WaitUntilにより(()=> req.doneを)。

    するvarテックス= にTexture2D(512512、TextureFormat.RGBA32、);
    VAR colorArray = req.GetData <Color32> ().ToArray(); 
    tex.SetPixels32(colorArray)。
    tex.Apply(); 
}

 

同期:

RenderTexture.active = 室温;
するvarテックス= にTexture2D(512512、TextureFormat.RGBA32、); 
tex.ReadPixels(新規のRect(00512512)、00)。
tex.Apply();

 

 

2.AsyncGPUReadbackのGetData

CS:

#pragmaカーネルCSMain 構造体TESTDATA 
{ 
    するfloat3 POS。
}。
RWStructuredBuffer <TESTDATA> のMyData; 
[NumThreadsに(811 )]
 ボイドCSMain(uint3 ID:SV_DispatchThreadID)
{ 
    のMyData [id.x] .POS =のMyData [id.x] .POS * 2 
}


 

 

非同期:

パブリック クラスComputeShaderAsyncRequest:MonoBehaviour 
{ 
    パブリック 構造体TESTDATA 
    { 
        公共するVector3 POS。
    } 
    公共ComputeShader computeShader。

    IEnumeratorを開始()
    { 
        VAR kernelID = computeShader.FindKernel(" CSMain " )。

        VAR TESTDATA = 新しいリスト<TESTDATA> ();
        以下のためにint型 i = 0 ; iは< 64 ; iは++ 
            testData.Add(新しい TESTDATA(){POS = 新しいですVector3(I、00 )})。

        VAR computeBuffer = 新しい ComputeBuffer(testData.Count、12 ); 
        computeBuffer.SetData(テストデータ)。
        computeShader.SetBuffer(kernelID、" MyDataに" 、computeBuffer)。
        computeShader.Dispatch(kernelID、811 )。
        VaRの要求= AsyncGPUReadback.Request(computeBuffer)。
        DEBUG.LOG(" フレーム1:" + Time.frameCount)。// 1つの
        収量 を返す 新しいですWaitUntilにより(()=> request.done)。
        DEBUG.LOG(" フレーム2:" + Time.frameCount)。// 4 

        VAR testDataArray = request.GetData <TESTDATA> ().ToArray();
        int型 iは= 0 ; iがtestDataArray.Lengthを<Iは++ 
            (DEBUG.LOG " " + I + " 項目:" + testDataArray [I] .POS)。
    } 
}

 

同期:

パブリック クラスComputeShaderAsyncRequest_Sync:MonoBehaviour 
{ 
    パブリック 構造体TESTDATA 
    { 
        公共するVector3 POS。
    } 

    公共ComputeShader computeShader。

    無効スタート()
    { 
        VAR kernelID = computeShader.FindKernel(" CSMainを" ); 

        VAR TESTDATA = 新しいリスト<TESTDATA> ();
        以下のためにint型 i = 0 ; iは< 64 ; iは++ 
            testData.Add(新しい TESTDATA(){POS = 新しいですVector3(I、00 )})。

        VAR computeBuffer = 新しい ComputeBuffer(testData.Count、12 ); 
        computeBuffer.SetData(テストデータ)。
        computeShader.SetBuffer(kernelID、" MyDataに" 、computeBuffer)。
        computeShader.Dispatch(kernelID、811 )。
        VaRの配列= 新しいTESTDATA [testData.Count]。
        computeBuffer.GetData(アレイ)
        以下のためにint型私= 0 ;私<Array.lengthと、私は++ 
            DEBUG.LOG(" I:" + I + " 項目:" + 配列[i]の.POS)。
    } 
}

 

おすすめ

転載: www.cnblogs.com/hont/p/11351273.html