// // FNA3D_SetViewport // public static void FNA3D_SetViewport(IntPtr device, ref FNA3D_Viewport viewport) { var renderer = Renderer.Get(device); var state = (State)renderer.UserData; var v = viewport; if (state.AdjustViewport && (!state.RenderToTexture) && v.x == 0 && v.y == 0 && v.w > 0 && v.h > 0 && v.w == state.BackBufferWidth && v.h == state.BackBufferHeight) { var(s_w, s_h) = (renderer.SurfaceWidth, renderer.SurfaceHeight); if (v.w >= v.h) { // adjust from virtual landscape v.h = (int)((v.h * s_w) / (float)v.w); v.w = s_w; v.y = (s_h - v.h) / 2; } else { // adjust from virtual portrait v.w = (int)((v.w * s_w) / (float)v.h); v.h = s_h; v.x = (s_w - v.w) / 2; } } Renderer.Get(device).Send(false, () => { GLES20.glViewport(v.x, v.y, v.w, v.h); GLES20.glDepthRangef(v.minDepth, v.maxDepth); }); }
public static extern void FNA3D_SetViewport( IntPtr device, ref FNA3D_Viewport viewport );