From 55de8ceb85b23f1ee88eed8ec2541f850db34023 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 31 Oct 2013 14:46:51 -0700 Subject: [PATCH] Use blue default texture when we fail to load a normal map. --- interface/src/avatar/Head.cpp | 2 +- interface/src/renderer/GeometryCache.cpp | 4 ++-- interface/src/renderer/TextureCache.cpp | 16 ++++++++-------- interface/src/renderer/TextureCache.h | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 25a72f805b..496b45256b 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -102,7 +102,7 @@ void Head::init() { _eyePositionLocation = _irisProgram.uniformLocation("eyePosition"); _irisTexture = Application::getInstance()->getTextureCache()->getTexture(QUrl::fromLocalFile(IRIS_TEXTURE_FILENAME), - true).staticCast(); + false, true).staticCast(); } _faceModel.init(); } diff --git a/interface/src/renderer/GeometryCache.cpp b/interface/src/renderer/GeometryCache.cpp index 35d2ef1b09..1a32a70c71 100644 --- a/interface/src/renderer/GeometryCache.cpp +++ b/interface/src/renderer/GeometryCache.cpp @@ -365,11 +365,11 @@ void NetworkGeometry::maybeReadModelWithMapping() { basePath = basePath.left(basePath.lastIndexOf('/') + 1); if (!part.diffuseFilename.isEmpty()) { url.setPath(basePath + part.diffuseFilename); - networkPart.diffuseTexture = Application::getInstance()->getTextureCache()->getTexture(url, mesh.isEye); + networkPart.diffuseTexture = Application::getInstance()->getTextureCache()->getTexture(url, false, mesh.isEye); } if (!part.normalFilename.isEmpty()) { url.setPath(basePath + part.normalFilename); - networkPart.normalTexture = Application::getInstance()->getTextureCache()->getTexture(url); + networkPart.normalTexture = Application::getInstance()->getTextureCache()->getTexture(url, true); } networkMesh.parts.append(networkPart); diff --git a/interface/src/renderer/TextureCache.cpp b/interface/src/renderer/TextureCache.cpp index 959ba009a5..c99f82fdb4 100644 --- a/interface/src/renderer/TextureCache.cpp +++ b/interface/src/renderer/TextureCache.cpp @@ -121,18 +121,18 @@ GLuint TextureCache::getFileTextureID(const QString& filename) { return id; } -QSharedPointer TextureCache::getTexture(const QUrl& url, bool dilatable) { +QSharedPointer TextureCache::getTexture(const QUrl& url, bool normalMap, bool dilatable) { QSharedPointer texture; if (dilatable) { texture = _dilatableNetworkTextures.value(url); if (texture.isNull()) { - texture = QSharedPointer(new DilatableNetworkTexture(url)); + texture = QSharedPointer(new DilatableNetworkTexture(url, normalMap)); _dilatableNetworkTextures.insert(url, texture); } } else { texture = _networkTextures.value(url); if (texture.isNull()) { - texture = QSharedPointer(new NetworkTexture(url)); + texture = QSharedPointer(new NetworkTexture(url, normalMap)); _networkTextures.insert(url, texture); } } @@ -219,7 +219,7 @@ Texture::~Texture() { glDeleteTextures(1, &_id); } -NetworkTexture::NetworkTexture(const QUrl& url) : _reply(NULL), _averageColor(1.0f, 1.0f, 1.0f, 1.0f) { +NetworkTexture::NetworkTexture(const QUrl& url, bool normalMap) : _reply(NULL), _averageColor(1.0f, 1.0f, 1.0f, 1.0f) { if (!url.isValid()) { return; } @@ -230,9 +230,9 @@ NetworkTexture::NetworkTexture(const QUrl& url) : _reply(NULL), _averageColor(1. connect(_reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(handleDownloadProgress(qint64,qint64))); connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(handleReplyError())); - // default to white + // default to white/blue glBindTexture(GL_TEXTURE_2D, getID()); - loadSingleColorTexture(OPAQUE_WHITE); + loadSingleColorTexture(normalMap ? OPAQUE_BLUE : OPAQUE_WHITE); glBindTexture(GL_TEXTURE_2D, 0); } @@ -288,8 +288,8 @@ void NetworkTexture::handleReplyError() { _reply = NULL; } -DilatableNetworkTexture::DilatableNetworkTexture(const QUrl& url) : - NetworkTexture(url), +DilatableNetworkTexture::DilatableNetworkTexture(const QUrl& url, bool normalMap) : + NetworkTexture(url, normalMap), _innerRadius(0), _outerRadius(0) { diff --git a/interface/src/renderer/TextureCache.h b/interface/src/renderer/TextureCache.h index cd15f67b8e..cab9446782 100644 --- a/interface/src/renderer/TextureCache.h +++ b/interface/src/renderer/TextureCache.h @@ -47,7 +47,7 @@ public: GLuint getFileTextureID(const QString& filename); /// Loads a texture from the specified URL. - QSharedPointer getTexture(const QUrl& url, bool dilatable = false); + QSharedPointer getTexture(const QUrl& url, bool normalMap = false, bool dilatable = false); /// Returns a pointer to the primary framebuffer object. This render target includes a depth component, and is /// used for scene rendering. @@ -105,7 +105,7 @@ class NetworkTexture : public QObject, public Texture { public: - NetworkTexture(const QUrl& url); + NetworkTexture(const QUrl& url, bool normalMap); ~NetworkTexture(); /// Returns the average color over the entire texture. @@ -132,7 +132,7 @@ class DilatableNetworkTexture : public NetworkTexture { public: - DilatableNetworkTexture(const QUrl& url); + DilatableNetworkTexture(const QUrl& url, bool normalMap); /// Returns a pointer to a texture with the requested amount of dilation. QSharedPointer getDilatedTexture(float dilation);