예제 #1
0
        public void AssembleInterfaceIsValid()
        {
            using (var ctx = CreateGlContext()) {
                ctx.MakeCurrent();

                if (IsMac)
                {
                    var lib = LibraryLoader.LoadLibrary("/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib");

                    var glInterface = GRGlInterface.Create(name => {
                        return(LibraryLoader.GetSymbol(lib, name));
                    });

                    Assert.NotNull(glInterface);
                    Assert.True(glInterface.Validate());

                    LibraryLoader.FreeLibrary(lib);
                }
                else if (IsWindows)
                {
                    var lib = LibraryLoader.LoadLibrary("opengl32.dll");

                    var glInterface = GRGlInterface.Create(name => {
                        var ptr = LibraryLoader.GetSymbol(lib, name);
                        if (ptr == IntPtr.Zero)
                        {
                            ptr = wglGetProcAddress(name);
                        }
                        return(ptr);
                    });

                    Assert.NotNull(glInterface);
                    Assert.True(glInterface.Validate());

                    LibraryLoader.FreeLibrary(lib);
                }
                else if (IsLinux)
                {
                    var glInterface = GRGlInterface.Create(name => {
                        return(glXGetProcAddress(name));
                    });

                    Assert.NotNull(glInterface);
                    Assert.True(glInterface.Validate());
                }
                else
                {
                    // more platforms !!!
                    throw new Exception("Some strange platform that is not Windows, macOS nor Linux...");
                }
            }
        }