Exemple #1
0
        //
        // 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);
            });
        }
Exemple #2
0
 public static extern void FNA3D_SetViewport(
     IntPtr device,
     ref FNA3D_Viewport viewport
     );