public static RenderContext CreateRenderContext(ref RenderContextCreateInfo contextCI, Sdl2Window window) { GraphicsBackend?backend = contextCI.Backend; if (!backend.HasValue) { backend = GetPlatformDefaultBackend(); } switch (backend) { case GraphicsBackend.Direct3D11: return(CreateDefaultD3DRenderContext(ref contextCI, window)); case GraphicsBackend.OpenGL: return(CreateDefaultOpenGLRenderContext(ref contextCI, window)); case GraphicsBackend.OpenGLES: return(CreateDefaultOpenGLESRenderContext(ref contextCI, window)); case GraphicsBackend.Vulkan: return(CreateVulkanRenderContext(ref contextCI, window)); default: throw new VeldridException("Invalid GraphicsBackend: " + contextCI.Backend); } }
public static void CreateWindowAndRenderContext( ref WindowCreateInfo windowCI, ref RenderContextCreateInfo contextCI, out Sdl2Window window, out RenderContext rc) { window = CreateWindow(ref windowCI); rc = CreateRenderContext(ref contextCI, window); }
public static D3DRenderContext CreateDefaultD3DRenderContext(ref RenderContextCreateInfo contextCI, Sdl2Window window) { SharpDX.Direct3D11.DeviceCreationFlags flags = SharpDX.Direct3D11.DeviceCreationFlags.None; if (contextCI.DebugContext) { flags |= SharpDX.Direct3D11.DeviceCreationFlags.Debug; } return(new D3DRenderContext(window, flags)); }
public static unsafe RenderContext CreateVulkanRenderContext(ref RenderContextCreateInfo contextCI, Sdl2Window window) { IntPtr sdlHandle = window.SdlWindowHandle; SDL_SysWMinfo sysWmInfo; Sdl2Native.SDL_GetVersion(&sysWmInfo.version); Sdl2Native.SDL_GetWMWindowInfo(sdlHandle, &sysWmInfo); VkSurfaceSource surfaceSource = GetSurfaceSource(sysWmInfo); VkRenderContext rc = new VkRenderContext(surfaceSource, window.Width, window.Height); if (contextCI.DebugContext) { rc.EnableDebugCallback(); } return(rc); }
public static OpenGLRenderContext CreateDefaultOpenGLRenderContext(ref RenderContextCreateInfo contextCI, Sdl2Window window) { IntPtr sdlHandle = window.SdlWindowHandle; if (contextCI.DebugContext) { Sdl2Native.SDL_GL_SetAttribute(SDL_GLAttribute.ContextFlags, (int)SDL_GLContextFlag.Debug); } Sdl2Native.SDL_GL_SetAttribute(SDL_GLAttribute.ContextProfileMask, (int)SDL_GLProfile.Core); Sdl2Native.SDL_GL_SetAttribute(SDL_GLAttribute.ContextMajorVersion, 4); Sdl2Native.SDL_GL_SetAttribute(SDL_GLAttribute.ContextMinorVersion, 0); IntPtr contextHandle = Sdl2Native.SDL_GL_CreateContext(sdlHandle); if (contextHandle == IntPtr.Zero) { unsafe { byte * error = Sdl2Native.SDL_GetError(); string errorString = Utilities.GetString(error); throw new VeldridException("Unable to create GL Context: " + errorString); } } Sdl2Native.SDL_GL_MakeCurrent(sdlHandle, contextHandle); OpenGLPlatformContextInfo ci = new OpenGLPlatformContextInfo( contextHandle, Sdl2Native.SDL_GL_GetProcAddress, Sdl2Native.SDL_GL_GetCurrentContext, () => Sdl2Native.SDL_GL_SwapWindow(sdlHandle)); OpenGLRenderContext rc = new OpenGLRenderContext(window, ci); if (contextCI.DebugContext) { // Slows things down significantly -- Only use when debugging something specific. rc.EnableDebugCallback(OpenTK.Graphics.OpenGL.DebugSeverity.DebugSeverityNotification); } return(rc); }