summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@qt.io>2016-08-10 17:56:10 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-10-02 08:40:22 +0000
commit7d19f3b647f4e5ac4b5f0d2278703476f5a9ed1c (patch)
tree8f770c11fe270d71be7ab712ffc33df9d7bec53c
parent2ec47c9921a1e381943159f540b45c105d2ff1db (diff)
Fix building when QT_NO_OPENGL is defined
Task-number: QTBUG-54327 Change-Id: I759598d56aa0a74b64092365b422a743fb508ac6 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/core/api/qtwebenginecoreglobal.cpp11
-rw-r--r--src/core/content_browser_client_qt.cpp6
-rw-r--r--src/core/core_gyp_generator.pro18
-rw-r--r--src/core/delegated_frame_node.cpp59
-rw-r--r--src/core/gl_context_qt.cpp4
-rw-r--r--src/core/web_engine_context.cpp11
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp3
7 files changed, 87 insertions, 25 deletions
diff --git a/src/core/api/qtwebenginecoreglobal.cpp b/src/core/api/qtwebenginecoreglobal.cpp
index f5d1e6d39..072f27967 100644
--- a/src/core/api/qtwebenginecoreglobal.cpp
+++ b/src/core/api/qtwebenginecoreglobal.cpp
@@ -40,16 +40,20 @@
#include "qtwebenginecoreglobal_p.h"
#include <QGuiApplication>
-#include <QOpenGLContext>
+#ifndef QT_NO_OPENGL
+# include <QOpenGLContext>
+#endif
#include <QThread>
+#ifndef QT_NO_OPENGL
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT void qt_gl_set_global_share_context(QOpenGLContext *context);
Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context();
QT_END_NAMESPACE
+#endif
namespace QtWebEngineCore {
-
+#ifndef QT_NO_OPENGL
static QOpenGLContext *shareContext;
static void deleteShareContext()
@@ -58,6 +62,7 @@ static void deleteShareContext()
shareContext = 0;
}
+#endif
// ### Qt 6: unify this logic and Qt::AA_ShareOpenGLContexts.
// QtWebEngine::initialize was introduced first and meant to be called
// after the QGuiApplication creation, when AA_ShareOpenGLContexts fills
@@ -65,6 +70,7 @@ static void deleteShareContext()
QWEBENGINE_PRIVATE_EXPORT void initialize()
{
+#ifndef QT_NO_OPENGL
#ifdef Q_OS_WIN32
qputenv("QT_D3DCREATE_MULTITHREADED", "1");
#endif
@@ -100,5 +106,6 @@ QWEBENGINE_PRIVATE_EXPORT void initialize()
// Classes like QOpenGLWidget check for the attribute
app->setAttribute(Qt::AA_ShareOpenGLContexts);
+#endif // QT_NO_OPENGL
}
} // namespace QtWebEngineCore
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index a2453070e..64964dc09 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -100,7 +100,9 @@
#include <QGuiApplication>
#include <QLocale>
-#include <QOpenGLContext>
+#ifndef QT_NO_OPENGL
+# include <QOpenGLContext>
+#endif
#include <qpa/qplatformnativeinterface.h>
QT_BEGIN_NAMESPACE
@@ -322,12 +324,14 @@ private:
void ShareGroupQtQuick::AboutToAddFirstContext()
{
+#ifndef QT_NO_OPENGL
// This currently has to be setup by ::main in all applications using QQuickWebEngineView with delegated rendering.
QOpenGLContext *shareContext = qt_gl_global_share_context();
if (!shareContext) {
qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to call QtWebEngine::initialize() in your main() function.");
}
m_shareContextQtQuick = make_scoped_refptr(new QtShareGLContext(shareContext));
+#endif
}
class QuotaPermissionContextQt : public content::QuotaPermissionContext {
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index f5b9f870c..2fae21c4d 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -96,7 +96,6 @@ SOURCES = \
resource_bundle_qt.cpp \
resource_context_qt.cpp \
ssl_host_state_delegate_qt.cpp \
- stream_video_node.cpp \
surface_factory_qt.cpp \
type_conversion.cpp \
url_request_context_getter_qt.cpp \
@@ -112,8 +111,7 @@ SOURCES = \
web_engine_library_info.cpp \
web_engine_settings.cpp \
web_engine_visited_links_manager.cpp \
- web_event_factory.cpp \
- yuv_video_node.cpp
+ web_event_factory.cpp
HEADERS = \
access_token_store_qt.h \
@@ -178,7 +176,6 @@ HEADERS = \
renderer_host/web_channel_ipc_transport_host.h \
resource_context_qt.h \
ssl_host_state_delegate_qt.h \
- stream_video_node.h \
surface_factory_qt.h \
type_conversion.h \
url_request_context_getter_qt.h \
@@ -196,8 +193,17 @@ HEADERS = \
web_engine_library_info.h \
web_engine_settings.h \
web_engine_visited_links_manager.h \
- web_event_factory.h \
- yuv_video_node.h
+ web_event_factory.h
+
+contains(QT_CONFIG, opengl) {
+ SOURCES += \
+ yuv_video_node.cpp \
+ stream_video_node.cpp
+
+ HEADERS += \
+ yuv_video_node.h \
+ stream_video_node.h
+}
qtHaveModule(positioning) {
SOURCES += location_provider_qt.cpp
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 3d147226d..44e37aeb6 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -70,9 +70,11 @@
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_fence.h"
-#include <QOpenGLContext>
-#include <QOpenGLFunctions>
-#include <QSGFlatColorMaterial>
+#ifndef QT_NO_OPENGL
+# include <QOpenGLContext>
+# include <QOpenGLFunctions>
+# include <QSGFlatColorMaterial>
+#endif
#include <QSGTexture>
#include <private/qsgadaptationlayer_p.h>
@@ -97,8 +99,20 @@
#define GL_TEXTURE_RECTANGLE 0x84F5
#endif
-namespace QtWebEngineCore {
+#ifndef GL_LINEAR
+#define GL_LINEAR 0x2601
+#endif
+#ifndef GL_RGBA
+#define GL_RGBA 0x1908
+#endif
+
+#ifndef GL_RGB
+#define GL_RGB 0x1907
+#endif
+
+namespace QtWebEngineCore {
+#ifndef QT_NO_OPENGL
class MailboxTexture : public QSGTexture, protected QOpenGLFunctions {
public:
MailboxTexture(const gpu::MailboxHolder &mailboxHolder, const QSize textureSize);
@@ -128,7 +142,7 @@ private:
#endif
friend class DelegatedFrameNode;
};
-
+#endif // QT_NO_OPENGL
class ResourceHolder {
public:
ResourceHolder(const cc::TransferableResource &resource);
@@ -202,6 +216,7 @@ static QSGNode *buildLayerChain(QSGNode *chainParent, const cc::SharedQuadState
return layerChain;
}
+#ifndef QT_NO_OPENGL
static void waitChromiumSync(gl::TransferableFence *sync)
{
// Chromium uses its own GL bindings and stores in in thread local storage.
@@ -361,6 +376,7 @@ void MailboxTexture::fetchTexture(gpu::gles2::MailboxManager *mailboxManager)
#endif
}
}
+#endif //QT_NO_OPENGL
ResourceHolder::ResourceHolder(const cc::TransferableResource &resource)
: m_resource(resource)
@@ -385,8 +401,12 @@ QSharedPointer<QSGTexture> ResourceHolder::initTexture(bool quadNeedsBlending, R
QImage image(sharedBitmap->pixels(), m_resource.size.width(), m_resource.size.height(), format);
texture.reset(apiDelegate->createTextureFromImage(image.copy()));
} else {
+#ifndef QT_NO_OPENGL
texture.reset(new MailboxTexture(m_resource.mailbox_holder, toQt(m_resource.size)));
static_cast<MailboxTexture *>(texture.data())->setHasAlphaChannel(quadNeedsBlending);
+#else
+ Q_UNREACHABLE();
+#endif
}
m_texture = texture;
}
@@ -422,12 +442,12 @@ RectClipNode::RectClipNode(const QRectF &rect)
DelegatedFrameNode::DelegatedFrameNode()
: m_numPendingSyncPoints(0)
-#if defined(USE_X11)
+#if defined(USE_X11) && !defined(QT_NO_OPENGL)
, m_contextShared(true)
#endif
{
setFlag(UsePreprocess);
-#if defined(USE_X11)
+#if defined(USE_X11) && !defined(QT_NO_OPENGL)
QOpenGLContext *currentContext = QOpenGLContext::currentContext() ;
QOpenGLContext *sharedContext = qt_gl_global_share_context();
if (!QOpenGLContext::areSharing(currentContext, sharedContext)) {
@@ -449,6 +469,7 @@ DelegatedFrameNode::~DelegatedFrameNode()
void DelegatedFrameNode::preprocess()
{
+#ifndef QT_NO_OPENGL
// With the threaded render loop the GUI thread has been unlocked at this point.
// We can now wait for the Chromium GPU thread to produce textures that will be
// rendered on our quads and fetch the IDs from the mailboxes we were given.
@@ -471,6 +492,7 @@ void DelegatedFrameNode::preprocess()
// Proceed with the actual update.
pair.second->updateTexture();
}
+#endif
}
static YUVVideoMaterial::ColorSpace toQt(cc::YUVVideoDrawQuad::ColorSpace color_space)
@@ -614,12 +636,13 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
rectangleNode->setColor(toQt(scquad->color));
currentLayerChain->appendChildNode(rectangleNode);
break;
+#ifndef QT_NO_OPENGL
} case cc::DrawQuad::DEBUG_BORDER: {
const cc::DebugBorderDrawQuad *dbquad = cc::DebugBorderDrawQuad::MaterialCast(quad);
QSGGeometryNode *geometryNode = new QSGGeometryNode;
QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 4);
- geometry->setDrawingMode(GL_LINE_LOOP);
+ geometry->setDrawingMode(QSGGeometry::DrawLineLoop);
geometry->setLineWidth(dbquad->width);
// QSGGeometry::updateRectGeometry would actually set the corners in the following order:
// top-left, bottom-left, top-right, bottom-right, leading to a nice criss cross, instead
@@ -638,6 +661,7 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
geometryNode->setFlags(QSGNode::OwnsGeometry | QSGNode::OwnsMaterial);
currentLayerChain->appendChildNode(geometryNode);
break;
+#endif
} case cc::DrawQuad::TILED_CONTENT: {
const cc::TileDrawQuad *tquad = cc::TileDrawQuad::MaterialCast(quad);
ResourceHolder *resource = findAndHoldResource(tquad->resource_id(), resourceCandidates);
@@ -649,6 +673,7 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
textureNode->setTexture(initAndHoldTexture(resource, quad->ShouldDrawWithBlending(), apiDelegate));
currentLayerChain->appendChildNode(textureNode);
break;
+#ifndef QT_NO_OPENGL
} case cc::DrawQuad::YUV_VIDEO_CONTENT: {
const cc::YUVVideoDrawQuad *vquad = cc::YUVVideoDrawQuad::MaterialCast(quad);
ResourceHolder *yResource = findAndHoldResource(vquad->y_plane_resource_id(), resourceCandidates);
@@ -671,9 +696,8 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
videoNode->setRect(toQt(quad->rect));
currentLayerChain->appendChildNode(videoNode);
break;
- }
#ifdef GL_OES_EGL_image_external
- case cc::DrawQuad::STREAM_VIDEO_CONTENT: {
+ } case cc::DrawQuad::STREAM_VIDEO_CONTENT: {
const cc::StreamVideoDrawQuad *squad = cc::StreamVideoDrawQuad::MaterialCast(quad);
ResourceHolder *resource = findAndHoldResource(squad->resource_id(), resourceCandidates);
MailboxTexture *texture = static_cast<MailboxTexture *>(initAndHoldTexture(resource, quad->ShouldDrawWithBlending()));
@@ -684,9 +708,9 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData,
svideoNode->setTextureMatrix(toQt(squad->matrix.matrix()));
currentLayerChain->appendChildNode(svideoNode);
break;
- }
-#endif
- case cc::DrawQuad::SURFACE_CONTENT:
+#endif // GL_OES_EGL_image_external
+#endif // QT_NO_OPENGL
+ } case cc::DrawQuad::SURFACE_CONTENT:
Q_UNREACHABLE();
default:
qWarning("Unimplemented quad material: %d", quad->material);
@@ -723,6 +747,7 @@ QSGTexture *DelegatedFrameNode::initAndHoldTexture(ResourceHolder *resource, boo
void DelegatedFrameNode::fetchAndSyncMailboxes(QList<MailboxTexture *> &mailboxesToFetch)
{
+#ifndef QT_NO_OPENGL
QList<gl::TransferableFence> transferredFences;
{
QMutexLocker lock(&m_mutex);
@@ -818,11 +843,15 @@ void DelegatedFrameNode::fetchAndSyncMailboxes(QList<MailboxTexture *> &mailboxe
currentContext->makeCurrent(surface);
}
#endif
+#else
+ Q_UNUSED(mailboxesToFetch)
+#endif //QT_NO_OPENGL
}
void DelegatedFrameNode::pullTexture(DelegatedFrameNode *frameNode, MailboxTexture *texture)
{
+#ifndef QT_NO_OPENGL
gpu::gles2::MailboxManager *mailboxManager = mailbox_manager();
gpu::SyncToken &syncToken = texture->mailboxHolder().sync_token;
if (syncToken.HasData())
@@ -837,6 +866,10 @@ void DelegatedFrameNode::pullTexture(DelegatedFrameNode *frameNode, MailboxTextu
}
if (--frameNode->m_numPendingSyncPoints == 0)
base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&DelegatedFrameNode::fenceAndUnlockQt, frameNode));
+#else
+ Q_UNUSED(frameNode)
+ Q_UNUSED(texture)
+#endif
}
void DelegatedFrameNode::fenceAndUnlockQt(DelegatedFrameNode *frameNode)
diff --git a/src/core/gl_context_qt.cpp b/src/core/gl_context_qt.cpp
index bbcd3554d..b1177a998 100644
--- a/src/core/gl_context_qt.cpp
+++ b/src/core/gl_context_qt.cpp
@@ -63,11 +63,15 @@ namespace {
inline void *resourceForContext(const QByteArray &resource)
{
+#ifndef QT_NO_OPENGL
QOpenGLContext *shareContext = qt_gl_global_share_context();
if (!shareContext) {
qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to call QtWebEngine::initialize() in your main() function.");
}
return qApp->platformNativeInterface()->nativeResourceForContext(resource, shareContext);
+#else
+ return nullptr;
+#endif
}
inline void *resourceForIntegration(const QByteArray &resource)
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 368ad48e2..7fe8fb612 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -88,7 +88,9 @@
#include <QFileInfo>
#include <QGuiApplication>
#include <QOffscreenSurface>
-#include <QOpenGLContext>
+#ifndef QT_NO_OPENGL
+# include <QOpenGLContext>
+#endif
#include <QStringList>
#include <QSurfaceFormat>
#include <QVector>
@@ -96,9 +98,11 @@
using namespace QtWebEngineCore;
+#ifndef QT_NO_OPENGL
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context();
QT_END_NAMESPACE
+#endif
namespace {
@@ -115,6 +119,7 @@ void destroyContext()
s_destroyed = true;
}
+#ifndef QT_NO_OPENGL
bool usingANGLE()
{
#if defined(Q_OS_WIN)
@@ -160,7 +165,7 @@ bool usingQtQuick2DRenderer()
// Anything other than the default OpenGL device will need to render in 2D mode.
return device != QLatin1String("default");
}
-
+#endif //QT_NO_OPENGL
#if defined(ENABLE_PLUGINS)
void dummyGetPluginCallback(const std::vector<content::WebPluginInfo>&)
{
@@ -318,6 +323,7 @@ WebEngineContext::WebEngineContext()
GLContextHelper::initialize();
const char *glType = 0;
+#ifndef QT_NO_OPENGL
if (!usingANGLE() && !usingSoftwareDynamicGL() && !usingQtQuick2DRenderer()) {
if (qt_gl_global_share_context()) {
if (!strcmp(qt_gl_global_share_context()->nativeHandle().typeName(), "QEGLNativeContext")) {
@@ -365,6 +371,7 @@ WebEngineContext::WebEngineContext()
}
}
}
+#endif
if (glType)
parsedCommandLine->AppendSwitchASCII(switches::kUseGL, glType);
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
index 9b5d90146..43011de0e 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -103,6 +103,7 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
+#ifndef QT_NO_OPENGL
QOpenGLContext *globalSharedContext = QOpenGLContext::globalShareContext();
if (globalSharedContext) {
QSurfaceFormat sharedFormat = globalSharedContext->format();
@@ -131,7 +132,7 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende
setFormat(format);
#endif
-
+#endif
setMouseTracking(true);
setAttribute(Qt::WA_AcceptTouchEvents);
setAttribute(Qt::WA_OpaquePaintEvent);