本文中将介绍SDK中SvrEye脚本Buffer相关的逻辑代码:
void OnPreRender()
{
SwapBuffers();
if (OnPreRenderListener != null)
{
OnPreRenderListener();
}
}
在SvrEye中的OnPreRender函数中包含了SwapBuffers方法,方法的作用是切换当前的buffer图像。
OnPreRender方法的作用是在程序运行周期中,每一帧图像渲染之前执行的方法。
而OnRreRenderListener定义为delegate类型,监听每一帧图像渲染前的执行事件。
public delegate void OnPreRenderCallback();
public OnPreRenderCallback OnPreRenderListener;
SwapBuffers方法的具体实现如下:
void SwapBuffers()
{
if (imageType != eType.RenderTexture) return;
currentTextureIndex = ++currentTextureIndex % bufferCount;
var targetTexture = eyeTextures[currentTextureIndex];
if (targetTexture == null) return;
for (int i = 0; i < mainCameras.Length; i++)
{
mainCameras[i].targetTexture = targetTexture;
}
targetTexture.DiscardContents();
}
在这个方法中包含了几个关键的变量,其中bufferCount为当前应用的buffer数量,默认的bufferCount为3
private const int bufferCount = 3;
currentTextureIndex为当前Buffer对应图像序列号,
private int currentTextureIndex = 0;
eyeTextures变量保存的是当前左右眼的图像RenderTexture,
private RenderTexture[] eyeTextures = new RenderTexture[bufferCount];
SwapBuffer通过计算currentextureIndex的值之后获取当前的targetTexture指针,赋值给目标Camera的targetTexture,进而完成左右眼图像Buffer的刷新。