Qualcomm_Snapdragon_VR_SDK SvrPluginAndroid脚本简介(7)

本文将继续介绍SvrPluginAndroid的相关代码:

	public override IEnumerator BeginVr(int cpuPerfLevel, int gpuPerfLevel)
	{
        //yield return new WaitUntil(() => SvrIsRunning() == false);  // Wait for EndVr

        yield return base.BeginVr(cpuPerfLevel, gpuPerfLevel);

        // float[6]: x, y, z, w, u, v
        float[] lowerLeft = { -1f, -1f, 0f, 1f, 0f, 0f };
        float[] upperLeft = { -1f,  1f, 0f, 1f, 0f, 1f };
        float[] upperRight = { 1f,  1f, 0f, 1f, 1f, 1f };
        float[] lowerRight = { 1f, -1f, 0f, 1f, 1f, 0f };
        SvrSetupLayerCoords(0, -1, lowerLeft, lowerRight, upperLeft, upperRight);    // Eye/All
        SvrSetupLayerCoords(1, -1, lowerLeft, lowerRight, upperLeft, upperRight);    // Overlay/All

        SvrSetPerformanceLevelsEventData(cpuPerfLevel, gpuPerfLevel);

        yield return new WaitUntil(() => SvrCanBeginVR() == true);
        IssueEvent (RenderEvent.BeginVr);
        yield return new WaitUntil(() => SvrIsRunning() == true);
    }

在SvrPluginAndroid脚本中重写了父类SvrPlugin中的BeginVR方法。

BeginVR方法的作用是开始VR模式,分别传入cpu和gpu的运行等级。这部分逻辑已在之前文章中介绍过了。

不了解的读者可以翻阅之前的博客。

在SvrPluginAndroid脚本的BeginVR方法中,首先运行了父类BeginVR方法。

 yield return base.BeginVr(cpuPerfLevel, gpuPerfLevel);

之后定义了上下左右方位的屏幕坐标:lowerleft、upperleft、upperright、lowerright

调用SDK中Android底层so的SvrSetupLayerCoords方法设置Eye Camera以及OverLayCamera的坐标。

调用SvrSetPerformanceLevelsEventData想底层SDK代码中设置cpu和gpu的运行等级。

 SvrSetPerformanceLevelsEventData(cpuPerfLevel, gpuPerfLevel);

之后判断SvrCanBeginVR

可以开启VR模式后向GPU发送渲染事件

IssueEvent (RenderEvent.BeginVr);

至此,BeginVR的相关逻辑介绍完毕。

主要完成的工作是向底层SDK代码中设置cpu和gpu的等级,开始运行VR模式等操作

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页