diff --git a/libraries/gpu/src/gpu/GLBackend.cpp b/libraries/gpu/src/gpu/GLBackend.cpp index b935796ec6..19c7b6eb7c 100644 --- a/libraries/gpu/src/gpu/GLBackend.cpp +++ b/libraries/gpu/src/gpu/GLBackend.cpp @@ -12,6 +12,8 @@ #include "GLBackendShared.h" #include +using namespace gpu; + GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = { (&::gpu::GLBackend::do_draw), @@ -141,6 +143,14 @@ bool GLBackend::checkGLError(const char* name) { } } +bool GLBackend::checkGLErrorDebug(const char* name) { +#ifdef DEBUG + checkGLError(name); +#else + Q_UNUSED(name); + return false; +#endif +} void GLBackend::syncCache() { syncTransformStateCache(); diff --git a/libraries/gpu/src/gpu/GLBackend.h b/libraries/gpu/src/gpu/GLBackend.h index 10fffdf97b..0fe35842bc 100644 --- a/libraries/gpu/src/gpu/GLBackend.h +++ b/libraries/gpu/src/gpu/GLBackend.h @@ -49,6 +49,9 @@ public: static bool checkGLError(const char* name = nullptr); + // Only checks in debug builds + static bool checkGLErrorDebug(const char* name = nullptr); + static bool makeProgram(Shader& shader, const Shader::BindingSet& bindings = Shader::BindingSet()); diff --git a/libraries/gpu/src/gpu/GLBackendOutput.cpp b/libraries/gpu/src/gpu/GLBackendOutput.cpp index b0dee550d9..903c97f45b 100755 --- a/libraries/gpu/src/gpu/GLBackendOutput.cpp +++ b/libraries/gpu/src/gpu/GLBackendOutput.cpp @@ -11,6 +11,7 @@ #include "GPULogging.h" #include "GLBackendShared.h" +using namespace gpu; GLBackend::GLFramebuffer::GLFramebuffer() {} diff --git a/libraries/gpu/src/gpu/GLBackendShared.h b/libraries/gpu/src/gpu/GLBackendShared.h index 92e06e1d11..9f5c93278b 100644 --- a/libraries/gpu/src/gpu/GLBackendShared.h +++ b/libraries/gpu/src/gpu/GLBackendShared.h @@ -17,9 +17,7 @@ #include "Batch.h" -using namespace gpu; - -static const GLenum _primitiveToGLmode[NUM_PRIMITIVES] = { +static const GLenum _primitiveToGLmode[gpu::NUM_PRIMITIVES] = { GL_POINTS, GL_LINES, GL_LINE_STRIP, @@ -30,7 +28,7 @@ static const GLenum _primitiveToGLmode[NUM_PRIMITIVES] = { GL_QUAD_STRIP, }; -static const GLenum _elementTypeToGLType[NUM_TYPES]= { +static const GLenum _elementTypeToGLType[gpu::NUM_TYPES] = { GL_FLOAT, GL_INT, GL_UNSIGNED_INT, @@ -49,10 +47,8 @@ static const GLenum _elementTypeToGLType[NUM_TYPES]= { GL_UNSIGNED_BYTE }; -#if _DEBUG -#define CHECK_GL_ERROR() ::gpu::GLBackend::checkGLError(__FUNCTION__) -#else -#define CHECK_GL_ERROR() false -#endif +// Stupid preprocessor trick to turn the line macro into a string +#define CHECK_GL_ERROR_HELPER(x) #x +#define CHECK_GL_ERROR() gpu::GLBackend::checkGLErrorDebug(__FUNCTION__ ":" CHECK_GL_ERROR_HELPER(__LINE__)) #endif diff --git a/libraries/gpu/src/gpu/GLBackendTexture.cpp b/libraries/gpu/src/gpu/GLBackendTexture.cpp index 999173e5b7..b8f98590ff 100755 --- a/libraries/gpu/src/gpu/GLBackendTexture.cpp +++ b/libraries/gpu/src/gpu/GLBackendTexture.cpp @@ -11,6 +11,7 @@ #include "GPULogging.h" #include "GLBackendShared.h" +using namespace gpu; GLBackend::GLTexture::GLTexture() : _storageStamp(0), diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 7c977210fc..db2e2953c0 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -384,10 +384,12 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { bool OctreePacketData::appendValue(const QVector& value) { uint16_t qVecSize = value.size(); bool success = appendValue(qVecSize); - success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::vec3)); if (success) { - _bytesOfValues += qVecSize * sizeof(glm::vec3); - _totalBytesOfValues += qVecSize * sizeof(glm::vec3); + success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::vec3)); + if (success) { + _bytesOfValues += qVecSize * sizeof(glm::vec3); + _totalBytesOfValues += qVecSize * sizeof(glm::vec3); + } } return success; } diff --git a/libraries/shared/src/VariantMapToScriptValue.cpp b/libraries/shared/src/VariantMapToScriptValue.cpp index 6c21557325..c0d21e9995 100644 --- a/libraries/shared/src/VariantMapToScriptValue.cpp +++ b/libraries/shared/src/VariantMapToScriptValue.cpp @@ -13,35 +13,61 @@ #include "SharedLogging.h" #include "VariantMapToScriptValue.h" + +QScriptValue variantToScriptValue(QVariant& qValue, QScriptEngine& scriptEngine) { + switch(qValue.type()) { + case QVariant::Bool: + return qValue.toBool(); + break; + case QVariant::Int: + return qValue.toInt(); + break; + case QVariant::Double: + return qValue.toDouble(); + break; + case QVariant::String: { + return scriptEngine.newVariant(qValue); + break; + } + case QVariant::Map: { + QVariantMap childMap = qValue.toMap(); + return variantMapToScriptValue(childMap, scriptEngine); + break; + } + case QVariant::List: { + QVariantList childList = qValue.toList(); + return variantListToScriptValue(childList, scriptEngine); + break; + } + default: + qCDebug(shared) << "unhandled QScript type" << qValue.type(); + break; + } + + return QScriptValue(); +} + + QScriptValue variantMapToScriptValue(QVariantMap& variantMap, QScriptEngine& scriptEngine) { QScriptValue scriptValue = scriptEngine.newObject(); for (QVariantMap::const_iterator iter = variantMap.begin(); iter != variantMap.end(); ++iter) { QString key = iter.key(); QVariant qValue = iter.value(); - - switch(qValue.type()) { - case QVariant::Bool: - scriptValue.setProperty(key, qValue.toBool()); - break; - case QVariant::Int: - scriptValue.setProperty(key, qValue.toInt()); - break; - case QVariant::Double: - scriptValue.setProperty(key, qValue.toDouble()); - break; - case QVariant::String: { - scriptValue.setProperty(key, scriptEngine.newVariant(qValue)); - break; - } - case QVariant::Map: { - QVariantMap childMap = qValue.toMap(); - scriptValue.setProperty(key, variantMapToScriptValue(childMap, scriptEngine)); - break; - } - default: - qCDebug(shared) << "unhandled QScript type" << qValue.type(); - } + scriptValue.setProperty(key, variantToScriptValue(qValue, scriptEngine)); + } + + return scriptValue; +} + + +QScriptValue variantListToScriptValue(QVariantList& variantList, QScriptEngine& scriptEngine) { + QScriptValue scriptValue = scriptEngine.newObject(); + + scriptValue.setProperty("length", variantList.size()); + int i = 0; + foreach (QVariant v, variantList) { + scriptValue.setProperty(i++, variantToScriptValue(v, scriptEngine)); } return scriptValue; diff --git a/libraries/shared/src/VariantMapToScriptValue.h b/libraries/shared/src/VariantMapToScriptValue.h index 503f8c6490..ea65cccb3d 100644 --- a/libraries/shared/src/VariantMapToScriptValue.h +++ b/libraries/shared/src/VariantMapToScriptValue.h @@ -13,4 +13,6 @@ #include #include +QScriptValue variantToScriptValue(QVariant& qValue, QScriptEngine& scriptEngine); QScriptValue variantMapToScriptValue(QVariantMap& variantMap, QScriptEngine& scriptEngine); +QScriptValue variantListToScriptValue(QVariantList& variantList, QScriptEngine& scriptEngine);