Support MSAA in the picture debugger
Add radio buttons for setting the GL sample count to 0 ("off"), 4 or
16.
Change the default mode of the GL widget to MSAA4. Previous behavior
corresponded to "off".
BUG=1459
R=robertphillips@google.com
Author: kkinnunen@nvidia.com
Review URL: https://chromiumcodereview.appspot.com/21752002
git-svn-id: http://skia.googlecode.com/svn/trunk@10509 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/QT/SkCanvasWidget.cpp b/debugger/QT/SkCanvasWidget.cpp
index 3c239d0..73de8c2 100644
--- a/debugger/QT/SkCanvasWidget.cpp
+++ b/debugger/QT/SkCanvasWidget.cpp
@@ -129,6 +129,13 @@
#endif
}
+#if SK_SUPPORT_GPU
+void SkCanvasWidget::setGLSampleCount(int sampleCount)
+{
+ fGLWidget.setSampleCount(sampleCount);
+}
+#endif
+
void SkCanvasWidget::zoom(float scale, int px, int py) {
fUserMatrix.postScale(scale, scale, px, py);
emit scaleFactorChanged(fUserMatrix.getScaleX());
diff --git a/debugger/QT/SkCanvasWidget.h b/debugger/QT/SkCanvasWidget.h
index 0dcb470..3308613 100644
--- a/debugger/QT/SkCanvasWidget.h
+++ b/debugger/QT/SkCanvasWidget.h
@@ -36,6 +36,10 @@
void setWidgetVisibility(WidgetType type, bool isHidden);
+#if SK_SUPPORT_GPU
+ void setGLSampleCount(int sampleCount);
+#endif
+
/** Zooms the canvas by scale with the transformation centered at the widget point (px, py). */
void zoom(float scale, int px, int py);
diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp
index 0f4299f..d444152 100644
--- a/debugger/QT/SkDebuggerGUI.cpp
+++ b/debugger/QT/SkDebuggerGUI.cpp
@@ -92,7 +92,7 @@
connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose()));
connect(fSettingsWidget.getVisibilityButton(), SIGNAL(toggled(bool)), this, SLOT(actionCommandFilter()));
#if SK_SUPPORT_GPU
- connect(fSettingsWidget.getGLCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionGLWidget(bool)));
+ connect(&fSettingsWidget, SIGNAL(glSettingsChanged()), this, SLOT(actionGLWidget()));
#endif
connect(fSettingsWidget.getRasterCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionRasterWidget(bool)));
connect(fSettingsWidget.getOverdrawVizCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionOverdrawVizWidget(bool)));
@@ -360,8 +360,9 @@
renderer = SkNEW(sk_tools::SimplePictureRenderer);
#if SK_SUPPORT_GPU
- if (Qt::Checked == fSettingsWidget.getGLCheckBox()->checkState()) {
+ if (fSettingsWidget.isGLActive()) {
renderer->setDeviceType(sk_tools::PictureRenderer::kGPU_DeviceType);
+ renderer->setSampleCount(fSettingsWidget.getGLSampleCount());
}
#endif
@@ -459,7 +460,11 @@
}
#if SK_SUPPORT_GPU
-void SkDebuggerGUI::actionGLWidget(bool isToggled) {
+void SkDebuggerGUI::actionGLWidget() {
+ bool isToggled = fSettingsWidget.isGLActive();
+ if (isToggled) {
+ fCanvasWidget.setGLSampleCount(fSettingsWidget.getGLSampleCount());
+ }
fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kGPU_WidgetType, !isToggled);
}
#endif
diff --git a/debugger/QT/SkDebuggerGUI.h b/debugger/QT/SkDebuggerGUI.h
index 3122638..13ec181 100644
--- a/debugger/QT/SkDebuggerGUI.h
+++ b/debugger/QT/SkDebuggerGUI.h
@@ -114,9 +114,9 @@
#if SK_SUPPORT_GPU
/**
- Toggles the visibility of the GL canvas widget.
+ Updates the visibility of the GL canvas widget and sample count of the GL surface.
*/
- void actionGLWidget(bool isToggled);
+ void actionGLWidget();
#endif
/**
diff --git a/debugger/QT/SkGLWidget.cpp b/debugger/QT/SkGLWidget.cpp
index ae3155a..53b6fa4 100644
--- a/debugger/QT/SkGLWidget.cpp
+++ b/debugger/QT/SkGLWidget.cpp
@@ -27,6 +27,14 @@
SkSafeUnref(fCanvas);
}
+void SkGLWidget::setSampleCount(int sampleCount)
+{
+ QGLFormat currentFormat = format();
+ currentFormat.setSampleBuffers(sampleCount > 0);
+ currentFormat.setSamples(sampleCount);
+ setFormat(currentFormat);
+}
+
void SkGLWidget::initializeGL() {
fCurIntf = GrGLCreateNativeInterface();
if (!fCurIntf) {
diff --git a/debugger/QT/SkGLWidget.h b/debugger/QT/SkGLWidget.h
index ccbb1ee..a8e4604 100644
--- a/debugger/QT/SkGLWidget.h
+++ b/debugger/QT/SkGLWidget.h
@@ -33,6 +33,7 @@
void draw() {
this->updateGL();
}
+ void setSampleCount(int sampleCount);
signals:
void drawComplete();
diff --git a/debugger/QT/SkSettingsWidget.cpp b/debugger/QT/SkSettingsWidget.cpp
index 88078ea..fa619ea 100644
--- a/debugger/QT/SkSettingsWidget.cpp
+++ b/debugger/QT/SkSettingsWidget.cpp
@@ -67,6 +67,28 @@
fGLLabel.setText("OpenGL: ");
fGLLabel.setMinimumWidth(178);
fGLLabel.setMaximumWidth(178);
+
+ fGLMSAAButtonGroup.setTitle("MSAA");
+ fGLMSAAButtonGroup.setMinimumWidth(178);
+ fGLMSAAButtonGroup.setMaximumWidth(178);
+ fGLMSAAButtonGroup.setEnabled(fGLCheckBox.isChecked());
+
+ fGLMSAAOff.setText("Off");
+ fGLMSAA4On.setText("4");
+ fGLMSAA4On.setChecked(true);
+ fGLMSAA16On.setText("16");
+
+ fGLMSAALayout.addWidget(&fGLMSAAOff);
+ fGLMSAALayout.addWidget(&fGLMSAA4On);
+ fGLMSAALayout.addWidget(&fGLMSAA16On);
+
+ fGLMSAAButtonGroup.setLayout(&fGLMSAALayout);
+
+ connect(&fGLCheckBox, SIGNAL(toggled(bool)), &fGLMSAAButtonGroup, SLOT(setEnabled(bool)));
+ connect(&fGLCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(glSettingsChanged()));
+ connect(&fGLMSAAOff, SIGNAL(toggled(bool)), this, SIGNAL(glSettingsChanged()));
+ connect(&fGLMSAA4On, SIGNAL(toggled(bool)), this, SIGNAL(glSettingsChanged()));
+ connect(&fGLMSAA16On, SIGNAL(toggled(bool)), this, SIGNAL(glSettingsChanged()));
#endif
fRasterLayout.addWidget(&fRasterLabel);
@@ -86,6 +108,7 @@
fCanvasLayout.addLayout(&fOverdrawVizLayout);
#if SK_SUPPORT_GPU
fCanvasLayout.addLayout(&fGLLayout);
+ fCanvasLayout.addWidget(&fGLMSAAButtonGroup);
#endif
// Command Toggle
diff --git a/debugger/QT/SkSettingsWidget.h b/debugger/QT/SkSettingsWidget.h
index 1a16ed2..e5662ee 100644
--- a/debugger/QT/SkSettingsWidget.h
+++ b/debugger/QT/SkSettingsWidget.h
@@ -14,6 +14,7 @@
#include <QHBoxLayout>
#include <QTextEdit>
#include <QFrame>
+#include <QGroupBox>
#include <QLabel>
#include <QRadioButton>
#include <QCheckBox>
@@ -40,9 +41,19 @@
QRadioButton* getVisibilityButton();
#if SK_SUPPORT_GPU
- QCheckBox* getGLCheckBox() {
- return &fGLCheckBox;
+ bool isGLActive() {
+ return fGLCheckBox.isChecked();
}
+
+ int getGLSampleCount() {
+ if (fGLMSAA4On.isChecked()) {
+ return 4;
+ } else if (fGLMSAA16On.isChecked()) {
+ return 16;
+ }
+ return 0;
+ }
+
#endif
QCheckBox* getRasterCheckBox() {
@@ -61,6 +72,9 @@
void scrollingPreferences(bool isStickyActivate);
void showStyle(bool isSingleCommand);
void visibilityFilter(bool isEnabled);
+#if SK_SUPPORT_GPU
+ void glSettingsChanged();
+#endif
private:
QVBoxLayout mainFrameLayout;
@@ -101,6 +115,11 @@
QHBoxLayout fGLLayout;
QLabel fGLLabel;
QCheckBox fGLCheckBox;
+ QGroupBox fGLMSAAButtonGroup;
+ QVBoxLayout fGLMSAALayout;
+ QRadioButton fGLMSAAOff;
+ QRadioButton fGLMSAA4On;
+ QRadioButton fGLMSAA16On;
#endif
QFrame fZoomFrame;