void KisFilterOption::writeOptionSetting(KisPropertiesConfigurationSP setting) const { if (!m_currentFilter) return; setting->setProperty(FILTER_ID, m_currentFilter->id()); setting->setProperty(FILTER_SMUDGE_MODE, smudgeMode()); if (filterConfig()) { setting->setProperty(FILTER_CONFIGURATION, filterConfig()->toXML()); } }
void KisFilterOpSettings::toXML(QDomDocument& doc, QDomElement& root) const { KisPaintOpSettings::toXML(doc, root); KisFilterConfiguration* configuration = filterConfig(); if (configuration) { QDomElement e = doc.createElement("filterconfig"); configuration->toXML(doc, e); root.appendChild(e); } delete configuration; }
void KisFilterOption::lodLimitations(KisPaintopLodLimitations *l) const { KisFilterConfigurationSP config = filterConfig(); if (m_currentFilter && config) { QRect testRect(0,0,100,100); if (m_currentFilter->neededRect(testRect, config, 0) != testRect || m_currentFilter->changedRect(testRect, config, 0) != testRect) { l->blockers << KoID("filter-nonlinear", i18nc("PaintOp instant preview limitation", "\"%1\" does not support scaled preview (non-linear filter)", config->name())); } } }
void KisFilterOption::readOptionSetting(const KisPropertiesConfigurationSP setting) { KoID id(setting->getString(FILTER_ID), QString()); if (id.id() != m_currentFilter->id()) { setCurrentFilter(id); } m_filterOptionWidget->checkBoxSmudgeMode->setChecked(setting->getBool(FILTER_SMUDGE_MODE)); KisFilterConfigurationSP configuration = filterConfig(); if (configuration && m_currentFilterConfigWidget) { configuration->fromXML(setting->getString(FILTER_CONFIGURATION)); m_currentFilterConfigWidget->blockSignals(true); m_currentFilterConfigWidget->setConfiguration(configuration); m_currentFilterConfigWidget->blockSignals(false); } }
EGLConfig QEglConfigChooser::chooseConfig() { QVector<EGLint> configureAttributes = q_createConfigAttributesFromFormat(m_format); configureAttributes.append(EGL_SURFACE_TYPE); configureAttributes.append(surfaceType()); configureAttributes.append(EGL_RENDERABLE_TYPE); bool needsES2Plus = false; switch (m_format.renderableType()) { case QSurfaceFormat::OpenVG: configureAttributes.append(EGL_OPENVG_BIT); break; #ifdef EGL_VERSION_1_4 case QSurfaceFormat::DefaultRenderableType: #ifndef QT_NO_OPENGL if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) configureAttributes.append(EGL_OPENGL_BIT); else #endif // QT_NO_OPENGL needsES2Plus = true; break; case QSurfaceFormat::OpenGL: configureAttributes.append(EGL_OPENGL_BIT); break; #endif case QSurfaceFormat::OpenGLES: if (m_format.majorVersion() == 1) { configureAttributes.append(EGL_OPENGL_ES_BIT); break; } // fall through default: needsES2Plus = true; break; } if (needsES2Plus) { if (m_format.majorVersion() >= 3 && q_hasEglExtension(display(), "EGL_KHR_create_context")) configureAttributes.append(EGL_OPENGL_ES3_BIT_KHR); else configureAttributes.append(EGL_OPENGL_ES2_BIT); } configureAttributes.append(EGL_NONE); EGLConfig cfg = 0; do { // Get the number of matching configurations for this set of properties. EGLint matching = 0; if (!eglChooseConfig(display(), configureAttributes.constData(), 0, 0, &matching) || !matching) continue; // Fetch all of the matching configurations and find the // first that matches the pixel format we wanted. int i = configureAttributes.indexOf(EGL_RED_SIZE); m_confAttrRed = configureAttributes.at(i+1); i = configureAttributes.indexOf(EGL_GREEN_SIZE); m_confAttrGreen = configureAttributes.at(i+1); i = configureAttributes.indexOf(EGL_BLUE_SIZE); m_confAttrBlue = configureAttributes.at(i+1); i = configureAttributes.indexOf(EGL_ALPHA_SIZE); m_confAttrAlpha = i == -1 ? 0 : configureAttributes.at(i+1); QVector<EGLConfig> configs(matching); eglChooseConfig(display(), configureAttributes.constData(), configs.data(), configs.size(), &matching); if (!cfg && matching > 0) cfg = configs.first(); // Filter the list. Due to the EGL sorting rules configs with higher depth are // placed first when the minimum color channel sizes have been specified (i.e. the // QSurfaceFormat contains color sizes > 0). To prevent returning a 888 config // when the QSurfaceFormat explicitly asked for 565, go through the returned // configs and look for one that exactly matches the requested sizes. When no // sizes have been given, take the first, which will be a config with the smaller // (e.g. 16-bit) depth. for (int i = 0; i < configs.size(); ++i) { if (filterConfig(configs[i])) return configs.at(i); } } while (q_reduceConfigAttributes(&configureAttributes)); if (!cfg) qWarning("Cannot find EGLConfig, returning null config"); return cfg; }