本文将继续介绍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模式等操作
|