public void EglException_Constructor1(int errorCode) { EglException eglException = null; Assert.DoesNotThrow(() => eglException = new EglException(errorCode)); Assert.AreEqual(errorCode, eglException.ErrorCode); Assert.IsNotNull(eglException.Message); }
// This method is called everytime the context needs // to be recreated. Use it to set any egl-specific settings // prior to context creation protected override void CreateFrameBuffer() { IEGL10 egl = EGLContext.EGL.JavaCast <IEGL10> (); var win = new AndroidWindow(Holder); win.InitializeDisplay(); int[] num_configs = new int[1]; if (!egl.EglGetConfigs(win.Display, null, 0, num_configs)) { throw EglException.GenerateException("Failed to retrieve GraphicsMode configurations", egl); } EGLConfig[] configs = new EGLConfig[num_configs[0]]; if (!egl.EglGetConfigs(win.Display, configs, num_configs[0], num_configs)) { throw EglException.GenerateException("Failed to retrieve GraphicsMode configurations", egl); } Log.Verbose("GLDiag", "Testing {0} graphics configurations", num_configs[0]); Dictionary <IntPtr, AndroidGraphicsMode> validModes = new Dictionary <IntPtr, AndroidGraphicsMode> (); int count = 0; foreach (var c in configs) { var r = GetAttrib(egl, win.Display, c, EGL11.EglRedSize); var g = GetAttrib(egl, win.Display, c, EGL11.EglGreenSize); var b = GetAttrib(egl, win.Display, c, EGL11.EglBlueSize); var a = GetAttrib(egl, win.Display, c, EGL11.EglAlphaSize); var depth = GetAttrib(egl, win.Display, c, EGL11.EglDepthSize); var stencil = GetAttrib(egl, win.Display, c, EGL11.EglStencilSize); var s = GetAttrib(egl, win.Display, c, EGL11.EglSampleBuffers); var samples = GetAttrib(egl, win.Display, c, EGL11.EglSamples); Log.Verbose("AndroidGraphicsMode", "Testing graphics mode: {8} red {0} green {1} blue {2} alpha {3} ({4}) depth {5} stencil {6} samples {7}", r, g, b, a, r + g + b + a, depth, stencil, samples, count++); try { win.CreateSurface(c); win.DestroySurface(); validModes.Add(c.Handle, new AndroidGraphicsMode(r + g + b + a, depth, stencil, s > 0 ? samples : 0, 2, true)); Log.Verbose("AndroidGraphicsMode", "Graphics mode {0} valid", count - 1); } catch { Log.Verbose("AndroidGraphicsMode", "Graphics mode {0} invalid", count - 1); } } win.TerminateDisplay(); if (validModes.Count == 0) { throw new EglException("There is no valid graphics mode, aborting"); } IntPtr key = IntPtr.Zero; foreach (var k in validModes) { if (key == IntPtr.Zero) { key = k.Key; } var a = k.Value; Log.Verbose("AndroidGraphicsMode", "Valid graphics mode: {9} red {0} green {1} blue {2} alpha {3} ({4}) depth {5} stencil {6} samples {7} buffers {8}", a.ColorFormat.Red, a.ColorFormat.Green, a.ColorFormat.Blue, a.ColorFormat.Alpha, a.ColorFormat.BitsPerPixel, a.Depth, a.Stencil, a.Samples, a.Buffers, (int)k.Key); } GraphicsMode = validModes[key]; // if you don't call this, the context won't be created base.CreateFrameBuffer(); }