Пример #1
0
    /// <summary>
    /// レンダリング
    /// ただのレンダリングではなくすべてのスクリプトのupdateが施行されたフレーム処理最後のプログラムになるので
    /// 今までGPUに投げていたタスクをCPUに戻すブロッキングをいれる
    /// ここでCPUはGPU待ちを喰らうので、重いCPU処理はここに到達するまでに行うべき
    /// </summary>
    /// 順番は
    /// OnPreRenderカメラがシーンのレンダリングを開始する前	1回
    /// OnRenderObjectすべてのシーンレンダリング終了後	1回
    /// OnPostRenderカメラがシーンのレンダリングを終了した後	1回
    /// OnRenderImage(Pro only)画面レンダリングが完了し画面画像の処理が可能になった後	1回
    /// //有効なものは2つOnRenderObjectかOnGUI
    void OnRenderObject()
    {
        //GPU→CPUなのでブロッキングが発生する。
        //まずはufoのほう
        float[] f2 = new float[2];
        UFOE.GetData(f2);
        extf += ucomp.ExtForce(f2[0], f2[1]);; //外力
        f2[0] = 0.0f; f2[1] = 0.0f;
        UFOE.SetData(f2);

        //次に爆発のほう
        RES108.GetData(res);
        //CPU側で判定check→位置復元、front画像の処理を
        //と思ったけど不具合あったのでkabePoriを全loadして比較することに
        if (res[0] != 0)
        {                             //elseはそもそも爆発してない
            kabePori.GetData(kbpori); //kabePoriはすでにカーネル側で更新されている
            for (int j = 0; j < Const.CO.WX * Const.CO.WY; j++)
            {
                if (kbpori[j] != kbp[j])
                {
                    int expx = j % Const.CO.WX;
                    int expy = j / Const.CO.WX;
                    frntcomp.DelPixcelTex(expx, expy);
                    kbp[expx + expy * Const.CO.WX] = 255;
                }
            }
            //爆発しているのでapply、ほかRESのリセットも必要
            frntcomp.tex.Apply();
            FillMem_ui(RES108, 108, 0, 0);
            SE.Play_exp0();
        }


        //もともと粒子のレンダリング前にブロッキングを↑に挟んだほうが早くなることが実験的にわかっていた
        //そのごいろいろリファクタして結局変わらないくらいになった。どっちかというとOnpostのほうが早そうだった
        //bulletsMaterial.renderQueue=4;
        // レンダリングを開始
        //bulletsMaterial.SetPass(0);
        // 1万個のオブジェクトをレンダリング
        //Graphics.DrawProcedural(MeshTopology.Points, dtprtcomp.RYS.count);
    }