From c35d81260d70d1545be168be27226a24b384b553 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 15 Apr 2016 00:49:45 -0700 Subject: [PATCH] Load local texture files through the same code as network --- .../src/model-networking/TextureCache.cpp | 119 +++++++++--------- .../src/model-networking/TextureCache.h | 2 +- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index e482c20b11..0e93119fe3 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -154,21 +154,63 @@ NetworkTexturePointer TextureCache::getTexture(const QUrl& url, TextureType type return ResourceCache::getResource(url, QUrl(), content.isEmpty(), &extra).staticCast(); } -/// Returns a texture version of an image file -gpu::TexturePointer TextureCache::getImageTexture(const QString& path) { - QImage image = QImage(path).mirrored(false, true); - gpu::Element formatGPU = gpu::Element(gpu::VEC3, gpu::NUINT8, gpu::RGB); - gpu::Element formatMip = gpu::Element(gpu::VEC3, gpu::NUINT8, gpu::RGB); - if (image.hasAlphaChannel()) { - formatGPU = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA); - formatMip = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::BGRA); + +TextureCache::TextureLoaderFunc getTextureLoaderForType(TextureType type) { + switch (type) { + case ALBEDO_TEXTURE: { + return model::TextureUsage::createAlbedoTextureFromImage; + break; + } + case EMISSIVE_TEXTURE: { + return model::TextureUsage::createEmissiveTextureFromImage; + break; + } + case LIGHTMAP_TEXTURE: { + return model::TextureUsage::createLightmapTextureFromImage; + break; + } + case CUBE_TEXTURE: { + return model::TextureUsage::createCubeTextureFromImage; + break; + } + case BUMP_TEXTURE: { + return model::TextureUsage::createNormalTextureFromBumpImage; + break; + } + case NORMAL_TEXTURE: { + return model::TextureUsage::createNormalTextureFromNormalImage; + break; + } + case ROUGHNESS_TEXTURE: { + return model::TextureUsage::createRoughnessTextureFromImage; + break; + } + case GLOSS_TEXTURE: { + return model::TextureUsage::createRoughnessTextureFromGlossImage; + break; + } + case SPECULAR_TEXTURE: { + return model::TextureUsage::createMetallicTextureFromImage; + break; + } + case CUSTOM_TEXTURE: { + Q_ASSERT(false); + return TextureCache::TextureLoaderFunc(); + break; + } + case DEFAULT_TEXTURE: + default: { + return model::TextureUsage::create2DTextureFromImage; + break; + } } - gpu::TexturePointer texture = gpu::TexturePointer( - gpu::Texture::create2D(formatGPU, image.width(), image.height(), - gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR))); - texture->assignStoredMip(0, formatMip, image.byteCount(), image.constBits()); - texture->autoGenerateMips(-1); - return texture; +} + +/// Returns a texture version of an image file +gpu::TexturePointer TextureCache::getImageTexture(const QString& path, TextureType type) { + QImage image = QImage(path); + auto loader = getTextureLoaderForType(type); + return gpu::TexturePointer(loader(image, QUrl::fromLocalFile(path).fileName().toStdString())); } QSharedPointer TextureCache::createResource(const QUrl& url, @@ -203,53 +245,10 @@ NetworkTexture::NetworkTexture(const QUrl& url, const TextureLoaderFunc& texture } NetworkTexture::TextureLoaderFunc NetworkTexture::getTextureLoader() const { - switch (_type) { - case ALBEDO_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createAlbedoTextureFromImage); - break; - } - case EMISSIVE_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createEmissiveTextureFromImage); - break; - } - case LIGHTMAP_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createLightmapTextureFromImage); - break; - } - case CUBE_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createCubeTextureFromImage); - break; - } - case BUMP_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createNormalTextureFromBumpImage); - break; - } - case NORMAL_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createNormalTextureFromNormalImage); - break; - } - case ROUGHNESS_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createRoughnessTextureFromImage); - break; - } - case GLOSS_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createRoughnessTextureFromGlossImage); - break; - } - case SPECULAR_TEXTURE: { - return TextureLoaderFunc(model::TextureUsage::createMetallicTextureFromImage); - break; - } - case CUSTOM_TEXTURE: { - return _textureLoader; - break; - } - case DEFAULT_TEXTURE: - default: { - return TextureLoaderFunc(model::TextureUsage::create2DTextureFromImage); - break; - } + if (_type == CUSTOM_TEXTURE) { + return _textureLoader; } + return getTextureLoaderForType(_type); } diff --git a/libraries/model-networking/src/model-networking/TextureCache.h b/libraries/model-networking/src/model-networking/TextureCache.h index 4fe9a89460..a392117958 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.h +++ b/libraries/model-networking/src/model-networking/TextureCache.h @@ -72,7 +72,7 @@ public: const gpu::TexturePointer& getNormalFittingTexture(); /// Returns a texture version of an image file - static gpu::TexturePointer getImageTexture(const QString& path); + static gpu::TexturePointer getImageTexture(const QString& path, TextureType type = DEFAULT_TEXTURE); /// Loads a texture from the specified URL. NetworkTexturePointer getTexture(const QUrl& url, TextureType type = DEFAULT_TEXTURE,