| Index: src/views/sdl/SkOSWindow_SDL.cpp
|
| diff --git a/src/views/sdl/SkOSWindow_SDL.cpp b/src/views/sdl/SkOSWindow_SDL.cpp
|
| index 8edcd72bff3447887860a4d6980fa5de9b2e35b8..80802a1dd09f8d3f6084397f12f19fbfd41e28b4 100644
|
| --- a/src/views/sdl/SkOSWindow_SDL.cpp
|
| +++ b/src/views/sdl/SkOSWindow_SDL.cpp
|
| @@ -7,7 +7,11 @@
|
| #include "SkOSWindow_SDL.h"
|
| #include "SkCanvas.h"
|
|
|
| +#if defined(SK_BUILD_FOR_ANDROID)
|
| +#include <GLES/gl.h>
|
| +#else
|
| #include <GL/gl.h>
|
| +#endif
|
|
|
| const int SCREEN_WIDTH = 640;
|
| const int SCREEN_HEIGHT = 480;
|
| @@ -19,17 +23,50 @@ static void handle_error() {
|
| }
|
|
|
| SkOSWindow::SkOSWindow(void* screen) : fQuit(false) , fGLContext(nullptr) {
|
| - //Create window
|
| - SDL_Init(SDL_INIT_VIDEO|SDL_INIT_GAMECONTROLLER|SDL_INIT_EVENTS);
|
| - fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
| - SCREEN_WIDTH, SCREEN_HEIGHT,
|
| - SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN );
|
| +#if defined(SK_BUILD_FOR_ANDROID)
|
| + // TODO we should try and get a 3.0 context first
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
| + fWindowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE |
|
| + SDL_WINDOW_BORDERLESS | SDL_WINDOW_FULLSCREEN_DESKTOP |
|
| + SDL_WINDOW_ALLOW_HIGHDPI;
|
| +#else
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
| + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
| + SDL_StartTextInput();
|
| +
|
| + fWindowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
|
| +#endif
|
| + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
|
| + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
|
| + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
|
| + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
| + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
| + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
|
| +
|
| + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
|
| +
|
| + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) {
|
| + handle_error();
|
| + return;
|
| + }
|
| +
|
| + SDL_DisplayMode dm;
|
| + if (SDL_GetDesktopDisplayMode(0, &dm) != 0) {
|
| + handle_error();
|
| + return;
|
| + }
|
| +
|
| + fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
| + dm.w, dm.h, fWindowFlags);
|
| +
|
| if (!fWindow) {
|
| handle_error();
|
| return;
|
| }
|
| - SDL_StartTextInput();
|
| - this->resize(SCREEN_WIDTH, SCREEN_HEIGHT);
|
| + this->resize(SkIntToScalar(dm.w), SkIntToScalar(dm.h));
|
| }
|
|
|
| SkOSWindow::~SkOSWindow() {
|
| @@ -49,22 +86,32 @@ void SkOSWindow::detach() {
|
| SDL_GL_DeleteContext(fGLContext);
|
| fGLContext = nullptr;
|
| }
|
| -}
|
|
|
| -bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*) {
|
| - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
| - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
| - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
| +#if defined(SK_BUILD_FOR_ANDROID)
|
| + if (fWindow) {
|
| + // Destroy window
|
| + // Not totally sure why, but we have to do this or swapbuffers will hang
|
| + SDL_DestroyWindow(fWindow);
|
| + fWindow = nullptr;
|
| + }
|
| +#endif
|
| +}
|
|
|
| - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
| - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
| - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
|
| +bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo* info) {
|
| + if (!fWindow) {
|
| + fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
| + SCREEN_WIDTH, SCREEN_HEIGHT,
|
| + fWindowFlags);
|
| + }
|
|
|
| if (msaaSampleCount > 0) {
|
| SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
|
| SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaaSampleCount);
|
| }
|
|
|
| + info->fSampleCount = msaaSampleCount;
|
| + info->fStencilBits = 8;
|
| +
|
| fGLContext = SDL_GL_CreateContext(fWindow);
|
| if (!fGLContext) {
|
| handle_error();
|
| @@ -77,7 +124,7 @@ bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount, Attachme
|
| return false;
|
| }
|
|
|
| - glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
| + glViewport(0, 0, SkScalarFloorToInt(this->width()), SkScalarFloorToInt(this->height()));
|
| glClearColor(1, 1, 1, 1);
|
| glClearStencil(0);
|
| glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
| @@ -209,14 +256,23 @@ void SkEvent::SignalQueueTimer(SkMSec delay) {
|
| // just need to record the delay time. We handle waking up for it in
|
| }
|
|
|
| -//////////////////////////////////////////////////////////////////////////////////////////////
|
| +void SkOSWindow::onHandleInval(const SkIRect& rect) {
|
| +}
|
| +
|
| +void SkOSWindow::onPDFSaved(const char title[], const char desc[], const char path[]) {
|
| +}
|
|
|
| +//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| #include "SkApplication.h"
|
| #include "SkEvent.h"
|
| #include "SkWindow.h"
|
|
|
| -int main(int argc, char** argv){
|
| +#if defined(SK_BUILD_FOR_ANDROID)
|
| +int SDL_main(int argc, char** argv) {
|
| +#else
|
| +int main(int argc, char** argv) {
|
| +#endif
|
| SkOSWindow* window = create_sk_window(nullptr, argc, argv);
|
|
|
| // drain any events that occurred before |window| was assigned.
|
|
|