From b2f16be92a19bc16869d4d4f53081b8bca25c911 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 29 Jan 2015 15:17:55 -0800 Subject: [PATCH 1/2] Fixing the non loading of some texture because the QImage bit size is not exactly what's expected --- interface/src/ui/overlays/ImageOverlay.cpp | 14 ++++++++++++-- libraries/gpu/src/gpu/Texture.cpp | 11 ++++++++++- libraries/render-utils/src/TextureCache.cpp | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/interface/src/ui/overlays/ImageOverlay.cpp b/interface/src/ui/overlays/ImageOverlay.cpp index 0c5d9a7737..73da8cc9c0 100644 --- a/interface/src/ui/overlays/ImageOverlay.cpp +++ b/interface/src/ui/overlays/ImageOverlay.cpp @@ -45,7 +45,6 @@ ImageOverlay::~ImageOverlay() { // TODO: handle setting image multiple times, how do we manage releasing the bound texture? void ImageOverlay::setImageURL(const QUrl& url) { _imageURL = url; - if (url.isEmpty()) { _isLoaded = true; _renderImage = false; @@ -57,6 +56,8 @@ void ImageOverlay::setImageURL(const QUrl& url) { } void ImageOverlay::render(RenderArgs* args) { + QString problem("http://s3.amazonaws.com/hifi-public/images/tools/grid-toolbar.svg"); + bool theONE = (_imageURL == problem); if (!_isLoaded && _renderImage) { _isLoaded = true; _texture = DependencyManager::get()->getTexture(_imageURL); @@ -69,8 +70,17 @@ void ImageOverlay::render(RenderArgs* args) { } if (_renderImage) { + glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, _texture->getID()); + if (theONE) { + std::string name = _imageURL.toString().toStdString(); + } + GLuint texID = _texture->getID(); + if (texID == 27) { + std::string name = _imageURL.toString().toStdString(); + glBindTexture(GL_TEXTURE_2D, texID); + } else + glBindTexture(GL_TEXTURE_2D, _texture->getID()); } const float MAX_COLOR = 255.0f; diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index d0779afb42..f9fbcb72df 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -254,7 +254,16 @@ bool Texture::assignStoredMip(uint16 level, const Element& format, Size size, co } // THen check that the mem buffer passed make sense with its format - if (size == evalStoredMipSize(level, format)) { + Size expectedSize = evalStoredMipSize(level, format); + if (size == expectedSize) { + _storage->assignMipData(level, format, size, bytes); + _stamp++; + return true; + } else if (size > expectedSize) { + // NOTE: We are facing this case sometime because apparently QImage (from where we get the bits) is generating images + // and alligning the line of pixels to 32 bits. + // We should probably consider something a bit more smart to get the correct result but for now (UI elements) + // it seems to work... _storage->assignMipData(level, format, size, bytes); _stamp++; return true; diff --git a/libraries/render-utils/src/TextureCache.cpp b/libraries/render-utils/src/TextureCache.cpp index 3644ded81c..aac2ec1b8c 100644 --- a/libraries/render-utils/src/TextureCache.cpp +++ b/libraries/render-utils/src/TextureCache.cpp @@ -387,7 +387,7 @@ NetworkTexture::NetworkTexture(const QUrl& url, TextureType type, const QByteArr if (!url.isValid()) { _loaded = true; } - + // default to white/blue/black /* glBindTexture(GL_TEXTURE_2D, getID()); switch (type) { From ec54ac7401a5186e882bbeaa5f4acea6a100af4f Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 29 Jan 2015 15:24:36 -0800 Subject: [PATCH 2/2] Fixing the non loading of some texture because the QImage bit size is not exactly what's expected --- interface/src/ui/overlays/ImageOverlay.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/interface/src/ui/overlays/ImageOverlay.cpp b/interface/src/ui/overlays/ImageOverlay.cpp index 73da8cc9c0..e354ea539e 100644 --- a/interface/src/ui/overlays/ImageOverlay.cpp +++ b/interface/src/ui/overlays/ImageOverlay.cpp @@ -56,8 +56,6 @@ void ImageOverlay::setImageURL(const QUrl& url) { } void ImageOverlay::render(RenderArgs* args) { - QString problem("http://s3.amazonaws.com/hifi-public/images/tools/grid-toolbar.svg"); - bool theONE = (_imageURL == problem); if (!_isLoaded && _renderImage) { _isLoaded = true; _texture = DependencyManager::get()->getTexture(_imageURL); @@ -70,17 +68,8 @@ void ImageOverlay::render(RenderArgs* args) { } if (_renderImage) { - glEnable(GL_TEXTURE_2D); - if (theONE) { - std::string name = _imageURL.toString().toStdString(); - } - GLuint texID = _texture->getID(); - if (texID == 27) { - std::string name = _imageURL.toString().toStdString(); - glBindTexture(GL_TEXTURE_2D, texID); - } else - glBindTexture(GL_TEXTURE_2D, _texture->getID()); + glBindTexture(GL_TEXTURE_2D, _texture->getID()); } const float MAX_COLOR = 255.0f;