コード例 #1
0
        public void InitializeDisplay()
        {
            if (eglDisplay != null && eglDisplay != EGL10.EglNoDisplay)
            {
                return;
            }

            IEGL10 egl = EGLContext.EGL.JavaCast <IEGL10> ();

            if (eglDisplay == null)
            {
                eglDisplay = egl.EglGetDisplay(EGL10.EglDefaultDisplay);
            }

            if (eglDisplay == EGL10.EglNoDisplay)
            {
                throw EglException.GenerateException("EglGetDisplay == EGL10.EglNoDisplay", egl, null);
            }

            int[] version = new int[2];
            if (!egl.EglInitialize(eglDisplay, version))
            {
                throw EglException.GenerateException("EglInitialize", egl, null);
            }
        }
コード例 #2
0
        private void CreateEGLContext()
        {
            ExEnLog.WriteLine("ExEnAndroidSurfaceView.CreateEGLContext Begin");

            // Assumes lockObject is locked

            lostEglContext = false;

            egl = EGLContext.EGL.JavaCast<IEGL10>();

            eglDisplay = egl.EglGetDisplay(EGL10Consts.EglDefaultDisplay);
            if(eglDisplay == EGL10Consts.EglNoDisplay)
                throw new ExEnSurfaceException("Could not get EGL display");

            int[] version = new int[2];
            if(!egl.EglInitialize(eglDisplay, version))
                throw new ExEnSurfaceException(AddEGLError("Could not initialize EGL display"));

            ExEnLog.WriteLine("EGL Version: " + version[0] + "." + version[1]);

            // TODO: allow GraphicsDeviceManager to specify a frame buffer configuration
            // TODO: test this configuration works on many devices:
            int[] configAttribs = new int[] {
                    //EGL10Consts.EglRedSize, 5,
                    //EGL10Consts.EglGreenSize, 6,
                    //EGL10Consts.EglBlueSize, 5,
                    //EGL10Consts.EglAlphaSize, 0,
                    //EGL10Consts.EglDepthSize, 4,
                    //EGL10Consts.EglStencilSize, 0,
                    EGL10Consts.EglNone };
            EGLConfig[] configs = new EGLConfig[1];
            int[] numConfigs = new int[1];
            if(!egl.EglChooseConfig(eglDisplay, configAttribs, configs, 1, numConfigs))
                throw new ExEnSurfaceException(AddEGLError("Could not get EGL config"));
            if(numConfigs[0] == 0)
                throw new ExEnSurfaceException("No valid EGL configs found");
            eglConfig = configs[0];

            const int EglContextClientVersion = 0x3098;
            int[] contextAttribs = new int[] { EglContextClientVersion, 1, EGL10Consts.EglNone };
            eglContext = egl.EglCreateContext(eglDisplay, eglConfig, EGL10Consts.EglNoContext, contextAttribs);
            if(eglContext == null || eglContext == EGL10Consts.EglNoContext)
            {
                eglContext = null;
                throw new ExEnSurfaceException(AddEGLError("Could not create EGL context"));
            }

            eglContextAvailable = true;

            ExEnLog.WriteLine("ExEnAndroidSurfaceView.CreateEGLContext End");
        }