diff --git a/Source/OpenTK/Platform/Egl/Egl.cs b/Source/OpenTK/Platform/Egl/Egl.cs new file mode 100644 index 00000000..bd8e5399 --- /dev/null +++ b/Source/OpenTK/Platform/Egl/Egl.cs @@ -0,0 +1,381 @@ +#region License +// +// The Open Toolkit Library License +// +// Copyright (c) 2006 - 2009 the Open Toolkit library. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +#endregion + +using System; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using System.Text; + +namespace OpenTK.Platform.Egl +{ + struct EGLNativeDisplayType + { + public readonly Compute.Handle Handle; + + public EGLNativeDisplayType(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + } + + struct EGLNativePixmapType + { + public readonly Compute.Handle Handle; + + public EGLNativePixmapType(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + } + + struct EGLConfig + { + public readonly Compute.Handle Handle; + + public EGLConfig(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + } + + struct EGLContext + { + public readonly Compute.Handle Handle; + + public EGLContext(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + + public static readonly EGLContext None; + } + + struct EGLDisplay + { + public readonly Compute.Handle Handle; + + public EGLDisplay(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + + public static readonly EGLDisplay Null; + } + + struct EGLSurface + { + public readonly Compute.Handle Handle; + + public EGLSurface(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + + public static readonly EGLSurface None; + } + + struct EGLClientBuffer + { + public readonly Compute.Handle Handle; + + public EGLClientBuffer(IntPtr handle) + { + Handle = new Compute.Handle(handle); + } + } + + static partial class Egl + { + public const int EGL_VERSION_1_0 = 1; + public const int EGL_VERSION_1_1 = 1; + public const int EGL_VERSION_1_2 = 1; + public const int EGL_VERSION_1_3 = 1; + public const int EGL_VERSION_1_4 = 1; + public const int EGL_FALSE = 0; + public const int EGL_TRUE = 1; + public const int EGL_DONT_CARE = -1; + public const int EGL_SUCCESS = 12288; + public const int EGL_NOT_INITIALIZED = 12289; + public const int EGL_BAD_ACCESS = 12290; + public const int EGL_BAD_ALLOC = 12291; + public const int EGL_BAD_ATTRIBUTE = 12292; + public const int EGL_BAD_CONFIG = 12293; + public const int EGL_BAD_CONTEXT = 12294; + public const int EGL_BAD_CURRENT_SURFACE = 12295; + public const int EGL_BAD_DISPLAY = 12296; + public const int EGL_BAD_MATCH = 12297; + public const int EGL_BAD_NATIVE_PIXMAP = 12298; + public const int EGL_BAD_NATIVE_WINDOW = 12299; + public const int EGL_BAD_PARAMETER = 12300; + public const int EGL_BAD_SURFACE = 12301; + public const int EGL_CONTEXT_LOST = 12302; + public const int EGL_BUFFER_SIZE = 12320; + public const int EGL_ALPHA_SIZE = 12321; + public const int EGL_BLUE_SIZE = 12322; + public const int EGL_GREEN_SIZE = 12323; + public const int EGL_RED_SIZE = 12324; + public const int EGL_DEPTH_SIZE = 12325; + public const int EGL_STENCIL_SIZE = 12326; + public const int EGL_CONFIG_CAVEAT = 12327; + public const int EGL_CONFIG_ID = 12328; + public const int EGL_LEVEL = 12329; + public const int EGL_MAX_PBUFFER_HEIGHT = 12330; + public const int EGL_MAX_PBUFFER_PIXELS = 12331; + public const int EGL_MAX_PBUFFER_WIDTH = 12332; + public const int EGL_NATIVE_RENDERABLE = 12333; + public const int EGL_NATIVE_VISUAL_ID = 12334; + public const int EGL_NATIVE_VISUAL_TYPE = 12335; + public const int EGL_PRESERVED_RESOURCES = 12336; + public const int EGL_SAMPLES = 12337; + public const int EGL_SAMPLE_BUFFERS = 12338; + public const int EGL_SURFACE_TYPE = 12339; + public const int EGL_TRANSPARENT_TYPE = 12340; + public const int EGL_TRANSPARENT_BLUE_VALUE = 12341; + public const int EGL_TRANSPARENT_GREEN_VALUE = 12342; + public const int EGL_TRANSPARENT_RED_VALUE = 12343; + public const int EGL_NONE = 12344; + public const int EGL_BIND_TO_TEXTURE_RGB = 12345; + public const int EGL_BIND_TO_TEXTURE_RGBA = 12346; + public const int EGL_MIN_SWAP_INTERVAL = 12347; + public const int EGL_MAX_SWAP_INTERVAL = 12348; + public const int EGL_LUMINANCE_SIZE = 12349; + public const int EGL_ALPHA_MASK_SIZE = 12350; + public const int EGL_COLOR_BUFFER_TYPE = 12351; + public const int EGL_RENDERABLE_TYPE = 12352; + public const int EGL_MATCH_NATIVE_PIXMAP = 12353; + public const int EGL_CONFORMANT = 12354; + public const int EGL_SLOW_CONFIG = 12368; + public const int EGL_NON_CONFORMANT_CONFIG = 12369; + public const int EGL_TRANSPARENT_RGB = 12370; + public const int EGL_RGB_BUFFER = 12430; + public const int EGL_LUMINANCE_BUFFER = 12431; + public const int EGL_NO_TEXTURE = 12380; + public const int EGL_TEXTURE_RGB = 12381; + public const int EGL_TEXTURE_RGBA = 12382; + public const int EGL_TEXTURE_2D = 12383; + public const int EGL_PBUFFER_BIT = 1; + public const int EGL_PIXMAP_BIT = 2; + public const int EGL_WINDOW_BIT = 4; + public const int EGL_VG_COLORSPACE_LINEAR_BIT = 32; + public const int EGL_VG_ALPHA_FORMAT_PRE_BIT = 64; + public const int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 512; + public const int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 1024; + public const int EGL_OPENGL_ES_BIT = 1; + public const int EGL_OPENVG_BIT = 2; + public const int EGL_OPENGL_ES2_BIT = 4; + public const int EGL_OPENGL_BIT = 8; + public const int EGL_VENDOR = 12371; + public const int EGL_VERSION = 12372; + public const int EGL_EXTENSIONS = 12373; + public const int EGL_CLIENT_APIS = 12429; + public const int EGL_HEIGHT = 12374; + public const int EGL_WIDTH = 12375; + public const int EGL_LARGEST_PBUFFER = 12376; + public const int EGL_TEXTURE_FORMAT = 12416; + public const int EGL_TEXTURE_TARGET = 12417; + public const int EGL_MIPMAP_TEXTURE = 12418; + public const int EGL_MIPMAP_LEVEL = 12419; + public const int EGL_RENDER_BUFFER = 12422; + public const int EGL_VG_COLORSPACE = 12423; + public const int EGL_VG_ALPHA_FORMAT = 12424; + public const int EGL_HORIZONTAL_RESOLUTION = 12432; + public const int EGL_VERTICAL_RESOLUTION = 12433; + public const int EGL_PIXEL_ASPECT_RATIO = 12434; + public const int EGL_SWAP_BEHAVIOR = 12435; + public const int EGL_MULTISAMPLE_RESOLVE = 12441; + public const int EGL_BACK_BUFFER = 12420; + public const int EGL_SINGLE_BUFFER = 12421; + public const int EGL_VG_COLORSPACE_sRGB = 12425; + public const int EGL_VG_COLORSPACE_LINEAR = 12426; + public const int EGL_VG_ALPHA_FORMAT_NONPRE = 12427; + public const int EGL_VG_ALPHA_FORMAT_PRE = 12428; + public const int EGL_DISPLAY_SCALING = 10000; + public const int EGL_UNKNOWN = -1; + public const int EGL_BUFFER_PRESERVED = 12436; + public const int EGL_BUFFER_DESTROYED = 12437; + public const int EGL_OPENVG_IMAGE = 12438; + public const int EGL_CONTEXT_CLIENT_TYPE = 12439; + public const int EGL_CONTEXT_CLIENT_VERSION = 12440; + public const int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 12442; + public const int EGL_MULTISAMPLE_RESOLVE_BOX = 12443; + public const int EGL_OPENGL_ES_API = 12448; + public const int EGL_OPENVG_API = 12449; + public const int EGL_OPENGL_API = 12450; + public const int EGL_DRAW = 12377; + public const int EGL_READ = 12378; + public const int EGL_CORE_NATIVE_ENGINE = 12379; + public const int EGL_COLORSPACE = EGL_VG_COLORSPACE; + public const int EGL_ALPHA_FORMAT = EGL_VG_ALPHA_FORMAT; + public const int EGL_COLORSPACE_sRGB = EGL_VG_COLORSPACE_sRGB; + public const int EGL_COLORSPACE_LINEAR = EGL_VG_COLORSPACE_LINEAR; + public const int EGL_ALPHA_FORMAT_NONPRE = EGL_VG_ALPHA_FORMAT_NONPRE; + public const int EGL_ALPHA_FORMAT_PRE = EGL_VG_ALPHA_FORMAT_PRE; + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetError")] + public static extern int GetError(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetDisplay")] + static extern IntPtr eglGetDisplay(EGLNativeDisplayType display_id); + + public static EGLDisplay GetDisplay(EGLNativeDisplayType display_id) + { + IntPtr ptr = eglGetDisplay(display_id); + EGLDisplay ret = new EGLDisplay(ptr); + return ret; + } + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglInitialize")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool Initialize(EGLDisplay dpy, out int major, out int minor); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglTerminate")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool Terminate(EGLDisplay dpy); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglQueryString")] + public static extern IntPtr QueryString(EGLDisplay dpy, int name); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetConfigs")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool GetConfigs(EGLDisplay dpy, EGLConfig[] configs, int config_size, out int num_config); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglChooseConfig")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool ChooseConfig(EGLDisplay dpy, int[] attrib_list, EGLConfig[] configs, int config_size, out int num_config); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetConfigAttrib")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool GetConfigAttrib(EGLDisplay dpy, EGLConfig config, int attribute, out int value); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCreateWindowSurface")] + static extern IntPtr eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, IntPtr win, int[] attrib_list); + + public static EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, IntPtr win, int[] attrib_list) + { + IntPtr ptr = eglCreateWindowSurface(dpy, config, win, attrib_list); + EGLSurface ret = new EGLSurface(ptr); + return ret; + } + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCreatePbufferSurface")] + public static extern EGLSurface CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, int[] attrib_list); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCreatePixmapSurface")] + public static extern EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, int[] attrib_list); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglDestroySurface")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool DestroySurface(EGLDisplay dpy, EGLSurface surface); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglQuerySurface")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool QuerySurface(EGLDisplay dpy, EGLSurface surface, int attribute, out int value); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglBindAPI")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool BindAPI(int api); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglQueryAPI")] + public static extern int QueryAPI(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglWaitClient")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool WaitClient(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglReleaseThread")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool ReleaseThread(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCreatePbufferFromClientBuffer")] + public static extern EGLSurface CreatePbufferFromClientBuffer(EGLDisplay dpy, int buftype, EGLClientBuffer buffer, EGLConfig config, int[] attrib_list); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglSurfaceAttrib")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, int attribute, int value); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglBindTexImage")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool BindTexImage(EGLDisplay dpy, EGLSurface surface, int buffer); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglReleaseTexImage")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, int buffer); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglSwapInterval")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool SwapInterval(EGLDisplay dpy, int interval); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCreateContext")] + static extern IntPtr eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, int[] attrib_list); + + public static EGLContext CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, int[] attrib_list) + { + IntPtr ptr = eglCreateContext(dpy, config, share_context, attrib_list); + EGLContext ret = new EGLContext(ptr); + return ret; + } + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglDestroyContext")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool DestroyContext(EGLDisplay dpy, EGLContext ctx); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglMakeCurrent")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetCurrentContext")] + public static extern EGLContext GetCurrentContext(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetCurrentSurface")] + public static extern EGLSurface GetCurrentSurface(int readdraw); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglGetCurrentDisplay")] + public static extern EGLDisplay GetCurrentDisplay(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglQueryContext")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool QueryContext(EGLDisplay dpy, EGLContext ctx, int attribute, out int value); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglWaitGL")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool WaitGL(); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglWaitNative")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool WaitNative(int engine); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglSwapBuffers")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool SwapBuffers(EGLDisplay dpy, EGLSurface surface); + + [DllImportAttribute("libgles_cm.dll", EntryPoint = "eglCopyBuffers")] + [return: MarshalAsAttribute(UnmanagedType.I1)] + public static extern bool CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); + + } +#pragma warning restore 0169 +} \ No newline at end of file diff --git a/Source/OpenTK/Platform/Egl/EglContext.cs b/Source/OpenTK/Platform/Egl/EglContext.cs new file mode 100644 index 00000000..43e27fae --- /dev/null +++ b/Source/OpenTK/Platform/Egl/EglContext.cs @@ -0,0 +1,40 @@ +#region License +// +// The Open Toolkit Library License +// +// Copyright (c) 2006 - 2009 the Open Toolkit library. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +#endregion + +using System; + +using OpenTK.Graphics; + +namespace OpenTK.Platform.Egl +{ + public class EglContext : IGraphicsContext + { + public EglContext() + { + } + } +}