protected override void CreateFrameBuffer() { try { ContextRenderingApi = EAGLRenderingAPI.OpenGLES3; float screenScale = UIScreen.MainScreen.Scale; CAEAGLLayer eaglLayer = (CAEAGLLayer)Layer; Size size = new Size( (int)Math.Round(screenScale * eaglLayer.Bounds.Size.Width), (int)Math.Round(screenScale * eaglLayer.Bounds.Size.Height)); base.CreateFrameBuffer(); GL.GenRenderbuffers(1, out depthRenderbuffer); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, depthRenderbuffer); GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, RenderbufferInternalFormat.DepthComponent16, size.Width, size.Height); GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferSlot.DepthAttachment, RenderbufferTarget.Renderbuffer, depthRenderbuffer); Console.WriteLine("using ES 3.0"); Console.WriteLine("version: {0} glsl version: {1}", GL.GetString(StringName.Version), GL.GetString(StringName.ShadingLanguageVersion)); } catch (Exception e) { throw new Exception("Looks like OpenGL ES 3.0 not available", e); } if (ContextRenderingApi == EAGLRenderingAPI.OpenGLES2 || ContextRenderingApi == EAGLRenderingAPI.OpenGLES3) { keys.LoadShaders(); } }
// This method is called everytime the context needs // to be recreated. Use it to set any egl-specific settings // prior to context creation // // In this particular case, we demonstrate how to set // the graphics mode and fallback in case the device doesn't // support the defaults protected override void CreateFrameBuffer() { ContextRenderingApi = GLVersion.ES3; // the default GraphicsMode that is set consists of (16, 16, 0, 0, 2, false) try { Log.Verbose("GLCube", "Loading with default settings"); // use multisample if possible GraphicsMode = new AndroidGraphicsMode(new ColorFormat(32), 16, 0, 4, 2, false); // if you don't call this, the context won't be created base.CreateFrameBuffer(); } catch (Exception ex) { Log.Verbose("GLCube", "{0}", ex); // this is a graphics setting that sets everything to the lowest mode possible so // the device returns a reliable graphics setting. try { Log.Verbose("GLCube", "Loading with custom Android settings (low mode)"); GraphicsMode = new AndroidGraphicsMode(0, 0, 0, 0, 0, false); // if you don't call this, the context won't be created base.CreateFrameBuffer(); } catch (Exception ex1) { Log.Verbose("GLCube", "{0}", ex1); throw new Exception("Can't load egl, aborting"); } } Console.WriteLine("OpenGL version: {0} GLSL version: {1}", GL.GetString(StringName.Version), GL.GetString(StringName.ShadingLanguageVersion)); keys.LoadShaders(); SetupProjection(); }
protected override void OnContextSet(EventArgs e) { base.OnContextSet(e); Console.WriteLine("OpenGL version: {0} GLSL version: {1}", GL.GetString(StringName.Version), GL.GetString(StringName.ShadingLanguageVersion)); keys.LoadShaders(); keys.CreateTextTextures(CreateBitmapData); keys.InitModel(); keys.Start(); }