summaryrefslogtreecommitdiffstats
path: root/src/core/delegated_frame_node.cpp
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@digia.com>2014-08-01 13:40:00 +0200
committerAndras Becsi <andras.becsi@digia.com>2014-09-25 19:47:07 +0200
commit41e5902e7799808fc71504d4222ee6363fec1aef (patch)
tree6bd63b04e2071bb7cee8156aaca9cd8b7eabea26 /src/core/delegated_frame_node.cpp
parentf3500da1ff1c7d383386c0197848262d7bedf90e (diff)
Add Desktop OpenGL backend for Windows
Enabling rendering into a WGL backbuffer, in addition to the EGL/angle one. Change-Id: I8f2e3f5ecf52b6db22712b1129059f462725a256 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'src/core/delegated_frame_node.cpp')
-rw-r--r--src/core/delegated_frame_node.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 3d3e0dd8f..1a393a0c7 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -64,6 +64,7 @@
#include "cc/quads/yuv_video_draw_quad.h"
#include <QOpenGLContext>
#include <QOpenGLFramebufferObject>
+#include <QOpenGLFunctions>
#include <QSGAbstractRenderer>
#include <QSGEngine>
#include <QSGSimpleRectNode>
@@ -75,7 +76,7 @@
#include <EGL/eglext.h>
#endif
-class RenderPassTexture : public QSGTexture
+class RenderPassTexture : public QSGTexture, protected QOpenGLFunctions
{
public:
RenderPassTexture(const cc::RenderPass::Id &id);
@@ -105,7 +106,7 @@ private:
QScopedPointer<QOpenGLFramebufferObject> m_fbo;
};
-class MailboxTexture : public QSGTexture {
+class MailboxTexture : public QSGTexture, protected QOpenGLFunctions {
public:
MailboxTexture(const cc::TransferableResource &resource);
virtual int textureId() const Q_DECL_OVERRIDE { return m_textureId; }
@@ -232,7 +233,14 @@ static void waitChromiumSync(gfx::TransferableFence *sync)
break;
case gfx::TransferableFence::ArbSync:
#ifdef GL_ARB_sync
- glWaitSync(sync->arb.sync, 0, GL_TIMEOUT_IGNORED);
+ typedef void (QOPENGLF_APIENTRYP WaitSyncPtr)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+ static WaitSyncPtr glWaitSync_ = 0;
+ if (!glWaitSync_) {
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ glWaitSync_ = (WaitSyncPtr)context->getProcAddress("glWaitSync");
+ Q_ASSERT(glWaitSync_);
+ }
+ glWaitSync_(sync->arb.sync, 0, GL_TIMEOUT_IGNORED);
#endif
break;
}
@@ -270,7 +278,14 @@ static void deleteChromiumSync(gfx::TransferableFence *sync)
break;
case gfx::TransferableFence::ArbSync:
#ifdef GL_ARB_sync
- glDeleteSync(sync->arb.sync);
+ typedef void (QOPENGLF_APIENTRYP DeleteSyncPtr)(GLsync sync);
+ static DeleteSyncPtr glDeleteSync_ = 0;
+ if (!glDeleteSync_) {
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ glDeleteSync_ = (DeleteSyncPtr)context->getProcAddress("glDeleteSync");
+ Q_ASSERT(glDeleteSync_);
+ }
+ glDeleteSync_(sync->arb.sync);
sync->reset();
#endif
break;
@@ -286,6 +301,7 @@ RenderPassTexture::RenderPassTexture(const cc::RenderPass::Id &id)
, m_sgEngine(new QSGEngine)
, m_rootNode(new QSGRootNode)
{
+ initializeOpenGLFunctions();
}
void RenderPassTexture::bind()
@@ -330,6 +346,7 @@ MailboxTexture::MailboxTexture(const cc::TransferableResource &resource)
, m_target(GL_TEXTURE_2D)
, m_importCount(1)
{
+ initializeOpenGLFunctions();
}
void MailboxTexture::bind()