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

Side by Side Diff: src/views/sdl/SkOSWindow_SDL.cpp

Issue 1410703009: Revert of Wire up SDL on Android (Closed) Base URL: https://skia.googlesource.com/skia.git@sdl
Patch Set: Created 5 years, 1 month 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 | « platform_tools/android/gyp/skia_android.gypi ('k') | third_party/libsdl/android/SDL_config.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 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "SkOSWindow_SDL.h" 7 #include "SkOSWindow_SDL.h"
8 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 9
10 #if defined(SK_BUILD_FOR_ANDROID)
11 #include <GLES/gl.h>
12 #else
13 #include <GL/gl.h> 10 #include <GL/gl.h>
14 #endif
15 11
16 const int SCREEN_WIDTH = 640; 12 const int SCREEN_WIDTH = 640;
17 const int SCREEN_HEIGHT = 480; 13 const int SCREEN_HEIGHT = 480;
18 14
19 static void handle_error() { 15 static void handle_error() {
20 const char* error = SDL_GetError(); 16 const char* error = SDL_GetError();
21 SkDebugf("SDL Error: %s\n", error); 17 SkDebugf("SDL Error: %s\n", error);
22 SDL_ClearError(); 18 SDL_ClearError();
23 } 19 }
24 20
25 SkOSWindow::SkOSWindow(void* screen) : fQuit(false) , fGLContext(nullptr) { 21 SkOSWindow::SkOSWindow(void* screen) : fQuit(false) , fGLContext(nullptr) {
26 #if defined(SK_BUILD_FOR_ANDROID) 22 //Create window
27 // TODO we should try and get a 3.0 context first 23 SDL_Init(SDL_INIT_VIDEO|SDL_INIT_GAMECONTROLLER|SDL_INIT_EVENTS);
28 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); 24 fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOW POS_UNDEFINED,
29 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); 25 SCREEN_WIDTH, SCREEN_HEIGHT,
30 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); 26 SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN );
31 fWindowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE |
32 SDL_WINDOW_BORDERLESS | SDL_WINDOW_FULLSCREEN_DESKTOP |
33 SDL_WINDOW_ALLOW_HIGHDPI;
34 #else
35 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
36 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
37 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
38 SDL_StartTextInput();
39
40 fWindowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
41 #endif
42 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
43 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
44 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
45 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
46 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
47 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
48
49 SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
50
51 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) {
52 handle_error();
53 return;
54 }
55
56 SDL_DisplayMode dm;
57 if (SDL_GetDesktopDisplayMode(0, &dm) != 0) {
58 handle_error();
59 return;
60 }
61
62 fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWP OS_CENTERED,
63 dm.w, dm.h, fWindowFlags);
64
65 if (!fWindow) { 27 if (!fWindow) {
66 handle_error(); 28 handle_error();
67 return; 29 return;
68 } 30 }
69 this->resize(SkIntToScalar(dm.w), SkIntToScalar(dm.h)); 31 SDL_StartTextInput();
32 this->resize(SCREEN_WIDTH, SCREEN_HEIGHT);
70 } 33 }
71 34
72 SkOSWindow::~SkOSWindow() { 35 SkOSWindow::~SkOSWindow() {
73 if (fGLContext) { 36 if (fGLContext) {
74 SDL_GL_DeleteContext(fGLContext); 37 SDL_GL_DeleteContext(fGLContext);
75 } 38 }
76 39
77 //Destroy window 40 //Destroy window
78 SDL_DestroyWindow(fWindow); 41 SDL_DestroyWindow(fWindow);
79 42
80 //Quit SDL subsystems 43 //Quit SDL subsystems
81 SDL_Quit(); 44 SDL_Quit();
82 } 45 }
83 46
84 void SkOSWindow::detach() { 47 void SkOSWindow::detach() {
85 if (fGLContext) { 48 if (fGLContext) {
86 SDL_GL_DeleteContext(fGLContext); 49 SDL_GL_DeleteContext(fGLContext);
87 fGLContext = nullptr; 50 fGLContext = nullptr;
88 } 51 }
89
90 #if defined(SK_BUILD_FOR_ANDROID)
91 if (fWindow) {
92 // Destroy window
93 // Not totally sure why, but we have to do this or swapbuffers will hang
94 SDL_DestroyWindow(fWindow);
95 fWindow = nullptr;
96 }
97 #endif
98 } 52 }
99 53
100 bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount, Attachme ntInfo* info) { 54 bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount, Attachme ntInfo*) {
101 if (!fWindow) { 55 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
102 fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WIN DOWPOS_CENTERED, 56 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
103 SCREEN_WIDTH, SCREEN_HEIGHT, 57 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
104 fWindowFlags); 58
105 } 59 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
60 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
61 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
106 62
107 if (msaaSampleCount > 0) { 63 if (msaaSampleCount > 0) {
108 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); 64 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
109 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaaSampleCount); 65 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaaSampleCount);
110 } 66 }
111 67
112 info->fSampleCount = msaaSampleCount;
113 info->fStencilBits = 8;
114
115 fGLContext = SDL_GL_CreateContext(fWindow); 68 fGLContext = SDL_GL_CreateContext(fWindow);
116 if (!fGLContext) { 69 if (!fGLContext) {
117 handle_error(); 70 handle_error();
118 return false; 71 return false;
119 } 72 }
120 73
121 int success = SDL_GL_MakeCurrent(fWindow, fGLContext); 74 int success = SDL_GL_MakeCurrent(fWindow, fGLContext);
122 if (success != 0) { 75 if (success != 0) {
123 handle_error(); 76 handle_error();
124 return false; 77 return false;
125 } 78 }
126 79
127 glViewport(0, 0, SkScalarFloorToInt(this->width()), SkScalarFloorToInt(this- >height())); 80 glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
128 glClearColor(1, 1, 1, 1); 81 glClearColor(1, 1, 1, 1);
129 glClearStencil(0); 82 glClearStencil(0);
130 glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 83 glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
131 84
132 return true; 85 return true;
133 } 86 }
134 87
135 void SkOSWindow::present() { 88 void SkOSWindow::present() {
136 SDL_GL_SwapWindow(fWindow); 89 SDL_GL_SwapWindow(fWindow);
137 } 90 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 //////////////////////////////////////////////////////////////////////////////// /////// 202 //////////////////////////////////////////////////////////////////////////////// ///////
250 203
251 void SkEvent::SignalNonEmptyQueue() { 204 void SkEvent::SignalNonEmptyQueue() {
252 // nothing to do, since we spin on our event-queue 205 // nothing to do, since we spin on our event-queue
253 } 206 }
254 207
255 void SkEvent::SignalQueueTimer(SkMSec delay) { 208 void SkEvent::SignalQueueTimer(SkMSec delay) {
256 // just need to record the delay time. We handle waking up for it in 209 // just need to record the delay time. We handle waking up for it in
257 } 210 }
258 211
259 void SkOSWindow::onHandleInval(const SkIRect& rect) { 212 //////////////////////////////////////////////////////////////////////////////// //////////////
260 }
261 213
262 void SkOSWindow::onPDFSaved(const char title[], const char desc[], const char pa th[]) {
263 }
264
265 //////////////////////////////////////////////////////////////////////////////// //////////////
266 214
267 #include "SkApplication.h" 215 #include "SkApplication.h"
268 #include "SkEvent.h" 216 #include "SkEvent.h"
269 #include "SkWindow.h" 217 #include "SkWindow.h"
270 218
271 #if defined(SK_BUILD_FOR_ANDROID) 219 int main(int argc, char** argv){
272 int SDL_main(int argc, char** argv) {
273 #else
274 int main(int argc, char** argv) {
275 #endif
276 SkOSWindow* window = create_sk_window(nullptr, argc, argv); 220 SkOSWindow* window = create_sk_window(nullptr, argc, argv);
277 221
278 // drain any events that occurred before |window| was assigned. 222 // drain any events that occurred before |window| was assigned.
279 while (SkEvent::ProcessEvent()); 223 while (SkEvent::ProcessEvent());
280 224
281 // Start normal Skia sequence 225 // Start normal Skia sequence
282 application_init(); 226 application_init();
283 227
284 window->loop(); 228 window->loop();
285 229
286 delete window; 230 delete window;
287 application_term(); 231 application_term();
288 return 0; 232 return 0;
289 } 233 }
OLDNEW
« no previous file with comments | « platform_tools/android/gyp/skia_android.gypi ('k') | third_party/libsdl/android/SDL_config.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698