示例#1
0
文件: OpenGL.cs 项目: zidonuke/OpenRA
        public static void Initialize()
        {
            // glGetError and glGetString are used in our error handlers
            // so we want these to be available early.
            try
            {
                glGetError          = Bind <GetError>("glGetError");
                glGetStringInternal = Bind <GetString>("glGetString");
            }
            catch (Exception)
            {
                throw new InvalidProgramException("Failed to initialize low-level OpenGL bindings. GPU information is not available");
            }

            DetectGLFeatures();
            if (!Features.HasFlag(GLFeatures.GL2OrGreater) || !Features.HasFlag(GLFeatures.FramebufferExt))
            {
                WriteGraphicsLog("Unsupported OpenGL version: " + glGetString(GL_VERSION));
                throw new InvalidProgramException("OpenGL Version Error: See graphics.log for details.");
            }
            else
            {
                Console.WriteLine("OpenGL version: " + glGetString(GL_VERSION));
            }

            try
            {
                glFlush                    = Bind <Flush>("glFlush");
                glViewport                 = Bind <Viewport>("glViewport");
                glClear                    = Bind <Clear>("glClear");
                glClearColor               = Bind <ClearColor>("glClearColor");
                glGetIntegerv              = Bind <GetIntegerv>("glGetIntegerv");
                glFinish                   = Bind <Finish>("glFinish");
                glCreateProgram            = Bind <CreateProgram>("glCreateProgram");
                glUseProgram               = Bind <UseProgram>("glUseProgram");
                glGetProgramiv             = Bind <GetProgramiv>("glGetProgramiv");
                glCreateShader             = Bind <CreateShader>("glCreateShader");
                glShaderSource             = Bind <ShaderSource>("glShaderSource");
                glCompileShader            = Bind <CompileShader>("glCompileShader");
                glGetShaderiv              = Bind <GetShaderiv>("glGetShaderiv");
                glAttachShader             = Bind <AttachShader>("glAttachShader");
                glGetShaderInfoLog         = Bind <GetShaderInfoLog>("glGetShaderInfoLog");
                glLinkProgram              = Bind <LinkProgram>("glLinkProgram");
                glGetProgramInfoLog        = Bind <GetProgramInfoLog>("glGetProgramInfoLog");
                glGetUniformLocation       = Bind <GetUniformLocation>("glGetUniformLocation");
                glGetActiveUniform         = Bind <GetActiveUniform>("glGetActiveUniform");
                glUniform1i                = Bind <Uniform1i>("glUniform1i");
                glUniform1f                = Bind <Uniform1f>("glUniform1f");
                glUniform2f                = Bind <Uniform2f>("glUniform2f");
                glUniform1fv               = Bind <Uniform1fv>("glUniform1fv");
                glUniform2fv               = Bind <Uniform2fv>("glUniform2fv");
                glUniform3fv               = Bind <Uniform3fv>("glUniform3fv");
                glUniform4fv               = Bind <Uniform4fv>("glUniform4fv");
                glUniformMatrix4fv         = Bind <UniformMatrix4fv>("glUniformMatrix4fv");
                glGenBuffers               = Bind <GenBuffers>("glGenBuffers");
                glBindBuffer               = Bind <BindBuffer>("glBindBuffer");
                glBufferData               = Bind <BufferData>("glBufferData");
                glBufferSubData            = Bind <BufferSubData>("glBufferSubData");
                glDeleteBuffers            = Bind <DeleteBuffers>("glDeleteBuffers");
                glBindAttribLocation       = Bind <BindAttribLocation>("glBindAttribLocation");
                glVertexAttribPointer      = Bind <VertexAttribPointer>("glVertexAttribPointer");
                glEnableVertexAttribArray  = Bind <EnableVertexAttribArray>("glEnableVertexAttribArray");
                glDisableVertexAttribArray = Bind <DisableVertexAttribArray>("glDisableVertexAttribArray");
                glDrawArrays               = Bind <DrawArrays>("glDrawArrays");
                glEnable                   = Bind <Enable>("glEnable");
                glDisable                  = Bind <Disable>("glDisable");
                glBlendEquation            = Bind <BlendEquation>("glBlendEquation");
                glBlendFunc                = Bind <BlendFunc>("glBlendFunc");
                glScissor                  = Bind <Scissor>("glScissor");
                glPushClientAttrib         = Bind <PushClientAttrib>("glPushClientAttrib");
                glPopClientAttrib          = Bind <PopClientAttrib>("glPopClientAttrib");
                glPixelStoref              = Bind <PixelStoref>("glPixelStoref");
                glReadPixels               = Bind <ReadPixels>("glReadPixels");
                glGenTextures              = Bind <GenTextures>("glGenTextures");
                glDeleteTextures           = Bind <DeleteTextures>("glDeleteTextures");
                glBindTexture              = Bind <BindTexture>("glBindTexture");
                glActiveTexture            = Bind <ActiveTexture>("glActiveTexture");
                glTexImage2D               = Bind <TexImage2D>("glTexImage2D");
                glGetTexImage              = Bind <GetTexImage>("glGetTexImage");
                glTexParameteri            = Bind <TexParameteri>("glTexParameteri");
                glTexParameterf            = Bind <TexParameterf>("glTexParameterf");
                glGenFramebuffers          = Bind <GenFramebuffers>("glGenFramebuffersEXT");
                glBindFramebuffer          = Bind <BindFramebuffer>("glBindFramebufferEXT");
                glFramebufferTexture2D     = Bind <FramebufferTexture2D>("glFramebufferTexture2DEXT");
                glDeleteFramebuffers       = Bind <DeleteFramebuffers>("glDeleteFramebuffersEXT");
                glGenRenderbuffers         = Bind <GenRenderbuffers>("glGenRenderbuffersEXT");
                glBindRenderbuffer         = Bind <BindRenderbuffer>("glBindRenderbufferEXT");
                glRenderbufferStorage      = Bind <RenderbufferStorage>("glRenderbufferStorageEXT");
                glDeleteRenderbuffers      = Bind <DeleteRenderbuffers>("glDeleteRenderbuffersEXT");
                glFramebufferRenderbuffer  = Bind <FramebufferRenderbuffer>("glFramebufferRenderbufferEXT");
                glCheckFramebufferStatus   = Bind <CheckFramebufferStatus>("glCheckFramebufferStatusEXT");
            }
            catch (Exception e)
            {
                WriteGraphicsLog("Failed to initialize OpenGL bindings.\nInner exception was: {0}".F(e));
                throw new InvalidProgramException("Failed to initialize OpenGL. See graphics.log for details.");
            }
        }
示例#2
0
        public static void Initialize()
        {
            try
            {
                // First set up the bindings we need for error handling
                glEnable             = Bind <Enable>("glEnable");
                glDisable            = Bind <Disable>("glDisable");
                glGetError           = Bind <GetError>("glGetError");
                glGetStringInternal  = Bind <GetString>("glGetString");
                glGetStringiInternal = Bind <GetStringi>("glGetStringi");
            }
            catch (Exception e)
            {
                throw new InvalidProgramException("Failed to initialize low-level OpenGL bindings. GPU information is not available.", e);
            }

            DetectGLFeatures();

            if (!Features.HasFlag(GLFeatures.Core))
            {
                WriteGraphicsLog("Unsupported OpenGL version: " + glGetString(GL_VERSION));
                throw new InvalidProgramException("OpenGL Version Error: See graphics.log for details.");
            }

            // Setup the debug message callback handler
            if (Features.HasFlag(GLFeatures.DebugMessagesCallback))
            {
                try
                {
                    glDebugMessageCallback = Bind <DebugMessageCallback>("glDebugMessageCallback");
                    glDebugMessageInsert   = Bind <DebugMessageInsert>("glDebugMessageInsert");

                    glEnable(GL_DEBUG_OUTPUT);
                    glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);

                    // Need to keep a reference to the callback so it doesn't get garbage collected
                    DebugMessageHandle = DebugMessageHandler;
                    glDebugMessageCallback(DebugMessageHandle, IntPtr.Zero);
                }
                catch (Exception e)
                {
                    throw new InvalidProgramException("Failed to initialize an OpenGL debug message callback.", e);
                }
            }

            Console.WriteLine("OpenGL version: " + glGetString(GL_VERSION));

            try
            {
                glFlush                    = Bind <Flush>("glFlush");
                glViewport                 = Bind <Viewport>("glViewport");
                glClear                    = Bind <Clear>("glClear");
                glClearColor               = Bind <ClearColor>("glClearColor");
                glGetIntegerv              = Bind <GetIntegerv>("glGetIntegerv");
                glFinish                   = Bind <Finish>("glFinish");
                glCreateProgram            = Bind <CreateProgram>("glCreateProgram");
                glUseProgram               = Bind <UseProgram>("glUseProgram");
                glGetProgramiv             = Bind <GetProgramiv>("glGetProgramiv");
                glCreateShader             = Bind <CreateShader>("glCreateShader");
                glShaderSource             = Bind <ShaderSource>("glShaderSource");
                glCompileShader            = Bind <CompileShader>("glCompileShader");
                glGetShaderiv              = Bind <GetShaderiv>("glGetShaderiv");
                glAttachShader             = Bind <AttachShader>("glAttachShader");
                glGetShaderInfoLog         = Bind <GetShaderInfoLog>("glGetShaderInfoLog");
                glLinkProgram              = Bind <LinkProgram>("glLinkProgram");
                glGetProgramInfoLog        = Bind <GetProgramInfoLog>("glGetProgramInfoLog");
                glGetUniformLocation       = Bind <GetUniformLocation>("glGetUniformLocation");
                glGetActiveUniform         = Bind <GetActiveUniform>("glGetActiveUniform");
                glUniform1i                = Bind <Uniform1i>("glUniform1i");
                glUniform1f                = Bind <Uniform1f>("glUniform1f");
                glUniform2f                = Bind <Uniform2f>("glUniform2f");
                glUniform3f                = Bind <Uniform3f>("glUniform3f");
                glUniform1fv               = Bind <Uniform1fv>("glUniform1fv");
                glUniform2fv               = Bind <Uniform2fv>("glUniform2fv");
                glUniform3fv               = Bind <Uniform3fv>("glUniform3fv");
                glUniform4fv               = Bind <Uniform4fv>("glUniform4fv");
                glUniformMatrix4fv         = Bind <UniformMatrix4fv>("glUniformMatrix4fv");
                glGenBuffers               = Bind <GenBuffers>("glGenBuffers");
                glBindBuffer               = Bind <BindBuffer>("glBindBuffer");
                glBufferData               = Bind <BufferData>("glBufferData");
                glBufferSubData            = Bind <BufferSubData>("glBufferSubData");
                glDeleteBuffers            = Bind <DeleteBuffers>("glDeleteBuffers");
                glGenVertexArrays          = Bind <GenVertexArrays>("glGenVertexArrays");
                glBindVertexArray          = Bind <BindVertexArray>("glBindVertexArray");
                glBindAttribLocation       = Bind <BindAttribLocation>("glBindAttribLocation");
                glBindFragDataLocation     = Bind <BindFragDataLocation>("glBindFragDataLocation");
                glVertexAttribPointer      = Bind <VertexAttribPointer>("glVertexAttribPointer");
                glEnableVertexAttribArray  = Bind <EnableVertexAttribArray>("glEnableVertexAttribArray");
                glDisableVertexAttribArray = Bind <DisableVertexAttribArray>("glDisableVertexAttribArray");
                glDrawArrays               = Bind <DrawArrays>("glDrawArrays");
                glBlendEquation            = Bind <BlendEquation>("glBlendEquation");
                glBlendEquationSeparate    = Bind <BlendEquationSeparate>("glBlendEquationSeparate");
                glBlendFunc                = Bind <BlendFunc>("glBlendFunc");
                glDepthFunc                = Bind <DepthFunc>("glDepthFunc");
                glScissor                  = Bind <Scissor>("glScissor");
                glReadPixels               = Bind <ReadPixels>("glReadPixels");
                glGenTextures              = Bind <GenTextures>("glGenTextures");
                glDeleteTextures           = Bind <DeleteTextures>("glDeleteTextures");
                glIsTexture                = Bind <IsTexture>("glIsTexture");
                glBindTexture              = Bind <BindTexture>("glBindTexture");
                glActiveTexture            = Bind <ActiveTexture>("glActiveTexture");
                glTexImage2D               = Bind <TexImage2D>("glTexImage2D");
                glGetTexImage              = Bind <GetTexImage>("glGetTexImage");
                glTexParameteri            = Bind <TexParameteri>("glTexParameteri");
                glTexParameterf            = Bind <TexParameterf>("glTexParameterf");
                glGenFramebuffers          = Bind <GenFramebuffers>("glGenFramebuffers");
                glBindFramebuffer          = Bind <BindFramebuffer>("glBindFramebuffer");
                glFramebufferTexture2D     = Bind <FramebufferTexture2D>("glFramebufferTexture2D");
                glDeleteFramebuffers       = Bind <DeleteFramebuffers>("glDeleteFramebuffers");
                glGenRenderbuffers         = Bind <GenRenderbuffers>("glGenRenderbuffers");
                glBindRenderbuffer         = Bind <BindRenderbuffer>("glBindRenderbuffer");
                glRenderbufferStorage      = Bind <RenderbufferStorage>("glRenderbufferStorage");
                glDeleteRenderbuffers      = Bind <DeleteRenderbuffers>("glDeleteRenderbuffers");
                glFramebufferRenderbuffer  = Bind <FramebufferRenderbuffer>("glFramebufferRenderbuffer");
                glCheckFramebufferStatus   = Bind <CheckFramebufferStatus>("glCheckFramebufferStatus");
            }
            catch (Exception e)
            {
                WriteGraphicsLog("Failed to initialize OpenGL bindings.\nInner exception was: {0}".F(e));
                throw new InvalidProgramException("Failed to initialize OpenGL. See graphics.log for details.", e);
            }
        }
示例#3
0
文件: OpenGL.cs 项目: dnqbob/OpenRA
        public static void Initialize(bool preferLegacyProfile)
        {
            try
            {
                // First set up the bindings we need for error handling
                glEnable             = Bind <Enable>("glEnable");
                glDisable            = Bind <Disable>("glDisable");
                glGetError           = Bind <GetError>("glGetError");
                glGetStringInternal  = Bind <GetString>("glGetString");
                glGetStringiInternal = Bind <GetStringi>("glGetStringi");
                glGetIntegerv        = Bind <GetIntegerv>("glGetIntegerv");
            }
            catch (Exception e)
            {
                throw new InvalidProgramException("Failed to initialize low-level OpenGL bindings. GPU information is not available.", e);
            }

            if (!DetectGLFeatures(preferLegacyProfile))
            {
                WriteGraphicsLog("Unsupported OpenGL version: " + glGetString(GL_VERSION));
                throw new InvalidProgramException("OpenGL Version Error: See graphics.log for details.");
            }

            // Allow users to force-disable the debug message callback feature to work around driver bugs
            if (Features.HasFlag(GLFeatures.DebugMessagesCallback) && Game.Settings.Graphics.DisableGLDebugMessageCallback)
            {
                Features ^= GLFeatures.DebugMessagesCallback;
            }

            // Force disable the debug message callback feature on Linux + AMD GPU to work around a startup freeze
            if (Features.HasFlag(GLFeatures.DebugMessagesCallback) && Platform.CurrentPlatform == PlatformType.Linux)
            {
                var renderer = glGetString(GL_RENDERER);
                if (renderer.Contains("AMD") || renderer.Contains("Radeon"))
                {
                    Features ^= GLFeatures.DebugMessagesCallback;
                }
            }

            // Older Intel on Windows is broken too
            if (Features.HasFlag(GLFeatures.DebugMessagesCallback) && Platform.CurrentPlatform == PlatformType.Windows)
            {
                var renderer = glGetString(GL_RENDERER);
                if (renderer.Contains("HD Graphics") && !renderer.Contains("UHD Graphics"))
                {
                    Features ^= GLFeatures.DebugMessagesCallback;
                }
            }

            // Setup the debug message callback handler
            if (Features.HasFlag(GLFeatures.DebugMessagesCallback))
            {
                try
                {
                    var suffix = Profile == GLProfile.Embedded ? "KHR" : "";
                    glDebugMessageCallback = Bind <DebugMessageCallback>("glDebugMessageCallback" + suffix);
                    glDebugMessageInsert   = Bind <DebugMessageInsert>("glDebugMessageInsert" + suffix);

                    glEnable(GL_DEBUG_OUTPUT);
                    glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);

                    // Need to keep a reference to the callback so it doesn't get garbage collected
                    DebugMessageHandle = DebugMessageHandler;
                    glDebugMessageCallback(DebugMessageHandle, IntPtr.Zero);
                }
                catch (Exception e)
                {
                    throw new InvalidProgramException("Failed to initialize an OpenGL debug message callback.", e);
                }
            }

            Console.WriteLine("OpenGL renderer: " + glGetString(GL_RENDERER));
            Console.WriteLine("OpenGL version: " + glGetString(GL_VERSION));

            try
            {
                glFlush                    = Bind <Flush>("glFlush");
                glViewport                 = Bind <Viewport>("glViewport");
                glClear                    = Bind <Clear>("glClear");
                glClearColor               = Bind <ClearColor>("glClearColor");
                glFinish                   = Bind <Finish>("glFinish");
                glCreateProgram            = Bind <CreateProgram>("glCreateProgram");
                glUseProgram               = Bind <UseProgram>("glUseProgram");
                glGetProgramiv             = Bind <GetProgramiv>("glGetProgramiv");
                glCreateShader             = Bind <CreateShader>("glCreateShader");
                glShaderSource             = Bind <ShaderSource>("glShaderSource");
                glCompileShader            = Bind <CompileShader>("glCompileShader");
                glGetShaderiv              = Bind <GetShaderiv>("glGetShaderiv");
                glAttachShader             = Bind <AttachShader>("glAttachShader");
                glGetShaderInfoLog         = Bind <GetShaderInfoLog>("glGetShaderInfoLog");
                glLinkProgram              = Bind <LinkProgram>("glLinkProgram");
                glGetProgramInfoLog        = Bind <GetProgramInfoLog>("glGetProgramInfoLog");
                glGetUniformLocation       = Bind <GetUniformLocation>("glGetUniformLocation");
                glGetActiveUniform         = Bind <GetActiveUniform>("glGetActiveUniform");
                glUniform1i                = Bind <Uniform1i>("glUniform1i");
                glUniform1f                = Bind <Uniform1f>("glUniform1f");
                glUniform2f                = Bind <Uniform2f>("glUniform2f");
                glUniform3f                = Bind <Uniform3f>("glUniform3f");
                glUniform1fv               = Bind <Uniform1fv>("glUniform1fv");
                glUniform2fv               = Bind <Uniform2fv>("glUniform2fv");
                glUniform3fv               = Bind <Uniform3fv>("glUniform3fv");
                glUniform4fv               = Bind <Uniform4fv>("glUniform4fv");
                glUniformMatrix4fv         = Bind <UniformMatrix4fv>("glUniformMatrix4fv");
                glGenBuffers               = Bind <GenBuffers>("glGenBuffers");
                glBindBuffer               = Bind <BindBuffer>("glBindBuffer");
                glBufferData               = Bind <BufferData>("glBufferData");
                glBufferSubData            = Bind <BufferSubData>("glBufferSubData");
                glDeleteBuffers            = Bind <DeleteBuffers>("glDeleteBuffers");
                glBindAttribLocation       = Bind <BindAttribLocation>("glBindAttribLocation");
                glVertexAttribPointer      = Bind <VertexAttribPointer>("glVertexAttribPointer");
                glEnableVertexAttribArray  = Bind <EnableVertexAttribArray>("glEnableVertexAttribArray");
                glDisableVertexAttribArray = Bind <DisableVertexAttribArray>("glDisableVertexAttribArray");
                glDrawArrays               = Bind <DrawArrays>("glDrawArrays");
                glBlendEquation            = Bind <BlendEquation>("glBlendEquation");
                glBlendEquationSeparate    = Bind <BlendEquationSeparate>("glBlendEquationSeparate");
                glBlendFunc                = Bind <BlendFunc>("glBlendFunc");
                glDepthFunc                = Bind <DepthFunc>("glDepthFunc");
                glScissor                  = Bind <Scissor>("glScissor");
                glReadPixels               = Bind <ReadPixels>("glReadPixels");
                glGenTextures              = Bind <GenTextures>("glGenTextures");
                glDeleteTextures           = Bind <DeleteTextures>("glDeleteTextures");
                glIsTexture                = Bind <IsTexture>("glIsTexture");
                glBindTexture              = Bind <BindTexture>("glBindTexture");
                glActiveTexture            = Bind <ActiveTexture>("glActiveTexture");
                glTexImage2D               = Bind <TexImage2D>("glTexImage2D");
                glTexParameteri            = Bind <TexParameteri>("glTexParameteri");
                glTexParameterf            = Bind <TexParameterf>("glTexParameterf");

                if (Profile != GLProfile.Legacy)
                {
                    if (Profile != GLProfile.Embedded)
                    {
                        glGetTexImage          = Bind <GetTexImage>("glGetTexImage");
                        glBindFragDataLocation = Bind <BindFragDataLocation>("glBindFragDataLocation");
                    }
                    else
                    {
                        glGetTexImage          = null;
                        glBindFragDataLocation = null;
                    }

                    glGenVertexArrays         = Bind <GenVertexArrays>("glGenVertexArrays");
                    glBindVertexArray         = Bind <BindVertexArray>("glBindVertexArray");
                    glGenFramebuffers         = Bind <GenFramebuffers>("glGenFramebuffers");
                    glBindFramebuffer         = Bind <BindFramebuffer>("glBindFramebuffer");
                    glFramebufferTexture2D    = Bind <FramebufferTexture2D>("glFramebufferTexture2D");
                    glDeleteFramebuffers      = Bind <DeleteFramebuffers>("glDeleteFramebuffers");
                    glGenRenderbuffers        = Bind <GenRenderbuffers>("glGenRenderbuffers");
                    glBindRenderbuffer        = Bind <BindRenderbuffer>("glBindRenderbuffer");
                    glRenderbufferStorage     = Bind <RenderbufferStorage>("glRenderbufferStorage");
                    glDeleteRenderbuffers     = Bind <DeleteRenderbuffers>("glDeleteRenderbuffers");
                    glFramebufferRenderbuffer = Bind <FramebufferRenderbuffer>("glFramebufferRenderbuffer");
                    glCheckFramebufferStatus  = Bind <CheckFramebufferStatus>("glCheckFramebufferStatus");
                }
                else
                {
                    glGenVertexArrays         = null;
                    glBindVertexArray         = null;
                    glBindFragDataLocation    = null;
                    glGenFramebuffers         = Bind <GenFramebuffers>("glGenFramebuffersEXT");
                    glBindFramebuffer         = Bind <BindFramebuffer>("glBindFramebufferEXT");
                    glFramebufferTexture2D    = Bind <FramebufferTexture2D>("glFramebufferTexture2DEXT");
                    glDeleteFramebuffers      = Bind <DeleteFramebuffers>("glDeleteFramebuffersEXT");
                    glGenRenderbuffers        = Bind <GenRenderbuffers>("glGenRenderbuffersEXT");
                    glBindRenderbuffer        = Bind <BindRenderbuffer>("glBindRenderbufferEXT");
                    glRenderbufferStorage     = Bind <RenderbufferStorage>("glRenderbufferStorageEXT");
                    glDeleteRenderbuffers     = Bind <DeleteRenderbuffers>("glDeleteRenderbuffersEXT");
                    glFramebufferRenderbuffer = Bind <FramebufferRenderbuffer>("glFramebufferRenderbufferEXT");
                    glCheckFramebufferStatus  = Bind <CheckFramebufferStatus>("glCheckFramebufferStatusEXT");
                }
            }
            catch (Exception e)
            {
                WriteGraphicsLog("Failed to initialize OpenGL bindings.\nInner exception was: {0}".F(e));
                throw new InvalidProgramException("Failed to initialize OpenGL. See graphics.log for details.", e);
            }
        }
示例#4
0
文件: OpenGLExt.cs 项目: r-bel/glorg2
 public static void InitFramebuffers(OpenGLContext ctx)
 {
     glIsRenderbuffer = ctx.GetProc<IsRenderbuffer>("glIsRenderbuffer");
     glBindRenderbuffer = ctx.GetProc<BindRenderbuffer>("glBindRenderbuffer");
     glDeleteRenderbuffers = ctx.GetProc<DeleteRenderbuffers>("glDeleteRenderbuffers");
     glGenRenderbuffers = ctx.GetProc<GenRenderbuffers>("glGenRenderbuffers");
     glRenderbufferStorage = ctx.GetProc<RenderbufferStorage>("glRenderbufferStorage");
     glGetRenderbufferParameteriv = ctx.GetProc<GetRenderbufferParameteriv>("glGetRenderbufferParameteriv");
     glIsFramebuffer = ctx.GetProc<IsFramebuffer>("glIsFramebuffer");
     glBindFramebuffer = ctx.GetProc<BindFramebuffer>("glBindFramebuffer");
     glDeleteFramebuffers = ctx.GetProc<DeleteFramebuffers>("glDeleteFramebuffers");
     glGenFramebuffers = ctx.GetProc<GenFramebuffers>("glGenFramebuffers");
     glCheckFramebufferStatus = ctx.GetProc<CheckFramebufferStatus>("glCheckFramebufferStatus");
     glFramebufferTexture1D = ctx.GetProc<FramebufferTexture1D>("glFramebufferTexture1D");
     glFramebufferTexture2D = ctx.GetProc<FramebufferTexture2D>("glFramebufferTexture2D");
     glFramebufferTexture3D = ctx.GetProc<FramebufferTexture3D>("glFramebufferTexture3D");
     glFramebufferRenderbuffer = ctx.GetProc<FramebufferRenderbuffer>("glFramebufferRenderbuffer");
     glGetFramebufferAttachmentParameteriv = ctx.GetProc<GetFramebufferAttachmentParameteriv>("glGetFramebufferAttachmentParameteriv");
     glGenerateMipmap = ctx.GetProc<GenerateMipmap>("glGenerateMipmap");
     glBlitFramebuffer = ctx.GetProc<BlitFramebuffer>("glBlitFramebuffer");
     glRenderbufferStorageMultisample = ctx.GetProc<RenderbufferStorageMultisample>("glRenderbufferStorageMultisample");
     glFramebufferTextureLayer = ctx.GetProc<FramebufferTextureLayer>("glFramebufferTextureLayer");
 }