Chromium Code Reviews| Index: src/views/unix/SkOSWindow_Unix.cpp |
| diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp |
| index 4d4b628bfb61e50e79d3f27253e1e6feadaae392..0c8850674e0235d8a1cd25a1757b43b9f02e3a38 100644 |
| --- a/src/views/unix/SkOSWindow_Unix.cpp |
| +++ b/src/views/unix/SkOSWindow_Unix.cpp |
| @@ -14,6 +14,8 @@ |
| #include "SkWindow.h" |
| +#include "gl/glx/GrNativeDisplay_glx.h" |
| + |
| #include "SkBitmap.h" |
| #include "SkCanvas.h" |
| #include "SkColor.h" |
| @@ -82,42 +84,46 @@ void SkOSWindow::initWindow(int requestedMSAASampleCount, AttachmentInfo* info) |
| SkDebugf("Could not open an X Display"); |
| return; |
| } |
| - // Attempt to create a window that supports GL |
| - GLint att[] = { |
| - GLX_RGBA, |
| + |
|
robertphillips
2015/10/16 14:54:40
static const int attrs[] ?
|
| + int att[] = { |
| GLX_DEPTH_SIZE, 24, |
| - GLX_DOUBLEBUFFER, |
| + GLX_DOUBLEBUFFER, true, |
|
robertphillips
2015/10/16 14:54:40
Don't we need these stencil settings in the other
|
| GLX_STENCIL_SIZE, 8, |
| None |
| }; |
| - SkASSERT(nullptr == fVi); |
| - if (requestedMSAASampleCount > 0) { |
| - static const GLint kAttCount = SK_ARRAY_COUNT(att); |
| - GLint msaaAtt[kAttCount + 4]; |
| - memcpy(msaaAtt, att, sizeof(att)); |
| - SkASSERT(None == msaaAtt[kAttCount - 1]); |
| - msaaAtt[kAttCount - 1] = GLX_SAMPLE_BUFFERS_ARB; |
| - msaaAtt[kAttCount + 0] = 1; |
| - msaaAtt[kAttCount + 1] = GLX_SAMPLES_ARB; |
| - msaaAtt[kAttCount + 2] = requestedMSAASampleCount; |
| - msaaAtt[kAttCount + 3] = None; |
| - fVi = glXChooseVisual(dsp, DefaultScreen(dsp), msaaAtt); |
| - fMSAASampleCount = requestedMSAASampleCount; |
| - } |
| - if (nullptr == fVi) { |
| - fVi = glXChooseVisual(dsp, DefaultScreen(dsp), att); |
| - fMSAASampleCount = 0; |
| - } |
| - if (fVi) { |
| + GLXFBConfig bestFbConfig; |
| + if (!GrNativeDisplay::Initialize(att, fUnixWindow.fDisplay, &bestFbConfig)) { |
| + if (info) { |
| + info->fSampleCount = 0; |
| + info->fStencilBits = 0; |
| + } |
| + // Create a simple window instead. We will not be able to show GL |
| + fUnixWindow.fWin = XCreateSimpleWindow(dsp, |
| + DefaultRootWindow(dsp), |
| + 0, 0, // x, y |
| + WIDTH, HEIGHT, |
| + 0, // border width |
| + 0, // border value |
| + 0); // background value |
| + } else { |
| + glXGetConfig(dsp, fVi, GLX_SAMPLES_ARB, &fMSAASampleCount); |
| + if (fMSAASampleCount < requestedMSAASampleCount) { |
| + SkDebugf("Requested samples exceeds the maximum allowed on this platform\n"); |
| + } |
| + |
| if (info) { |
|
robertphillips
2015/10/16 14:54:40
Shouldn't this be requestedMSAASampleCount ?
|
| - glXGetConfig(dsp, fVi, GLX_SAMPLES_ARB, &info->fSampleCount); |
| + info->fSampleCount = fMSAASampleCount; |
| glXGetConfig(dsp, fVi, GLX_STENCIL_SIZE, &info->fStencilBits); |
| } |
| + |
| + fVi = glXGetVisualFromFBConfig(fUnixWindow.fDisplay, bestFbConfig); |
| + SkASSERT(fVi); |
| + |
| Colormap colorMap = XCreateColormap(dsp, |
| RootWindow(dsp, fVi->screen), |
| fVi->visual, |
| - AllocNone); |
| + AllocNone); |
| XSetWindowAttributes swa; |
| swa.colormap = colorMap; |
| swa.event_mask = EVENT_MASK; |
| @@ -131,20 +137,9 @@ void SkOSWindow::initWindow(int requestedMSAASampleCount, AttachmentInfo* info) |
| fVi->visual, |
| CWEventMask | CWColormap, |
| &swa); |
| - } else { |
| - if (info) { |
| - info->fSampleCount = 0; |
| - info->fStencilBits = 0; |
| - } |
| - // Create a simple window instead. We will not be able to show GL |
| - fUnixWindow.fWin = XCreateSimpleWindow(dsp, |
| - DefaultRootWindow(dsp), |
| - 0, 0, // x, y |
| - WIDTH, HEIGHT, |
| - 0, // border width |
| - 0, // border value |
| - 0); // background value |
| + |
| } |
| + |
| this->mapWindowAndWait(); |
| fUnixWindow.fGc = XCreateGC(dsp, fUnixWindow.fWin, 0, nullptr); |
| } |