Implemented EglContext construction according to AMD's OpenGL|ES samples.

This commit is contained in:
the_fiddler 2009-08-15 16:45:59 +00:00
parent 5515c59173
commit 5d5f598707
3 changed files with 24 additions and 10 deletions

View file

@ -41,29 +41,38 @@ namespace OpenTK.Platform.Egl
EGLConfig[] configs = new EGLConfig[1]; EGLConfig[] configs = new EGLConfig[1];
int[] attribList = new int[] int[] attribList = new int[]
{ {
Egl.SURFACE_TYPE, Egl.WINDOW_BIT, //Egl.SURFACE_TYPE, Egl.WINDOW_BIT,
Egl.RED_SIZE, color.Red, Egl.RED_SIZE, color.Red,
Egl.GREEN_SIZE, color.Green, Egl.GREEN_SIZE, color.Green,
Egl.BLUE_SIZE, color.Blue, Egl.BLUE_SIZE, color.Blue,
Egl.ALPHA_SIZE, color.Alpha, Egl.ALPHA_SIZE, color.Alpha,
Egl.DEPTH_SIZE, depth > 0 ? depth : Egl.DONT_CARE, Egl.DEPTH_SIZE, depth > 0 ? depth : 0,
Egl.STENCIL_SIZE, stencil > 0 ? stencil : Egl.DONT_CARE, Egl.STENCIL_SIZE, stencil > 0 ? stencil : 0,
Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0, //Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0,
Egl.SAMPLES, samples > 0 ? samples : 0, Egl.SAMPLES, samples > 0 ? samples : 0,
Egl.NONE, Egl.NONE Egl.NONE,
}; };
// Todo: what if we don't wish to use the default display? // Todo: what if we don't wish to use the default display?
EGLDisplay display = Egl.GetDisplay(EGLNativeDisplayType.Default); EGLDisplay display = Egl.GetDisplay(EGLNativeDisplayType.Default);
int major, minor;
if (!Egl.Initialize(display, out major, out minor))
throw new GraphicsModeException(String.Format("Failed to initialize display connection, error {0}", Egl.GetError()));
int num_configs; int num_configs;
Egl.GetConfigs(display, configs, configs.Length, out num_configs); if (!Egl.GetConfigs(display, null, 0, out num_configs))
if (num_configs == 0) {
throw new NotSupportedException("The requested GraphicsMode is not supported."); throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode configurations, error {0}", Egl.GetError()));
}
if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out num_configs))
{
throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError()));
}
// See what we really got // See what we really got
EGLConfig active_config = configs[0]; EGLConfig active_config = configs[0];
@ -79,7 +88,7 @@ namespace OpenTK.Platform.Egl
Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers); Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers);
Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples); Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples);
return new GraphicsMode(active_config.Handle.Value, new ColorFormat(r, g, b, a), depth, stencil, sample_buffers > 0 ? samples : 0, 0, 2, false); return new GraphicsMode(active_config.Handle.Value, new ColorFormat(r, g, b, a), d, s, sample_buffers > 0 ? samples : 0, 0, 2, false);
} }
#endregion #endregion

View file

@ -40,7 +40,8 @@ namespace OpenTK.Platform.Egl
public override IGraphicsContext CreateGLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags) public override IGraphicsContext CreateGLContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext, bool directRendering, int major, int minor, GraphicsContextFlags flags)
{ {
WinWindowInfo win_win = (WinWindowInfo)window; WinWindowInfo win_win = (WinWindowInfo)window;
EglWindowInfo egl_win = new OpenTK.Platform.Egl.EglWindowInfo(win_win.WindowHandle, Egl.GetDisplay(new EGLNativeDisplayType(win_win.DeviceContext))); EGLDisplay egl_display = Egl.GetDisplay(EGLNativeDisplayType.Default); // Egl.GetDisplay(new EGLNativeDisplayType(win_win.DeviceContext));
EglWindowInfo egl_win = new OpenTK.Platform.Egl.EglWindowInfo(win_win.WindowHandle, egl_display);
return new EglContext(mode, egl_win, shareContext, major, minor, flags); return new EglContext(mode, egl_win, shareContext, major, minor, flags);
} }

View file

@ -29,6 +29,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Diagnostics; using System.Diagnostics;
using OpenTK.Graphics;
namespace OpenTK.Platform.Egl namespace OpenTK.Platform.Egl
{ {
@ -72,6 +73,9 @@ namespace OpenTK.Platform.Egl
public void CreateWindowSurface(EGLConfig config) public void CreateWindowSurface(EGLConfig config)
{ {
Surface = Egl.CreateWindowSurface(Display, config, Handle, null); Surface = Egl.CreateWindowSurface(Display, config, Handle, null);
int error = Egl.GetError();
if (error != Egl.SUCCESS)
throw new GraphicsContextException(String.Format("[Error] Failed to create EGL window surface, error {0}.", error));
} }
//public void CreatePixmapSurface(EGLConfig config) //public void CreatePixmapSurface(EGLConfig config)