diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp index dad073ed82ee4a96688d0adade32bf426431de96..39b458afe9df01124b064682c7ef179da3422412 100644 --- a/src/canvas3d.cpp +++ b/src/canvas3d.cpp @@ -90,12 +90,9 @@ Canvas::Canvas(QQuickItem *parent): m_glContext(0), m_glContextQt(0), m_contextWindow(0), - #if defined(QT_OPENGL_ES_2) m_maxSamples(0), - #else - m_maxSamples(4), - #endif m_devicePixelRatio(1.0f), + m_isOpenGLES2(false), m_isSoftwareRendered(false), m_isContextAttribsSet(false), m_antialiasFbo(0), @@ -320,12 +317,13 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option } QSurfaceFormat surfaceFormat = m_glContextQt->format(); -#if defined(QT_OPENGL_ES_2) - surfaceFormat.setMajorVersion(2); - surfaceFormat.setMinorVersion(0); -#endif - surfaceFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer); - surfaceFormat.setSwapInterval(0); + if (m_isOpenGLES2) { + surfaceFormat.setMajorVersion(2); + surfaceFormat.setMinorVersion(0); + } else { + surfaceFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer); + surfaceFormat.setSwapInterval(0); + } if (m_contextAttribs.antialias() && !m_isSoftwareRendered) surfaceFormat.setSamples(m_maxSamples); @@ -382,8 +380,10 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option m_antialiasFbo = new QOpenGLFramebufferObject(m_initialisedSize, antialiasFboFormat); } - m_context3D = new CanvasContext(m_glContext, m_offscreenSurface, m_initialisedSize.width() * m_devicePixelRatio, - m_initialisedSize.height() * m_devicePixelRatio); + m_context3D = new CanvasContext(m_glContext, m_offscreenSurface, + m_initialisedSize.width() * m_devicePixelRatio, + m_initialisedSize.height() * m_devicePixelRatio, + m_isOpenGLES2); m_context3D->setCanvas(this); m_context3D->setDevicePixelRatio(m_devicePixelRatio); m_context3D->setContextAttributes(m_contextAttribs); @@ -513,6 +513,9 @@ QSGNode *Canvas::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) if (!m_glContextQt) { m_glContextQt = window()->openglContext(); + m_isOpenGLES2 = m_glContextQt->isOpenGLES(); + if (!m_isOpenGLES2) + m_maxSamples = 4; ready(); return 0; } diff --git a/src/canvas3d_p.h b/src/canvas3d_p.h index fec9f80fc16133007f58c5e0feae66a2fbd071b9..b5179d34da30de6c315dfe655b93e767ae837c2c 100644 --- a/src/canvas3d_p.h +++ b/src/canvas3d_p.h @@ -127,6 +127,7 @@ private: int m_maxSamples; float m_devicePixelRatio; + bool m_isOpenGLES2; bool m_isSoftwareRendered; bool m_runningInDesigner; CanvasContextAttributes m_contextAttribs; diff --git a/src/context3d.cpp b/src/context3d.cpp index e7013d6379f2c47fa6bf5b953c13b6ca5c9de06c..9a1144222348a2127cef3111d6afba65cde48a94 100644 --- a/src/context3d.cpp +++ b/src/context3d.cpp @@ -77,7 +77,7 @@ // Owned by the SG Render Thread! CanvasContext::CanvasContext(QOpenGLContext *context, QSurface *surface, - int width, int height, QObject *parent) : + int width, int height, bool isES2, QObject *parent) : CanvasAbstractObject(parent), QOpenGLFunctions(context), m_unpackFlipYEnabled(false), @@ -95,7 +95,8 @@ CanvasContext::CanvasContext(QOpenGLContext *context, QSurface *surface, m_currentFramebuffer(0), m_map(EnumToStringMap::newInstance()), m_canvas(0), - m_maxVertexAttribs(0) + m_maxVertexAttribs(0), + m_isOpenGLES2(isES2) { int value = 0; glGetIntegerv(MAX_VERTEX_ATTRIBS, &value); @@ -2390,11 +2391,11 @@ void CanvasContext::deleteShader(CanvasShader *shader) */ void CanvasContext::shaderSource(CanvasShader *shader, const QString &shaderSource) { -#if defined(QT_OPENGL_ES_2) - QString modSource = shaderSource; -#else QString modSource = "#version 120 \n#define precision \n"+ shaderSource; -#endif + + if (m_isOpenGLES2) + modSource = shaderSource; + if (m_logAllCalls) qDebug() << "Context3D::" << __FUNCTION__ << "(shader:" << shader << ", shaderSource" diff --git a/src/context3d_p.h b/src/context3d_p.h index 344356ed67188a46d814635f56e98d0846911646..a18207bb3cb28bca8d29205a017a9a0acb4d4f3b 100644 --- a/src/context3d_p.h +++ b/src/context3d_p.h @@ -940,7 +940,7 @@ public: ENUM_AS_PROPERTY(BROWSER_DEFAULT_WEBGL) CanvasContext(QOpenGLContext *context, QSurface *surface, - int width, int height, QObject *parent = 0); + int width, int height, bool isES2, QObject *parent = 0); ~CanvasContext(); void setCanvas(Canvas *canvas); @@ -1231,6 +1231,7 @@ private: Canvas *m_canvas; uint m_maxVertexAttribs; float **m_vertexAttribPointers; + bool m_isOpenGLES2; }; #endif // CONTEXT3D_P_H