From 12142b9846075ff64e1f7dcf9677aa497b8c35bd Mon Sep 17 00:00:00 2001 From: Nikos Kastellanos Date: Sun, 19 May 2024 14:44:38 +0300 Subject: [PATCH] initialize _eglConfigs in GraphicsAdapter --- .../.GL.Android/ConcreteGraphicsAdapter.cs | 24 +++++++++++++++++++ .../Platform/Android/AndroidSurfaceView.cs | 16 +------------ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/MonoGame.Framework/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs b/MonoGame.Framework/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs index 2397d1de481..b7cfd0b5491 100644 --- a/MonoGame.Framework/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs +++ b/MonoGame.Framework/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs @@ -13,6 +13,7 @@ using Microsoft.Xna.Platform.Graphics.OpenGL; using GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName; using Javax.Microedition.Khronos.Egl; +using Android.Util; namespace Microsoft.Xna.Platform.Graphics @@ -115,9 +116,12 @@ public override GraphicsBackend Backend OGL_DROID _ogl; EGLDisplay _eglDisplay; + EGLConfig[] _eglConfigs; internal OGL_DROID Ogl { get { return _ogl; } } internal EGLDisplay EglDisplay { get { return _eglDisplay; } } + internal EGLConfig[] EglConfig { get { return _eglConfigs; } } + internal ConcreteGraphicsAdapter() { @@ -137,6 +141,9 @@ internal ConcreteGraphicsAdapter() if (!_ogl.Egl.EglInitialize(_eglDisplay, version)) throw new Exception("Could not initialize EGL display" + _ogl.GetEglErrorAsString()); #endif + + InitConfigs(); + } ~ConcreteGraphicsAdapter() @@ -152,6 +159,23 @@ internal ConcreteGraphicsAdapter() #endif } + private void InitConfigs() + { + int[] numConfigs = new int[1]; + if (!_ogl.Egl.EglGetConfigs(_eglDisplay, null, 0, numConfigs)) + throw new Exception("Could not get config count. " + _ogl.GetEglErrorAsString()); + + _eglConfigs = new EGLConfig[numConfigs[0]]; + _ogl.Egl.EglGetConfigs(_eglDisplay, _eglConfigs, numConfigs[0], numConfigs); + + Log.Verbose("AndroidGameView", "Device Supports"); + foreach (EGLConfig eglConfig in _eglConfigs) + { + Log.Verbose("AndroidGameView", string.Format(" {0}", AndroidSurfaceView.SurfaceConfig.FromEGLConfig(eglConfig, _ogl.Egl, _eglDisplay))); + } + + } + public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) diff --git a/MonoGame.Framework/Platform/Android/AndroidSurfaceView.cs b/MonoGame.Framework/Platform/Android/AndroidSurfaceView.cs index 2ea1be07a50..ce4575cfb5b 100644 --- a/MonoGame.Framework/Platform/Android/AndroidSurfaceView.cs +++ b/MonoGame.Framework/Platform/Android/AndroidSurfaceView.cs @@ -500,24 +500,10 @@ protected void CreateGLContext() surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5 }); } surfaceConfigs.Add(new SurfaceConfig() { Red = 4, Green = 4, Blue = 4 }); - int[] numConfigs = new int[1]; EGLConfig[] results = new EGLConfig[1]; - if (!GL.Egl.EglGetConfigs(adapter.EglDisplay, null, 0, numConfigs)) - { - throw new Exception("Could not get config count. " + GL.GetEglErrorAsString()); - } - - EGLConfig[] eglConfigs = new EGLConfig[numConfigs[0]]; - GL.Egl.EglGetConfigs(adapter.EglDisplay, eglConfigs, numConfigs[0], numConfigs); - Log.Verbose("AndroidGameView", "Device Supports"); - foreach (EGLConfig eglConfig in eglConfigs) - { - Log.Verbose("AndroidGameView", string.Format(" {0}", SurfaceConfig.FromEGLConfig(eglConfig, GL.Egl, adapter.EglDisplay))); - } - bool found = false; - numConfigs[0] = 0; + int[] numConfigs = new int[] { 0 }; foreach (SurfaceConfig surfaceConfig in surfaceConfigs) { Log.Verbose("AndroidGameView", string.Format("Checking Config : {0}", surfaceConfig));