summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h')
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h b/gfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h
new file mode 100755
index 000000000..98c2fef46
--- /dev/null
+++ b/gfx/angle/src/libANGLE/renderer/gl/glx/FunctionsGLX.h
@@ -0,0 +1,96 @@
+//
+// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// FunctionsGLX.h: Defines the FunctionsGLX class to load functions and data from GLX
+
+#ifndef LIBANGLE_RENDERER_GL_GLX_FUNCTIONSGLX_H_
+#define LIBANGLE_RENDERER_GL_GLX_FUNCTIONSGLX_H_
+
+#include <string>
+#include <vector>
+
+#include "libANGLE/renderer/gl/glx/platform_glx.h"
+
+namespace rx
+{
+
+class FunctionsGLX
+{
+ public:
+ FunctionsGLX();
+ ~FunctionsGLX();
+
+ // Load data from GLX, can be called multiple times
+ bool initialize(Display *xDisplay, int screen, std::string *errorString);
+ void terminate();
+
+ bool hasExtension(const char *extension) const;
+ int majorVersion;
+ int minorVersion;
+
+ Display *getDisplay() const;
+ int getScreen() const;
+
+ PFNGETPROCPROC getProc;
+
+ // GLX 1.0
+ glx::Context createContext(XVisualInfo *visual, glx::Context share, bool direct) const;
+ void destroyContext(glx::Context context) const;
+ Bool makeCurrent(glx::Drawable drawable, glx::Context context) const;
+ void swapBuffers(glx::Drawable drawable) const;
+ Bool queryExtension(int *errorBase, int *event) const;
+ Bool queryVersion(int *major, int *minor) const;
+ glx::Context getCurrentContext() const;
+ glx::Drawable getCurrentDrawable() const;
+ void waitX() const;
+ void waitGL() const;
+
+ // GLX 1.1
+ const char *getClientString(int name) const;
+ const char *queryExtensionsString() const;
+
+ // GLX 1.3
+ glx::FBConfig *getFBConfigs(int *nElements) const;
+ glx::FBConfig *chooseFBConfig(const int *attribList, int *nElements) const;
+ int getFBConfigAttrib(glx::FBConfig config, int attribute, int *value) const;
+ XVisualInfo *getVisualFromFBConfig(glx::FBConfig config) const;
+ glx::Window createWindow(glx::FBConfig config, Window window, const int *attribList) const;
+ void destroyWindow(glx::Window window) const;
+ glx::Pbuffer createPbuffer(glx::FBConfig config, const int *attribList) const;
+ void destroyPbuffer(glx::Pbuffer pbuffer) const;
+ void queryDrawable(glx::Drawable drawable, int attribute, unsigned int *value) const;
+
+ // GLX_ARB_create_context
+ glx::Context createContextAttribsARB(glx::FBConfig config, glx::Context shareContext, Bool direct, const int *attribList) const;
+
+ // GLX_EXT_swap_control
+ void swapIntervalEXT(glx::Drawable drawable, int interval) const;
+
+ // GLX_MESA_swap_control
+ int swapIntervalMESA(int interval) const;
+
+ // GLX_SGI_swap_control
+ int swapIntervalSGI(int interval) const;
+
+ private:
+ // So as to isolate GLX from angle we do not include angleutils.h and cannot
+ // use angle::NonCopyable so we replicated it here instead.
+ FunctionsGLX(const FunctionsGLX&) = delete;
+ void operator=(const FunctionsGLX&) = delete;
+
+ struct GLXFunctionTable;
+
+ static void *sLibHandle;
+ Display *mXDisplay;
+ int mXScreen;
+
+ GLXFunctionTable *mFnPtrs;
+ std::vector<std::string> mExtensions;
+};
+
+}
+
+#endif // LIBANGLE_RENDERER_GL_GLX_FUNCTIONSGLX_H_