diff --git a/examples/canvas3d/texturedcube/qml/texturedcube/texturedcube.js b/examples/canvas3d/texturedcube/qml/texturedcube/texturedcube.js index 6df51a8845d9d180abbcbff11a5d863071404033..559f8656c7dbf1151937f722de330014921a540c 100644 --- a/examples/canvas3d/texturedcube/qml/texturedcube/texturedcube.js +++ b/examples/canvas3d/texturedcube/qml/texturedcube/texturedcube.js @@ -45,7 +45,8 @@ function initGL(canvas, textureLoader) { gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); // Set the viewport - gl.viewport(0, 0, canvas.width, canvas.height); + var pixelRatio = canvas.devicePixelRatio; + gl.viewport(0, 0, pixelRatio * canvas.width, pixelRatio * canvas.height); // Initialize the shader program initShaders(); @@ -114,6 +115,7 @@ function renderGL(canvas) { mat4.rotate(mvMatrix, mvMatrix, degToRad(canvas.xRotAnim), [1, 0, 0]); mat4.rotate(mvMatrix, mvMatrix, degToRad(canvas.yRotAnim), [0, 1, 0]); mat4.rotate(mvMatrix, mvMatrix, degToRad(canvas.zRotAnim), [0, 0, 1]); + // Set the matrix to shader gl.uniformMatrix4fva(mvMatrixUniform, false, mvMatrix); diff --git a/src/abstractobject3d.cpp b/src/abstractobject3d.cpp index abf3dda98cc51da8d9e791266dde195ea679b267..0f432d253f9f5b8715d4c24b36ce0655eedaf4c7 100644 --- a/src/abstractobject3d.cpp +++ b/src/abstractobject3d.cpp @@ -37,26 +37,19 @@ #include "abstractobject3d_p.h" CanvasAbstractObject::CanvasAbstractObject(QObject *parent) : - QObject(parent) + QQmlPropertyMap(parent) { - m_name = QString("0x%1").arg((long long) this, 0, 16); + insert("name", QVariant::fromValue(QString("0x%1").arg((long long) this, 0, 16))); } CanvasAbstractObject::~CanvasAbstractObject() { } -void CanvasAbstractObject::setName(const QString &name) +QString CanvasAbstractObject::name() const { - if (m_name == name) - return; + if (!contains("name")) + return ""; - m_name = name; - - emit nameChanged(m_name); -} - -const QString &CanvasAbstractObject::name() -{ - return m_name; + return value("name").toString(); } diff --git a/src/abstractobject3d_p.h b/src/abstractobject3d_p.h index 05cde245bc5c123e9c946b996092b0c132a5989e..c223b54ad7f3cf08e6d135e8953f592ce091e555 100644 --- a/src/abstractobject3d_p.h +++ b/src/abstractobject3d_p.h @@ -48,25 +48,18 @@ #define ABSTRACTOBJECT3D_P_H #include <QObject> +#include <QQmlPropertyMap> #include <QThread> -class CanvasAbstractObject : public QObject +class CanvasAbstractObject : public QQmlPropertyMap { Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) public: explicit CanvasAbstractObject(QObject *parent = 0); virtual ~CanvasAbstractObject(); - void setName(const QString &name); - const QString &name(); - -signals: - void nameChanged(const QString &name); - -protected: - QString m_name; + QString name() const; }; #endif // ABSTRACTOBJECT3D_P_H diff --git a/src/activeinfo3d.cpp b/src/activeinfo3d.cpp index be7658096019f40dfca9f4839d7800f68162d4cb..6df460c2ae54e287335ceb1cedc7d039f4d94cb5 100644 --- a/src/activeinfo3d.cpp +++ b/src/activeinfo3d.cpp @@ -52,7 +52,7 @@ CanvasActiveInfo::CanvasActiveInfo(int size, CanvasContext::glEnums type, QString name, QObject *parent) : - QObject(parent), + CanvasAbstractObject(parent), m_size(size), m_type(type), m_name(name) @@ -66,7 +66,7 @@ CanvasActiveInfo::CanvasActiveInfo(int size, CanvasContext::glEnums type, /*! * \internal */ -int CanvasActiveInfo::size() const +int CanvasActiveInfo::infoSize() const { return m_size; } @@ -78,7 +78,7 @@ int CanvasActiveInfo::size() const /*! * \internal */ -CanvasContext::glEnums CanvasActiveInfo::type() const +CanvasContext::glEnums CanvasActiveInfo::infoType() const { return m_type; } @@ -90,7 +90,7 @@ CanvasContext::glEnums CanvasActiveInfo::type() const /*! * \internal */ -QString CanvasActiveInfo::name() const +QString CanvasActiveInfo::infoName() const { return m_name; } diff --git a/src/activeinfo3d_p.h b/src/activeinfo3d_p.h index 40cd1ed7dd537708dbbb700e97c961334785b948..13a1ba2a031d20f15fd71beb7deda191c9cc141a 100644 --- a/src/activeinfo3d_p.h +++ b/src/activeinfo3d_p.h @@ -47,29 +47,29 @@ #ifndef CANVASACTIVEINFO_P_H #define CANVASACTIVEINFO_P_H -#include <QObject> +#include "abstractobject3d_p.h" #include "context3d_p.h" -class CanvasActiveInfo : public QObject +class CanvasActiveInfo : public CanvasAbstractObject { Q_OBJECT - Q_PROPERTY(int size READ size NOTIFY sizeChanged) - Q_PROPERTY(CanvasContext::glEnums type READ type NOTIFY typeChanged) - Q_PROPERTY(QString name READ name NOTIFY nameChanged) + Q_PROPERTY(int size READ infoSize NOTIFY infoSizeChanged) + Q_PROPERTY(CanvasContext::glEnums type READ infoType NOTIFY infoTypeChanged) + Q_PROPERTY(QString name READ infoName NOTIFY infoNameChanged) public: explicit CanvasActiveInfo(int size, CanvasContext::glEnums type, QString name, QObject *parent = 0); - int size() const; - CanvasContext::glEnums type() const; - QString name() const; + int infoSize() const; + CanvasContext::glEnums infoType() const; + QString infoName() const; signals: - void sizeChanged(int size); - void typeChanged(CanvasContext::glEnums type); - void nameChanged(QString &name); + void infoSizeChanged(int size); + void infoTypeChanged(CanvasContext::glEnums type); + void infoNameChanged(QString &name); private: int m_size; diff --git a/src/buffer3d.cpp b/src/buffer3d.cpp index 1f5992fc4287c3b5f66420e779ad09ce59f2df71..2d0e2d9390b6f299aa95e473a96f667d2771c402 100644 --- a/src/buffer3d.cpp +++ b/src/buffer3d.cpp @@ -134,7 +134,7 @@ GLuint CanvasBuffer::id() QDebug operator<<(QDebug dbg, const CanvasBuffer *buffer) { if (buffer) - dbg.nospace() << "Buffer3D("<< buffer->m_name <<", id:" << buffer->m_bufferId << ")"; + dbg.nospace() << "Buffer3D("<< buffer->name() <<", id:" << buffer->m_bufferId << ")"; else dbg.nospace() << "Buffer3D("<< ((void*) buffer) <<")"; return dbg.maybeSpace(); diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp index ff1608ae0b5fabf386a025cff9c7e8a27011f6c3..72128ef6483998e62921cab987ec27415ea65543 100644 --- a/src/canvas3d.cpp +++ b/src/canvas3d.cpp @@ -93,7 +93,6 @@ Canvas::Canvas(QQuickItem *parent): m_maxSamples(4), #endif m_samples(0), - m_isAnimated(false), m_devicePixelRatio(1.0f), m_imageLoader(0), m_isContextAttribsSet(false), @@ -474,29 +473,6 @@ void Canvas::setImageLoader(CanvasTextureImageLoader *loader) emit imageLoaderChanged(loader); } -/*! - \qmlproperty bool Canvas3D::animated - Specifies whether the Canvas3D continuously emits the renderGL signal to render new - frames or not. In most cases this property should be set to true as the 3D content is - dynamic. - \note Currenly not used. - */ -void Canvas::setAnimated(bool animated) -{ - if (m_logAllCalls) qDebug() << "Canvas3D::" << __FUNCTION__; - if (animated != m_isAnimated) { - m_isAnimated = animated; - emit animatedChanged(animated); - emit needRender(); - } -} - -bool Canvas::isAnimated() -{ - if (m_logAllCalls) qDebug() << "Canvas3D::" << __FUNCTION__; - return m_isAnimated; -} - /*! * \internal */ diff --git a/src/canvas3d_p.h b/src/canvas3d_p.h index 8c7479fc71f45deddb0393a2313a6c50caa151c3..ef9c4e3002810ea47e23ef272fd9a44828f1b318 100644 --- a/src/canvas3d_p.h +++ b/src/canvas3d_p.h @@ -62,7 +62,6 @@ class QT_CANVAS3D_EXPORT Canvas : public QQuickItem, QOpenGLFunctions Q_DISABLE_COPY(Canvas) Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(CanvasContext *context READ context NOTIFY contextChanged) - Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated NOTIFY animatedChanged) Q_PROPERTY(bool logAllCalls READ logAllCalls WRITE setLogAllCalls NOTIFY logAllCallsChanged) Q_PROPERTY(bool logAllErrors READ logAllErrors WRITE setLogAllErrors NOTIFY logAllErrorsChanged) Q_PROPERTY(float devicePixelRatio READ devicePixelRatio NOTIFY devicePixelRatioChanged) @@ -74,8 +73,6 @@ public: void handleWindowChanged(QQuickWindow *win); float devicePixelRatio(); - void setAnimated(bool animated); - bool isAnimated(); void setLogAllCalls(bool logCalls); bool logAllCalls() const; @@ -135,7 +132,6 @@ private: int m_maxSamples; int m_samples; - bool m_isAnimated; float m_devicePixelRatio; CanvasTextureImageLoader *m_imageLoader; diff --git a/src/context3d.cpp b/src/context3d.cpp index 6889c2802a38a394ec5e1deb90b78e469b55b32f..1e763109322ff14a5de1d0a2d4b35720bd0070dc 100644 --- a/src/context3d.cpp +++ b/src/context3d.cpp @@ -77,7 +77,7 @@ // Owned by the SG Render Thread! CanvasContext::CanvasContext(QOpenGLContext *context, int width, int height, QObject *parent) : - QObject(parent), + CanvasAbstractObject(parent), QOpenGLFunctions(context), m_unpackFlipYEnabled(false), m_logAllCalls(false), @@ -3159,7 +3159,7 @@ CanvasUniformLocation *CanvasContext::getUniformLocation(CanvasProgram *program, } CanvasUniformLocation *location = new CanvasUniformLocation(index, this); - location->setName(name); + location->insert("name", name); if (m_logAllCalls) qDebug() << "Context3D::" << __FUNCTION__ << "(program:" << program << ", name:" << name @@ -4930,9 +4930,9 @@ QVariant CanvasContext::getUniform(CanvasProgram *program, CanvasUniformLocation CanvasActiveInfo *info = getActiveUniform(program, locationId); int numValues = 4; - qDebug() << "Context3D::" << __FUNCTION__ << "info->type():" << glEnumToString(info->type()); + qDebug() << "Context3D::" << __FUNCTION__ << "info->type():" << glEnumToString(info->infoType()); - switch (info->type()) { + switch (info->infoType()) { case SAMPLER_2D: // Intentional flow through case SAMPLER_CUBE: diff --git a/src/context3d_p.h b/src/context3d_p.h index 19a45c5baa6ce1dd448984a25c7357786924b824..20477cfec8313aa4ed215e13a6f3c555b21432d0 100644 --- a/src/context3d_p.h +++ b/src/context3d_p.h @@ -49,6 +49,7 @@ #include "canvas3dcommon_p.h" #include "contextattributes_p.h" +#include "abstractobject3d_p.h" #include <QtGui/QOpenGLFunctions> #include <QString> @@ -83,7 +84,7 @@ class CanvasTypedArray; class CanvasShaderPrecisionFormat; class EnumToStringMap; -class QT_CANVAS3D_EXPORT CanvasContext : public QObject, protected QOpenGLFunctions +class QT_CANVAS3D_EXPORT CanvasContext : public CanvasAbstractObject, protected QOpenGLFunctions { Q_OBJECT Q_DISABLE_COPY(CanvasContext) diff --git a/src/contextattributes.cpp b/src/contextattributes.cpp index 9f39983991d5f49b1351caaa1dda53e4468669c5..a6a11e064cdf2e2930fb227a5369c4a6039b75f0 100644 --- a/src/contextattributes.cpp +++ b/src/contextattributes.cpp @@ -57,7 +57,7 @@ * \internal */ CanvasContextAttributes::CanvasContextAttributes(QObject *parent) : - QObject(parent), + CanvasAbstractObject(parent), m_alpha(false), // Should be true according to official WebGL spec. But ignored for now. m_depth(false), m_stencil(false), diff --git a/src/contextattributes_p.h b/src/contextattributes_p.h index 7abc012f1a1ad246fef6c670c5b0f414559535db..df1a8dfd385c388710aacf3b38c070cefc5fd641 100644 --- a/src/contextattributes_p.h +++ b/src/contextattributes_p.h @@ -47,9 +47,11 @@ #ifndef CONTEXTATTRIBUTES_P_H #define CONTEXTATTRIBUTES_P_H +#include "abstractobject3d_p.h" + #include <QObject> -class CanvasContextAttributes : public QObject +class CanvasContextAttributes : public CanvasAbstractObject { Q_OBJECT diff --git a/src/float32array.cpp b/src/float32array.cpp index 314ed66d3a8ca2d9df838345a5ec2c8175251685..b9de1e7a99553a6125c1498b3282c5a341a5739c 100644 --- a/src/float32array.cpp +++ b/src/float32array.cpp @@ -252,7 +252,7 @@ TypedArray *Float32Array::subarray(long begin, long end) QDebug operator<<(QDebug dbg, const CanvasFloat32Array *array) { if (array) - dbg.nospace() << "Float32Array ("<< array->m_name <<", length:" << array->length() << ")"; + dbg.nospace() << "Float32Array ("<< array->name() <<", length:" << array->length() << ")"; else dbg.nospace() << "Float32Array (null)"; return dbg.maybeSpace(); diff --git a/src/framebuffer3d.cpp b/src/framebuffer3d.cpp index 50dee954518541c5161c01a2064202761528491f..aa64300cc90153fee59650183df791a8bd5d7618 100644 --- a/src/framebuffer3d.cpp +++ b/src/framebuffer3d.cpp @@ -98,7 +98,7 @@ GLuint CanvasFrameBuffer::id() QDebug operator<<(QDebug dbg, const CanvasFrameBuffer *buffer) { if (buffer) - dbg.nospace() << "FrameBuffer3D("<< buffer->m_name <<", id:" << buffer->m_framebufferId << ")"; + dbg.nospace() << "FrameBuffer3D("<< buffer->name() <<", id:" << buffer->m_framebufferId << ")"; else dbg.nospace() << "FrameBuffer3D("<< ((void*) buffer) <<")"; return dbg.maybeSpace(); diff --git a/src/program3d.cpp b/src/program3d.cpp index 275a7c1e89a5acf13199b512b01c966c60ba21f4..cd3ff0284a3bb8083d3180b2f70785d832cf536f 100644 --- a/src/program3d.cpp +++ b/src/program3d.cpp @@ -216,7 +216,7 @@ QString CanvasProgram::log() QDebug operator<<(QDebug dbg, const CanvasProgram *program) { if (program) - dbg.nospace() << "Program3D("<< program->m_name << ", id:" << program->m_program->programId() << ")"; + dbg.nospace() << "Program3D("<< program->name() << ", id:" << program->m_program->programId() << ")"; else dbg.nospace() << "Program3D("<< ((void*) program) <<")"; return dbg.maybeSpace(); diff --git a/src/renderbuffer3d.cpp b/src/renderbuffer3d.cpp index 8f8b1ee068549a85d8a16b56d8ee25d3cb83dec9..067df6c250cd4cc53d185510ece90a0168d18e20 100644 --- a/src/renderbuffer3d.cpp +++ b/src/renderbuffer3d.cpp @@ -50,7 +50,7 @@ * \internal */ CanvasRenderBuffer::CanvasRenderBuffer(QObject *parent) : - QObject(parent) + CanvasAbstractObject(parent) { initializeOpenGLFunctions(); glGenRenderbuffers(1, &m_renderbufferId); diff --git a/src/renderbuffer3d_p.h b/src/renderbuffer3d_p.h index 5ce37e93d1899c7f1a7644308bed741f73a94fce..8da1b7b5dce1a7ff06c527d9ba2582dd7f50515f 100644 --- a/src/renderbuffer3d_p.h +++ b/src/renderbuffer3d_p.h @@ -47,10 +47,12 @@ #ifndef RENDERBUFFER3D_P_H #define RENDERBUFFER3D_P_H +#include "abstractobject3d_p.h" + #include <QObject> #include <QOpenGLFunctions> -class CanvasRenderBuffer : public QObject, protected QOpenGLFunctions +class CanvasRenderBuffer : public CanvasAbstractObject, protected QOpenGLFunctions { Q_OBJECT public: diff --git a/src/shader3d.cpp b/src/shader3d.cpp index 1b2b990892f71ade99df34c2df748226741b7f3d..f6d060c0ed60298f3f43b2a7336834e6f5f00de1 100644 --- a/src/shader3d.cpp +++ b/src/shader3d.cpp @@ -50,7 +50,7 @@ * \internal */ CanvasShader::CanvasShader(QOpenGLShader::ShaderType type, QObject *parent) : - QObject(parent), + CanvasAbstractObject(parent), m_shader(new QOpenGLShader(type, this)), m_sourceCode("") { diff --git a/src/shader3d_p.h b/src/shader3d_p.h index 9e49a3741947b8dae4fd327c09f1c4411cecaafc..ba4de3ef859eb7e2ee5d6d2aa88dd581d355aee4 100644 --- a/src/shader3d_p.h +++ b/src/shader3d_p.h @@ -48,10 +48,11 @@ #define SHADER3D_P_H #include "context3d_p.h" +#include "abstractobject3d_p.h" #include <QOpenGLShader> -class CanvasShader : public QObject +class CanvasShader : public CanvasAbstractObject { Q_OBJECT public: diff --git a/src/shaderprecisionformat.cpp b/src/shaderprecisionformat.cpp index 9b34f702ba01d096f67594c89e00f58ead581864..02562e888b190ecc447ef137e245468ea66a23a4 100644 --- a/src/shaderprecisionformat.cpp +++ b/src/shaderprecisionformat.cpp @@ -52,7 +52,7 @@ * \internal */ CanvasShaderPrecisionFormat::CanvasShaderPrecisionFormat(QObject *parent) : - QObject(parent) + CanvasAbstractObject(parent) { } diff --git a/src/shaderprecisionformat_p.h b/src/shaderprecisionformat_p.h index 470c96b918aa6ad6cda4fa443f274456fc9b48c5..12e7b95578e4c91714d1b336b87824a1adf1e1eb 100644 --- a/src/shaderprecisionformat_p.h +++ b/src/shaderprecisionformat_p.h @@ -47,9 +47,11 @@ #ifndef SHADERPRECISIONFORMAT_P_H #define SHADERPRECISIONFORMAT_P_H +#include "abstractobject3d_p.h" + #include <QObject> -class CanvasShaderPrecisionFormat : public QObject +class CanvasShaderPrecisionFormat : public CanvasAbstractObject { Q_OBJECT Q_PROPERTY(int rangeMin READ rangeMin NOTIFY rangeMinChanged) diff --git a/src/teximage3d.cpp b/src/teximage3d.cpp index d398e9eebfd419e1053b510029a6ab1902f80b00..3e9e1b6a7708dba4c1fce482a9e0a2da2d433107 100644 --- a/src/teximage3d.cpp +++ b/src/teximage3d.cpp @@ -358,7 +358,7 @@ uchar *CanvasTextureImage::convertToFormat(CanvasContext::glEnums format, bool f QDebug operator<<(QDebug dbg, const CanvasTextureImage *texImage) { if (texImage) - dbg.nospace() << "TexImage3D("<< ((void*) texImage) << texImage->m_name << ")"; + dbg.nospace() << "TexImage3D("<< ((void*) texImage) << texImage->name() << ")"; else dbg.nospace() << "TexImage3D("<< ((void*) texImage) <<")"; return dbg.maybeSpace(); diff --git a/src/teximage3dloader.cpp b/src/teximage3dloader.cpp index 049b14673d0f4ebaa3b2b211328a21ae6015eace..4a5e2d8ddd538bed9e23bbde6c922c08d75acf7b 100644 --- a/src/teximage3dloader.cpp +++ b/src/teximage3dloader.cpp @@ -70,7 +70,7 @@ * \internal */ CanvasTextureImageLoader::CanvasTextureImageLoader(QObject *parent) : - QObject(parent), + CanvasAbstractObject(parent), m_logAllCalls(false), m_logAllErrors(true), m_image(0), diff --git a/src/teximage3dloader_p.h b/src/teximage3dloader_p.h index 8e2421d0c511c7480a069078bb7e97a7a2124f41..6df88702ec346e379614af2a6483c69a233b3901 100644 --- a/src/teximage3dloader_p.h +++ b/src/teximage3dloader_p.h @@ -47,11 +47,12 @@ #ifndef TEXIMAGE3DLOADER_P_H #define TEXIMAGE3DLOADER_P_H +#include "abstractobject3d_p.h" #include "teximage3d_p.h" class Canvas; -class CanvasTextureImageLoader : public QObject +class CanvasTextureImageLoader : public CanvasAbstractObject { Q_OBJECT Q_PROPERTY(CanvasTextureImage* image READ image) diff --git a/src/texture3d.cpp b/src/texture3d.cpp index e11558fce36789844effbf73408dc4cf7a97b68d..cfcef46723108922d965abc4fe0b1de3b9618135 100644 --- a/src/texture3d.cpp +++ b/src/texture3d.cpp @@ -113,7 +113,7 @@ void CanvasTexture::del() QDebug operator<<(QDebug dbg, const CanvasTexture *texture) { if (texture) - dbg.nospace() << "Texture3D("<< ((void*) texture) << texture->m_name << ")"; + dbg.nospace() << "Texture3D("<< ((void*) texture) << texture->name() << ")"; else dbg.nospace() << "Texture3D("<< ((void*) texture) <<")"; return dbg.maybeSpace(); diff --git a/src/typedarray.cpp b/src/typedarray.cpp index 119aca0f48d8ed715ef34bf12a13c54c2ff18ca7..5e6cabd5f34eff1270cda1081a2c18a3c9713999 100644 --- a/src/typedarray.cpp +++ b/src/typedarray.cpp @@ -115,7 +115,7 @@ void CanvasTypedArray::setLength(unsigned long length) QDebug operator<<(QDebug dbg, const CanvasTypedArray *array) { if (array) - dbg.nospace() << "TypedArray ("<< array->m_name <<", length:" << array->length() << ")"; + dbg.nospace() << "TypedArray ("<< array->name() <<", length:" << array->length() << ")"; else dbg.nospace() << "TypedArray (null)"; return dbg.maybeSpace(); diff --git a/src/uniformlocation.cpp b/src/uniformlocation.cpp index a1b38be94d41672f0d9064651713f4fb7fc1a247..0793def5654c9dc36c2290b740c91fa4c6682038 100644 --- a/src/uniformlocation.cpp +++ b/src/uniformlocation.cpp @@ -76,7 +76,7 @@ int CanvasUniformLocation::id() QDebug operator<<(QDebug dbg, const CanvasUniformLocation *uLoc) { if (uLoc) - dbg.nospace() << "UniformLocation("<< (void *) uLoc << ", name:"<< uLoc->m_name <<", location:" << uLoc->m_location << ")"; + dbg.nospace() << "UniformLocation("<< (void *) uLoc << ", name:"<< uLoc->name() <<", location:" << uLoc->m_location << ")"; else dbg.nospace() << "UniformLocation("<< (void *)(uLoc) << ")";