Index: tools/viewer/sk_app/unix/GLWindowContext_unix.cpp |
diff --git a/tools/viewer/sk_app/unix/GLWindowContext_unix.cpp b/tools/viewer/sk_app/unix/GLWindowContext_unix.cpp |
index cde1eb2b5c615cbcae2186340585840b074c55ff..6df1a523a7aeee7a62ae3aea581d7c7e685d90b6 100644 |
--- a/tools/viewer/sk_app/unix/GLWindowContext_unix.cpp |
+++ b/tools/viewer/sk_app/unix/GLWindowContext_unix.cpp |
@@ -6,50 +6,50 @@ |
* found in the LICENSE file. |
*/ |
-#include "GLWindowContext_unix.h" |
+#include "../GLWindowContext.h" |
+#include "WindowContextFactory_unix.h" |
#include <GL/gl.h> |
-#include "Window_unix.h" |
+using sk_app::window_context_factory::XlibWindowInfo; |
+using sk_app::DisplayParams; |
+using sk_app::GLWindowContext; |
-namespace sk_app { |
+namespace { |
-// platform-dependent create |
-GLWindowContext* GLWindowContext::Create(void* platformData, const DisplayParams& params) { |
- GLWindowContext_unix* ctx = new GLWindowContext_unix(platformData, params); |
- if (!ctx->isValid()) { |
- delete ctx; |
- return nullptr; |
- } |
- return ctx; |
-} |
+class GLWindowContext_xlib : public GLWindowContext { |
+public: |
+ GLWindowContext_xlib(const XlibWindowInfo&, const DisplayParams&); |
+ ~GLWindowContext_xlib() override; |
-GLWindowContext_unix::GLWindowContext_unix(void* platformData, const DisplayParams& params) |
- : GLWindowContext(platformData, params) |
- , fDisplay(nullptr) |
- , fWindow(0) |
- , fGLContext(0) { |
+ void onSwapBuffers() override; |
- // any config code here (particularly for msaa)? |
+ void onDestroyContext() override; |
- this->initializeContext(platformData, params); |
-} |
+protected: |
+ void onInitializeContext() override; |
-GLWindowContext_unix::~GLWindowContext_unix() { |
- this->destroyContext(); |
-} |
+private: |
+ GLWindowContext_xlib(void*, const DisplayParams&); |
-void GLWindowContext_unix::onInitializeContext(void* platformData, const DisplayParams& params) { |
- ContextPlatformData_unix* unixPlatformData = |
- reinterpret_cast<ContextPlatformData_unix*>(platformData); |
+ Display* fDisplay; |
+ XWindow fWindow; |
+ XVisualInfo* fVisualInfo; |
+ GLXContext fGLContext; |
+}; |
- if (unixPlatformData) { |
- fDisplay = unixPlatformData->fDisplay; |
- fWindow = unixPlatformData->fWindow; |
- fVisualInfo = unixPlatformData->fVisualInfo; |
- } |
- SkASSERT(fDisplay); |
+GLWindowContext_xlib::GLWindowContext_xlib(const XlibWindowInfo& winInfo, const DisplayParams& params) |
+ : GLWindowContext(params) |
+ , fDisplay(winInfo.fDisplay) |
+ , fWindow(winInfo.fWindow) |
+ , fVisualInfo(winInfo.fVisualInfo) |
+ , fGLContext() { |
+ this->initializeContext(); |
+} |
+void GLWindowContext_xlib::onInitializeContext() { |
+ // any config code here (particularly for msaa)? |
+ SkASSERT(fDisplay); |
fGLContext = glXCreateContext(fDisplay, fVisualInfo, nullptr, GL_TRUE); |
if (!fGLContext) { |
return; |
@@ -73,12 +73,16 @@ void GLWindowContext_unix::onInitializeContext(void* platformData, const Display |
int x, y; |
unsigned int border_width, depth; |
XGetGeometry(fDisplay, fWindow, &root, &x, &y, |
- (unsigned int*)&fWidth, (unsigned int*)&fHeight, &border_width, &depth); |
+ (unsigned int*)&fWidth, (unsigned int*)&fHeight, &border_width, &depth); |
glViewport(0, 0, fWidth, fHeight); |
} |
} |
-void GLWindowContext_unix::onDestroyContext() { |
+GLWindowContext_xlib::~GLWindowContext_xlib() { |
+ this->destroyContext(); |
+} |
+ |
+void GLWindowContext_xlib::onDestroyContext() { |
if (!fDisplay || !fGLContext) { |
return; |
} |
@@ -87,12 +91,27 @@ void GLWindowContext_unix::onDestroyContext() { |
fGLContext = nullptr; |
} |
- |
-void GLWindowContext_unix::onSwapBuffers() { |
+void GLWindowContext_xlib::onSwapBuffers() { |
if (fDisplay && fGLContext) { |
glXSwapBuffers(fDisplay, fWindow); |
} |
} |
+} // anonymous namespace |
+ |
+namespace sk_app { |
+ |
+namespace window_context_factory { |
+ |
+WindowContext* NewGLForXlib(const XlibWindowInfo& winInfo, const DisplayParams& params) { |
+ WindowContext* ctx = new GLWindowContext_xlib(winInfo, params); |
+ if (!ctx->isValid()) { |
+ delete ctx; |
+ return nullptr; |
+ } |
+ return ctx; |
+} |
+ |
+} // namespace window_context_factory |
-} //namespace sk_app |
+} // namespace sk_app |