Revert 3857 (which was committed from wrong tree)
git-svn-id: http://skia.googlecode.com/svn/trunk@3588 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/views/SkOSWindow_Mac.h b/include/views/SkOSWindow_Mac.h
index e3bcea9..01fa29f 100644
--- a/include/views/SkOSWindow_Mac.h
+++ b/include/views/SkOSWindow_Mac.h
@@ -16,18 +16,19 @@
SkOSWindow(void* hwnd);
~SkOSWindow();
void* getHWND() const { return fHWND; }
-
+
virtual bool onDispatchClick(int x, int y, Click::State state,
void* owner);
+
enum SkBackEndTypes {
kNone_BackEndType,
kNativeGL_BackEndType,
};
void detach();
- bool attach(SkBackEndTypes attachType, int msaaSampleCount);
+ bool attach(SkBackEndTypes attachType);
void present();
-
+
protected:
// overrides from SkEventSink
virtual bool onEvent(const SkEvent& evt);
diff --git a/include/views/SkOSWindow_Unix.h b/include/views/SkOSWindow_Unix.h
index e9755ab..40059bf 100644
--- a/include/views/SkOSWindow_Unix.h
+++ b/include/views/SkOSWindow_Unix.h
@@ -40,7 +40,7 @@
kNativeGL_BackEndType,
};
- bool attach(SkBackEndTypes attachType, int msaaSampleCount);
+ bool attach(SkBackEndTypes attachType);
void detach();
void present();
diff --git a/include/views/SkOSWindow_Win.h b/include/views/SkOSWindow_Win.h
index 4223645..2663c8c 100644
--- a/include/views/SkOSWindow_Win.h
+++ b/include/views/SkOSWindow_Win.h
@@ -36,7 +36,7 @@
kD3D9_BackEndType
};
- bool attach(SkBackEndTypes attachType, int msaaSampleCount);
+ bool attach(SkBackEndTypes attachType);
void detach();
void present();
@@ -78,13 +78,13 @@
SkBackEndTypes fAttached;
- bool attachGL(int msaaSampleCount);
+ bool attachGL();
void detachGL();
void presentGL();
#if SK_ANGLE
bool attachANGLE();
- void detachANGLE(int msaaSampleCount);
+ void detachANGLE();
void presentANGLE();
#endif
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index ad0bdaa..92c9e6c 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -139,8 +139,7 @@
: fCurContext(NULL)
, fCurIntf(NULL)
, fCurRenderTarget(NULL)
- , fBackend(kNone_BackEndType)
- , fMSAASampleCount(0) {
+ , fBackend(kNone_BackEndType) {
}
virtual ~DefaultDeviceManager() {
@@ -149,7 +148,7 @@
SkSafeUnref(fCurRenderTarget);
}
- virtual void setUpBackend(SampleWindow* win, int msaaSampleCount) {
+ virtual void setUpBackend(SampleWindow* win) {
SkASSERT(kNone_BackEndType == fBackend);
fBackend = kNone_BackEndType;
@@ -176,12 +175,11 @@
break;
}
- bool result = win->attach(fBackend, msaaSampleCount);
+ bool result = win->attach(fBackend);
if (!result) {
SkDebugf("Failed to initialize GL");
return;
}
- fMSAASampleCount = msaaSampleCount;
SkASSERT(NULL == fCurIntf);
switch (win->getDeviceType()) {
@@ -289,7 +287,7 @@
virtual void windowSizeChanged(SampleWindow* win) {
if (fCurContext) {
- win->attach(fBackend, fMSAASampleCount);
+ win->attach(fBackend);
GrPlatformRenderTargetDesc desc;
desc.fWidth = SkScalarRound(win->width());
@@ -315,7 +313,6 @@
GrRenderTarget* fCurRenderTarget;
SkOSWindow::SkBackEndTypes fBackend;
- int fMSAASampleCount;
typedef SampleWindow::DeviceManager INHERITED;
};
@@ -648,10 +645,9 @@
}
static void usage(const char * argv0) {
- SkDebugf("%s [--slide sampleName] [-i resourcePath] [-msaa=<samplecnt>]\n", argv0);
+ SkDebugf("%s [--slide sampleName] [-i resourcePath]\n", argv0);
SkDebugf(" sampleName: sample at which to start.\n");
SkDebugf(" resourcePath: directory that stores image resources.\n");
- SkDebugf(" msaa: request multisampling with the given sample count.\n");
}
SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* devManager) : INHERITED(hwnd) {
@@ -667,7 +663,6 @@
const char* resourcePath = NULL;
fCurrIndex = -1;
- fMSAASampleCount = 0;
const char* const commandName = argv[0];
char* const* stop = argv + argc;
@@ -685,9 +680,7 @@
fprintf(stderr, "Unknown sample \"%s\"\n", *argv);
}
}
- } else if (1 == sscanf(*argv, "--msaa=%d", &fMSAASampleCount) &&
- fMSAASampleCount >= 0) {
- }
+ }
else {
usage(commandName);
}
@@ -827,7 +820,7 @@
devManager->ref();
fDevManager = devManager;
}
- fDevManager->setUpBackend(this, fMSAASampleCount);
+ fDevManager->setUpBackend(this);
// If another constructor set our dimensions, ensure that our
// onSizeChange gets called.
@@ -1678,7 +1671,7 @@
fDeviceType = type;
- fDevManager->setUpBackend(this, fMSAASampleCount);
+ fDevManager->setUpBackend(this);
this->updateTitle();
this->inval(NULL);
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index a177b73..ba404da 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -50,7 +50,7 @@
*/
class DeviceManager : public SkRefCnt {
public:
- virtual void setUpBackend(SampleWindow* win, int msaaSampleCount) = 0;
+ virtual void setUpBackend(SampleWindow* win) = 0;
virtual void tearDownBackend(SampleWindow* win) = 0;
@@ -170,8 +170,6 @@
SkOSMenu::TriState fHintingState;
unsigned fFlipAxis;
- int fMSAASampleCount;
-
int fScrollTestX, fScrollTestY;
SkScalar fZoomCenterX, fZoomCenterY;
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 7589da90..4b3d942 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -22,11 +22,11 @@
#include "SkTLazy.h"
#include "SkTrace.h"
-#define DEFER_TEXT_RENDERING 0
+#define DEFER_TEXT_RENDERING 1
-#define DEFER_PATHS 0
+#define DEFER_PATHS 1
-#define BATCH_RECT_TO_RECT (0 && !GR_STATIC_RECT_VB)
+#define BATCH_RECT_TO_RECT (1 && !GR_STATIC_RECT_VB)
#define MAX_BLUR_SIGMA 4.0f
@@ -2056,6 +2056,7 @@
GrAssert(NULL == fDrawBufferVBAllocPool);
GrAssert(NULL == fDrawBufferIBAllocPool);
+#if DEFER_TEXT_RENDERING || BATCH_RECT_TO_RECT
fDrawBufferVBAllocPool =
new GrVertexBufferAllocPool(fGpu, false,
DRAW_BUFFER_VBPOOL_BUFFER_SIZE,
@@ -2068,7 +2069,11 @@
fDrawBuffer = new GrInOrderDrawBuffer(fGpu,
fDrawBufferVBAllocPool,
fDrawBufferIBAllocPool);
+#endif
+
+#if BATCH_RECT_TO_RECT
fDrawBuffer->setQuadIndexBuffer(this->getQuadIndexBuffer());
+#endif
fDrawBuffer->setAutoFlushTarget(fGpu);
fDrawBuffer->setDrawState(fDrawState);
}
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 08ab47a..8214b6e 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -1848,7 +1848,6 @@
// we prefer smooth lines over multisampled lines
// msaa should be disabled if drawing smooth lines.
- bool handledMSAA = false;
if (GrIsPrimTypeLines(type)) {
bool smooth = this->willUseHWAALines();
if (!fHWAAState.fSmoothLineEnabled && smooth) {
@@ -1858,15 +1857,14 @@
GL_CALL(Disable(GR_GL_LINE_SMOOTH));
fHWAAState.fSmoothLineEnabled = false;
}
- if (smooth && rt->isMultisampled() && fHWAAState.fMSAAEnabled) {
+ if (rt->isMultisampled() &&
+ fHWAAState.fMSAAEnabled) {
GL_CALL(Disable(GR_GL_MULTISAMPLE));
fHWAAState.fMSAAEnabled = false;
- handledMSAA = true;
}
- }
- if (!handledMSAA && rt->isMultisampled() &&
- this->getDrawState().isHWAntialiasState() !=
- fHWAAState.fMSAAEnabled) {
+ } else if (rt->isMultisampled() &&
+ this->getDrawState().isHWAntialiasState() !=
+ fHWAAState.fMSAAEnabled) {
if (fHWAAState.fMSAAEnabled) {
GL_CALL(Disable(GR_GL_MULTISAMPLE));
fHWAAState.fMSAAEnabled = false;
diff --git a/src/views/mac/SkNSView.h b/src/views/mac/SkNSView.h
index bf6e67c..60727eb 100644
--- a/src/views/mac/SkNSView.h
+++ b/src/views/mac/SkNSView.h
@@ -42,7 +42,7 @@
- (void)postInvalWithRect:(const SkIRect*)rectOrNil;
- (BOOL)onHandleEvent:(const SkEvent&)event;
-- (bool)attach:(SkOSWindow::SkBackEndTypes)attachType withMSAASampleCount:(int) sampleCount;
+- (bool)attach:(SkOSWindow::SkBackEndTypes)attachType;
- (void)detach;
- (void)present;
@end
diff --git a/src/views/mac/SkNSView.mm b/src/views/mac/SkNSView.mm
index 9d52814..a6aa59c 100644
--- a/src/views/mac/SkNSView.mm
+++ b/src/views/mac/SkNSView.mm
@@ -225,36 +225,25 @@
///////////////////////////////////////////////////////////////////////////////
#include <OpenGL/OpenGL.h>
-namespace {
-CGLContextObj createGLContext(int msaaSampleCount) {
+CGLContextObj createGLContext() {
GLint major, minor;
CGLGetVersion(&major, &minor);
- static const CGLPixelFormatAttribute attributes[] = {
+ const CGLPixelFormatAttribute attributes[] = {
kCGLPFAStencilSize, (CGLPixelFormatAttribute)8,
+#if USE_MSAA
+ kCGLPFASampleBuffers, 1,
+ kCGLPFAMultisample,
+ kCGLPFASamples, 8,
+#endif
kCGLPFAAccelerated,
kCGLPFADoubleBuffer,
(CGLPixelFormatAttribute)0
};
CGLPixelFormatObj format;
- GLint npix = 0;
- if (msaaSampleCount > 0) {
- static int kAttributeCount = SK_ARRAY_COUNT(attributes);
- CGLPixelFormatAttribute msaaAttributes[kAttributeCount + 5];
- memcpy(msaaAttributes, attributes, sizeof(attributes));
- SkASSERT(0 == msaaAttributes[kAttributeCount - 1]);
- msaaAttributes[kAttributeCount - 1] = kCGLPFASampleBuffers;
- msaaAttributes[kAttributeCount + 0] = (CGLPixelFormatAttribute)1;
- msaaAttributes[kAttributeCount + 1] = kCGLPFAMultisample;
- msaaAttributes[kAttributeCount + 2] = kCGLPFASamples;
- msaaAttributes[kAttributeCount + 3] = (CGLPixelFormatAttribute)msaaSampleCount;
- msaaAttributes[kAttributeCount + 4] = (CGLPixelFormatAttribute)0;
- CGLChoosePixelFormat(msaaAttributes, &format, &npix);
- }
- if (!npix) {
- CGLChoosePixelFormat(attributes, &format, &npix);
- }
+ GLint npix;
+ CGLChoosePixelFormat(attributes, &format, &npix);
CGLContextObj ctx;
CGLCreateContext(format, NULL, &ctx);
@@ -265,7 +254,6 @@
CGLSetCurrentContext(ctx);
return ctx;
}
-}
- (void)viewDidMoveToWindow {
[super viewDidMoveToWindow];
@@ -277,15 +265,12 @@
[fGLContext setView:self];
}
}
-- (bool)attach:(SkOSWindow::SkBackEndTypes)attachType withMSAASampleCount:(int) sampleCount {
+- (bool)attach:(SkOSWindow::SkBackEndTypes)attachType {
if (nil == fGLContext) {
- CGLContextObj ctx = createGLContext(sampleCount);
- fGLContext = [[NSOpenGLContext alloc] initWithCGLContextObj:ctx];
- CGLReleaseContext(ctx);
+ fGLContext = [[NSOpenGLContext alloc] initWithCGLContextObj:createGLContext()];
if (NULL == fGLContext) {
return false;
}
- [fGLContext setView:self];
}
[fGLContext makeCurrentContext];
@@ -298,13 +283,10 @@
}
- (void)detach {
- [fGLContext release];
- fGLContext = nil;
+ [fGLContext clearDrawable];
}
- (void)present {
- if (nil != fGLContext) {
- [fGLContext flushBuffer];
- }
+ [fGLContext flushBuffer];
}
@end
diff --git a/src/views/mac/SkOSWindow_Mac.mm b/src/views/mac/SkOSWindow_Mac.mm
index a5d3fef..4aa4eb5 100644
--- a/src/views/mac/SkOSWindow_Mac.mm
+++ b/src/views/mac/SkOSWindow_Mac.mm
@@ -63,8 +63,8 @@
[(SkNSView*)fHWND onUpdateMenu:menu];
}
-bool SkOSWindow::attach(SkBackEndTypes attachType, int sampleCount) {
- return [(SkNSView*)fHWND attach:attachType withMSAASampleCount:sampleCount];
+bool SkOSWindow::attach(SkBackEndTypes attachType) {
+ return [(SkNSView*)fHWND attach:attachType];
}
void SkOSWindow::detach() {
diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp
index 674ea62..01bc21c 100644
--- a/src/views/unix/SkOSWindow_Unix.cpp
+++ b/src/views/unix/SkOSWindow_Unix.cpp
@@ -170,7 +170,7 @@
}
-bool SkOSWindow::attach(SkBackEndTypes /* attachType */, int msaaSampleCount)
+bool SkOSWindow::attach(SkBackEndTypes /* attachType */)
{
if (fGLAttached) return true;
Display* dsp = fUnixWindow.fDisplay;
diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp
index ecd4c0c..c6d345c 100644
--- a/src/views/win/SkOSWindow_win.cpp
+++ b/src/views/win/SkOSWindow_win.cpp
@@ -313,7 +313,7 @@
#define USE_MSAA 0
-HGLRC create_gl(HWND hwnd, int msaaSampleCount) {
+HGLRC create_gl(HWND hwnd) {
HDC dc = GetDC(hwnd);
@@ -328,7 +328,7 @@
int format = 0;
- static const GLint iAttrs[] = {
+ GLint iattrs[] = {
SK_WGL_DRAW_TO_WINDOW, TRUE,
SK_WGL_DOUBLE_BUFFER, TRUE,
SK_WGL_ACCELERATION, SK_WGL_FULL_ACCELERATION,
@@ -336,40 +336,40 @@
SK_WGL_COLOR_BITS, 24,
SK_WGL_ALPHA_BITS, 8,
SK_WGL_STENCIL_BITS, 8,
- 0, 0
+
+ // these must be kept last
+ SK_WGL_SAMPLE_BUFFERS, TRUE,
+ SK_WGL_SAMPLES, 0,
+ 0,0
};
- GLfloat fAttrs[] = {0, 0};
-
- if (msaaSampleCount > 0 &&
- extensions.hasExtension(dc, "WGL_ARB_multisample")) {
- static const int kIAttrsCount = SK_ARRAY_COUNT(iAttrs);
- GLint msaaIAttrs[kIAttrsCount + 4];
- memcpy(msaaIAttrs, iAttrs, sizeof(GLint) * kIAttrsCount);
- SkASSERT(0 == msaaIAttrs[kIAttrsCount - 2] &&
- 0 == msaaIAttrs[kIAttrsCount - 1]);
- msaaIAttrs[kIAttrsCount - 2] = SK_WGL_SAMPLE_BUFFERS;
- msaaIAttrs[kIAttrsCount - 1] = TRUE;
- msaaIAttrs[kIAttrsCount + 0] = SK_WGL_SAMPLES;
- msaaIAttrs[kIAttrsCount + 1] = msaaSampleCount;
- msaaIAttrs[kIAttrsCount + 2] = 0;
- msaaIAttrs[kIAttrsCount + 3] = 0;
- GLuint num;
- int formats[64];
- extensions.choosePixelFormat(dc, msaaIAttrs, fAttrs, 64, formats, &num);
- num = min(num,64);
- for (GLuint i = 0; i < num; ++i) {
- DescribePixelFormat(dc, formats[i], sizeof(pfd), &pfd);
- if (SetPixelFormat(dc, formats[i], &pfd)) {
- format = formats[i];
- break;
+ static const int kSampleBuffersValueIdx = SK_ARRAY_COUNT(iattrs) - 5;
+ static const int kSamplesValueIdx = SK_ARRAY_COUNT(iattrs) - 3;
+ if (USE_MSAA && extensions.hasExtension(dc, "WGL_ARB_multisample")) {
+ for (int samples = 16; samples > 1; --samples) {
+
+ iattrs[kSamplesValueIdx] = samples;
+ GLfloat fattrs[] = {0,0};
+ GLuint num;
+ int formats[64];
+ extensions.choosePixelFormat(dc, iattrs, fattrs, 64, formats, &num);
+ num = min(num,64);
+ for (GLuint i = 0; i < num; ++i) {
+ DescribePixelFormat(dc, formats[i], sizeof(pfd), &pfd);
+ if (SetPixelFormat(dc, formats[i], &pfd)) {
+ format = formats[i];
+ break;
+ }
}
}
}
if (0 == format) {
+ iattrs[kSampleBuffersValueIdx-1] = iattrs[kSampleBuffersValueIdx] = 0;
+ iattrs[kSamplesValueIdx-1] = iattrs[kSamplesValueIdx] = 0;
+ GLfloat fattrs[] = {0,0};
GLuint num;
- extensions.choosePixelFormat(dc, iAttrs, fAttrs, 1, &format, &num);
+ extensions.choosePixelFormat(dc, iattrs, fattrs, 1, &format, &num);
DescribePixelFormat(dc, format, sizeof(pfd), &pfd);
BOOL set = SetPixelFormat(dc, format, &pfd);
SkASSERT(TRUE == set);
@@ -382,9 +382,9 @@
return glrc;
}
-bool SkOSWindow::attachGL(int msaaSampleCount) {
+bool SkOSWindow::attachGL() {
if (NULL == fHGLRC) {
- fHGLRC = create_gl((HWND)fHWND, msaaSampleCount);
+ fHGLRC = create_gl((HWND)fHWND);
if (NULL == fHGLRC) {
return false;
}
@@ -413,15 +413,13 @@
}
#if SK_ANGLE
-bool create_ANGLE(EGLNativeWindowType hWnd,
- int msaaSampleCount,
- angle::EGLDisplay* eglDisplay,
- angle::EGLContext* eglContext,
- angle::EGLSurface* eglSurface) {
- static EGLint contextAttribs[] = {
+bool create_ANGLE(EGLNativeWindowType hWnd, EGLDisplay* eglDisplay,
+ EGLContext* eglContext, EGLSurface* eglSurface) {
+ EGLint contextAttribs[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE, EGL_NONE
};
- static EGLint configAttribList[] = {
+ EGLint configAttribList[] = {
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
@@ -430,7 +428,7 @@
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
- static EGLint surfaceAttribList[] = {
+ EGLint surfaceAttribList[] = {
EGL_NONE, EGL_NONE
};
@@ -452,31 +450,9 @@
// Choose config
EGLConfig config;
- bool foundConfig = false;
- if (msaaSampleCount) {
- static int kConfigAttribListCnt = SK_ARRAY_COUNT(configAttribList);
- EGLint msaaConfigAttribList[kConfigAttribListCnt + 4];
- memcpy(msaaConfigAttribList,
- configAttribList,
- sizeof(configAttribList));
- SkASSERT(EGL_NONE == msaaConfigAttribList[kConfigAttribListCnt - 1]);
- msaaConfigAttribList[kConfigAttribListCnt - 1] = EGL_SAMPLE_BUFFERS;
- msaaConfigAttribList[kConfigAttribListCnt + 0] = 1;
- msaaConfigAttribList[kConfigAttribListCnt + 1] = EGL_SAMPLES;
- msaaConfigAttribList[kConfigAttribListCnt + 2] = msaaCount;
- msaaConfigAttribList[kConfigAttribListCnt + 3] = EGL_NONE;
- if (eglChooseConfig(display, configAttribList,
- &config, 1, &numConfigs)) {
- if (numConfigs > 0) {
- foundConfig = true;
- }
- }
- }
- if (!foundConfig) {
- if (!eglChooseConfig(display, configAttribList,
- &config, 1, &numConfigs)) {
- return false;
- }
+ if (!eglChooseConfig(display, configAttribList,
+ &config, 1, &numConfigs)) {
+ return false;
}
// Create a surface
@@ -506,7 +482,7 @@
return true;
}
-bool SkOSWindow::attachANGLE(int msaaSampleCount) {
+bool SkOSWindow::attachANGLE() {
if (EGL_NO_DISPLAY == fDisplay) {
bool bResult = create_ANGLE((HWND)fHWND, &fDisplay, &fContext, &fSurface);
if (false == bResult) {
@@ -664,7 +640,7 @@
}
// return true on success
-bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount) {
+bool SkOSWindow::attach(SkBackEndTypes attachType) {
// attach doubles as "windowResize" so we need to allo
// already bound states to pass through again
@@ -677,11 +653,11 @@
// nothing to do
break;
case kNativeGL_BackEndType:
- result = attachGL(msaaSampleCount);
+ result = attachGL();
break;
#if SK_ANGLE
case kANGLE_BackEndType:
- result = attachANGLE(msaaSampleCount);
+ result = attachANGLE();
break;
#endif
case kD3D9_BackEndType: