Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: tools/viewer/sk_app/mac/GLWindowContext_mac.cpp

Issue 2210603003: Get Mac viewer working with SDL (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix patch Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/libsdl/mac/sdl_mac.gypi ('k') | tools/viewer/sk_app/mac/WindowContextFactory_mac.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2016 Google Inc. 3 * Copyright 2016 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "../GLWindowContext.h" 9 #include "../GLWindowContext.h"
10 #include "WindowContextFactory_mac.h" 10 #include "WindowContextFactory_mac.h"
11 11
12 //#include <GL/gl.h> 12 #include "SDL.h"
13
14 #include <OpenGL/gl.h>
13 15
14 using sk_app::DisplayParams; 16 using sk_app::DisplayParams;
15 using sk_app::window_context_factory::MacWindowInfo; 17 using sk_app::window_context_factory::MacWindowInfo;
16 using sk_app::GLWindowContext; 18 using sk_app::GLWindowContext;
17 19
18 namespace { 20 namespace {
19 21
20 class GLWindowContext_mac : public GLWindowContext { 22 class GLWindowContext_mac : public GLWindowContext {
21 public: 23 public:
22 GLWindowContext_mac(const MacWindowInfo&, const DisplayParams&); 24 GLWindowContext_mac(const MacWindowInfo&, const DisplayParams&);
23 25
24 ~GLWindowContext_mac() override; 26 ~GLWindowContext_mac() override;
25 27
26 void onSwapBuffers() override; 28 void onSwapBuffers() override;
27 29
28 void onInitializeContext() override; 30 void onInitializeContext() override;
29 void onDestroyContext() override; 31 void onDestroyContext() override;
30 32
31 private: 33 private:
32 34 SDL_Window* fWindow;
33 #if 0 35 SDL_GLContext fGLContext;
34 // TODO: add Mac-specific GL display objects 36
35 Display* fDisplay; 37 typedef GLWindowContext INHERITED;
36 XWindow fWindow;
37 XVisualInfo* fVisualInfo;
38 GLXContext fGLContext;
39 #endif
40 }; 38 };
41 39
42 GLWindowContext_mac::GLWindowContext_mac(const MacWindowInfo& info, const Displa yParams& params) 40 GLWindowContext_mac::GLWindowContext_mac(const MacWindowInfo& info, const Displa yParams& params)
43 : GLWindowContext(params) 41 : INHERITED(params)
44 #if 0 42 , fWindow(info.fWindow)
45 // TODO: init Mac-specific OpenGL objects 43 , fGLContext(nullptr) {
46 , fDisplay(nullptr)
47 , fWindow(0)
48 , fGLContext(0)
49 #endif
50 {
51 44
52 // any config code here (particularly for msaa)? 45 // any config code here (particularly for msaa)?
53 46
54 this->initializeContext(); 47 this->initializeContext();
55 } 48 }
56 49
57 GLWindowContext_mac::~GLWindowContext_mac() { 50 GLWindowContext_mac::~GLWindowContext_mac() {
58 this->destroyContext(); 51 this->destroyContext();
59 } 52 }
60 53
61 void GLWindowContext_mac::onInitializeContext() { 54 void GLWindowContext_mac::onInitializeContext() {
62 #if 0 55 SkASSERT(fWindow);
63 // TODO: Init for Mac
64 SkASSERT(fDisplay);
65 56
66 fGLContext = glXCreateContext(fDisplay, fVisualInfo, nullptr, GL_TRUE); 57 fGLContext = SDL_GL_CreateContext(fWindow);
67 if (!fGLContext) { 58 if (!fGLContext) {
59 SkDebugf("%s\n", SDL_GetError());
68 return; 60 return;
69 } 61 }
70 62
71 if (glXMakeCurrent(fDisplay, fWindow, fGLContext)) { 63 if (0 == SDL_GL_MakeCurrent(fWindow, fGLContext)) {
72 glClearStencil(0); 64 glClearStencil(0);
73 glClearColor(0, 0, 0, 0); 65 glClearColor(0, 0, 0, 0);
74 glStencilMask(0xffffffff); 66 glStencilMask(0xffffffff);
75 glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 67 glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
76 68
77 int redBits, greenBits, blueBits; 69 int redBits, greenBits, blueBits;
78 glXGetConfig(fDisplay, fVisualInfo, GLX_RED_SIZE, &redBits); 70 SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &redBits);
79 glXGetConfig(fDisplay, fVisualInfo, GLX_GREEN_SIZE, &greenBits); 71 SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &greenBits);
80 glXGetConfig(fDisplay, fVisualInfo, GLX_BLUE_SIZE, &blueBits); 72 SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &blueBits);
81 fColorBits = redBits + greenBits + blueBits; 73 fColorBits = redBits + greenBits + blueBits;
82 glXGetConfig(fDisplay, fVisualInfo, GLX_STENCIL_SIZE, &fStencilBits);
83 glXGetConfig(fDisplay, fVisualInfo, GLX_SAMPLES_ARB, &fSampleCount);
84 74
85 XWindow root; 75 SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &fStencilBits);
86 int x, y; 76 SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &fSampleCount);
87 unsigned int border_width, depth; 77
88 XGetGeometry(fDisplay, fWindow, &root, &x, &y, 78 SDL_GetWindowSize(fWindow, &fWidth, &fHeight);
89 (unsigned int*)&fWidth, (unsigned int*)&fHeight, &border_wi dth, &depth);
90 glViewport(0, 0, fWidth, fHeight); 79 glViewport(0, 0, fWidth, fHeight);
80 } else {
81 SkDebugf("MakeCurrent failed: %s\n", SDL_GetError());
91 } 82 }
92 #endif
93 } 83 }
94 84
95 void GLWindowContext_mac::onDestroyContext() { 85 void GLWindowContext_mac::onDestroyContext() {
96 #if 0 86 if (!fWindow || !fGLContext) {
97 // TODO: teardown for Mac
98 if (!fDisplay || !fGLContext) {
99 return; 87 return;
100 } 88 }
101 glXMakeCurrent(fDisplay, None, nullptr); 89 SDL_GL_DeleteContext(fGLContext);
102 glXDestroyContext(fDisplay, fGLContext);
103 fGLContext = nullptr; 90 fGLContext = nullptr;
104 #endif
105 } 91 }
106 92
107 93
108 void GLWindowContext_mac::onSwapBuffers() { 94 void GLWindowContext_mac::onSwapBuffers() {
109 #if 0 95 if (fWindow && fGLContext) {
110 // TODO: swap for Mac 96 SDL_GL_SwapWindow(fWindow);
111 if (fDisplay && fGLContext) {
112 glXSwapBuffers(fDisplay, fWindow);
113 } 97 }
114 #endif
115 } 98 }
116 99
117 } // anonymous namespace 100 } // anonymous namespace
118 101
119
120 namespace sk_app { 102 namespace sk_app {
121 namespace window_context_factory { 103 namespace window_context_factory {
122 104
123 WindowContext* MakeGLForMac(const MacWindowInfo& info, const DisplayParams& para ms) { 105 WindowContext* NewGLForMac(const MacWindowInfo& info, const DisplayParams& param s) {
124 WindowContext* ctx = new GLWindowContext_mac(info, params); 106 WindowContext* ctx = new GLWindowContext_mac(info, params);
125 if (!ctx->isValid()) { 107 if (!ctx->isValid()) {
126 delete ctx; 108 delete ctx;
127 return nullptr; 109 return nullptr;
128 } 110 }
129 return ctx; 111 return ctx;
130 } 112 }
131 113
132 } // namespace window_context_factory 114 } // namespace window_context_factory
133 } // namespace sk_app 115 } // namespace sk_app
OLDNEW
« no previous file with comments | « third_party/libsdl/mac/sdl_mac.gypi ('k') | tools/viewer/sk_app/mac/WindowContextFactory_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698