mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 08:17:35 +02:00
name change: maxSize to maxNumPixels
This commit is contained in:
parent
b3ae6f9aec
commit
d65cbbb455
4 changed files with 25 additions and 26 deletions
|
@ -105,7 +105,7 @@ public:
|
||||||
glm::mat4 inverseBindMatrix;
|
glm::mat4 inverseBindMatrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
const int MAX_FBX_TEXTURE_SIZE = 1024 * 1024;
|
const int MAX_FBX_TEXTURE_NUM_PIXELS = 1024 * 1024;
|
||||||
|
|
||||||
/// A texture map in an FBX document.
|
/// A texture map in an FBX document.
|
||||||
class FBXTexture {
|
class FBXTexture {
|
||||||
|
@ -115,7 +115,7 @@ public:
|
||||||
QByteArray content;
|
QByteArray content;
|
||||||
|
|
||||||
Transform transform;
|
Transform transform;
|
||||||
int maxSize { MAX_FBX_TEXTURE_SIZE };
|
int maxNumPixels { MAX_FBX_TEXTURE_NUM_PIXELS };
|
||||||
int texcoordSet;
|
int texcoordSet;
|
||||||
QString texcoordSetName;
|
QString texcoordSetName;
|
||||||
|
|
||||||
|
|
|
@ -472,7 +472,7 @@ QUrl NetworkMaterial::getTextureUrl(const QUrl& baseUrl, const FBXTexture& textu
|
||||||
model::TextureMapPointer NetworkMaterial::fetchTextureMap(const QUrl& baseUrl, const FBXTexture& fbxTexture,
|
model::TextureMapPointer NetworkMaterial::fetchTextureMap(const QUrl& baseUrl, const FBXTexture& fbxTexture,
|
||||||
TextureType type, MapChannel channel) {
|
TextureType type, MapChannel channel) {
|
||||||
const auto url = getTextureUrl(baseUrl, fbxTexture);
|
const auto url = getTextureUrl(baseUrl, fbxTexture);
|
||||||
const auto texture = DependencyManager::get<TextureCache>()->getTexture(url, type, fbxTexture.content, fbxTexture.maxSize);
|
const auto texture = DependencyManager::get<TextureCache>()->getTexture(url, type, fbxTexture.content, fbxTexture.maxNumPixels);
|
||||||
_textures[channel] = Texture { fbxTexture.name, texture };
|
_textures[channel] = Texture { fbxTexture.name, texture };
|
||||||
|
|
||||||
auto map = std::make_shared<model::TextureMap>();
|
auto map = std::make_shared<model::TextureMap>();
|
||||||
|
|
|
@ -167,17 +167,17 @@ class TextureExtra {
|
||||||
public:
|
public:
|
||||||
NetworkTexture::Type type;
|
NetworkTexture::Type type;
|
||||||
const QByteArray& content;
|
const QByteArray& content;
|
||||||
int maxSize;
|
int maxNumPixels;
|
||||||
};
|
};
|
||||||
|
|
||||||
ScriptableResource* TextureCache::prefetch(const QUrl& url, int type, int maxSize) {
|
ScriptableResource* TextureCache::prefetch(const QUrl& url, int type, int maxNumPixels) {
|
||||||
auto byteArray = QByteArray();
|
auto byteArray = QByteArray();
|
||||||
TextureExtra extra = { (Type)type, byteArray, maxSize };
|
TextureExtra extra = { (Type)type, byteArray, maxNumPixels };
|
||||||
return ResourceCache::prefetch(url, &extra);
|
return ResourceCache::prefetch(url, &extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkTexturePointer TextureCache::getTexture(const QUrl& url, Type type, const QByteArray& content, int maxSize) {
|
NetworkTexturePointer TextureCache::getTexture(const QUrl& url, Type type, const QByteArray& content, int maxNumPixels) {
|
||||||
TextureExtra extra = { type, content, maxSize };
|
TextureExtra extra = { type, content, maxNumPixels };
|
||||||
return ResourceCache::getResource(url, QUrl(), &extra).staticCast<NetworkTexture>();
|
return ResourceCache::getResource(url, QUrl(), &extra).staticCast<NetworkTexture>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,15 +252,15 @@ QSharedPointer<Resource> TextureCache::createResource(const QUrl& url, const QSh
|
||||||
const TextureExtra* textureExtra = static_cast<const TextureExtra*>(extra);
|
const TextureExtra* textureExtra = static_cast<const TextureExtra*>(extra);
|
||||||
auto type = textureExtra ? textureExtra->type : Type::DEFAULT_TEXTURE;
|
auto type = textureExtra ? textureExtra->type : Type::DEFAULT_TEXTURE;
|
||||||
auto content = textureExtra ? textureExtra->content : QByteArray();
|
auto content = textureExtra ? textureExtra->content : QByteArray();
|
||||||
auto maxSize = textureExtra ? textureExtra->maxSize : ABSOLUTE_MAX_TEXTURE_SIZE;
|
auto maxNumPixels = textureExtra ? textureExtra->maxNumPixels : ABSOLUTE_MAX_TEXTURE_NUM_PIXELS;
|
||||||
return QSharedPointer<Resource>(new NetworkTexture(url, type, content, maxSize),
|
return QSharedPointer<Resource>(new NetworkTexture(url, type, content, maxNumPixels),
|
||||||
&Resource::deleter);
|
&Resource::deleter);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkTexture::NetworkTexture(const QUrl& url, Type type, const QByteArray& content, int maxSize) :
|
NetworkTexture::NetworkTexture(const QUrl& url, Type type, const QByteArray& content, int maxNumPixels) :
|
||||||
Resource(url),
|
Resource(url),
|
||||||
_type(type),
|
_type(type),
|
||||||
_maxSize(maxSize)
|
_maxNumPixels(maxNumPixels)
|
||||||
{
|
{
|
||||||
_textureSource = std::make_shared<gpu::TextureSource>();
|
_textureSource = std::make_shared<gpu::TextureSource>();
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ NetworkTexture::NetworkTexture(const QUrl& url, Type type, const QByteArray& con
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkTexture::NetworkTexture(const QUrl& url, const TextureLoaderFunc& textureLoader, const QByteArray& content) :
|
NetworkTexture::NetworkTexture(const QUrl& url, const TextureLoaderFunc& textureLoader, const QByteArray& content) :
|
||||||
NetworkTexture(url, CUSTOM_TEXTURE, content, ABSOLUTE_MAX_TEXTURE_SIZE)
|
NetworkTexture(url, CUSTOM_TEXTURE, content, ABSOLUTE_MAX_TEXTURE_NUM_PIXELS)
|
||||||
{
|
{
|
||||||
_textureLoader = textureLoader;
|
_textureLoader = textureLoader;
|
||||||
}
|
}
|
||||||
|
@ -294,7 +294,7 @@ class ImageReader : public QRunnable {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ImageReader(const QWeakPointer<Resource>& resource, const QByteArray& data,
|
ImageReader(const QWeakPointer<Resource>& resource, const QByteArray& data,
|
||||||
const QUrl& url = QUrl(), int maxSize = ABSOLUTE_MAX_TEXTURE_SIZE);
|
const QUrl& url = QUrl(), int maxNumPixels = ABSOLUTE_MAX_TEXTURE_NUM_PIXELS);
|
||||||
|
|
||||||
virtual void run() override;
|
virtual void run() override;
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ private:
|
||||||
QWeakPointer<Resource> _resource;
|
QWeakPointer<Resource> _resource;
|
||||||
QUrl _url;
|
QUrl _url;
|
||||||
QByteArray _content;
|
QByteArray _content;
|
||||||
int _maxSize;
|
int _maxNumPixels;
|
||||||
};
|
};
|
||||||
|
|
||||||
void NetworkTexture::downloadFinished(const QByteArray& data) {
|
void NetworkTexture::downloadFinished(const QByteArray& data) {
|
||||||
|
@ -313,15 +313,15 @@ void NetworkTexture::downloadFinished(const QByteArray& data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkTexture::loadContent(const QByteArray& content) {
|
void NetworkTexture::loadContent(const QByteArray& content) {
|
||||||
QThreadPool::globalInstance()->start(new ImageReader(_self, content, _url, _maxSize));
|
QThreadPool::globalInstance()->start(new ImageReader(_self, content, _url, _maxNumPixels));
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageReader::ImageReader(const QWeakPointer<Resource>& resource, const QByteArray& data,
|
ImageReader::ImageReader(const QWeakPointer<Resource>& resource, const QByteArray& data,
|
||||||
const QUrl& url, int maxSize) :
|
const QUrl& url, int maxNumPixels) :
|
||||||
_resource(resource),
|
_resource(resource),
|
||||||
_url(url),
|
_url(url),
|
||||||
_content(data),
|
_content(data),
|
||||||
_maxSize(maxSize)
|
_maxNumPixels(maxNumPixels)
|
||||||
{
|
{
|
||||||
#if DEBUG_DUMP_TEXTURE_LOADS
|
#if DEBUG_DUMP_TEXTURE_LOADS
|
||||||
static auto start = usecTimestampNow() / USECS_PER_MSEC;
|
static auto start = usecTimestampNow() / USECS_PER_MSEC;
|
||||||
|
@ -393,13 +393,12 @@ void ImageReader::run() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (imageWidth * imageHeight > _maxSize) {
|
if (imageWidth * imageHeight > _maxNumPixels) {
|
||||||
float scaleFactor = sqrtf(_maxSize / (float)(imageWidth * imageHeight));
|
float scaleFactor = sqrtf(_maxNumPixels / (float)(imageWidth * imageHeight));
|
||||||
int originalWidth = imageWidth;
|
int originalWidth = imageWidth;
|
||||||
int originalHeight = imageHeight;
|
int originalHeight = imageHeight;
|
||||||
imageWidth = (int)(scaleFactor * (float)imageWidth + 0.5f);
|
imageWidth = (int)(scaleFactor * (float)imageWidth + 0.5f);
|
||||||
imageHeight = (int)(scaleFactor * (float)imageHeight + 0.5f);
|
imageHeight = (int)(scaleFactor * (float)imageHeight + 0.5f);
|
||||||
//QSize newSize(imageWidth, imageHeight);
|
|
||||||
QImage newImage = image.scaled(QSize(imageWidth, imageHeight), Qt::IgnoreAspectRatio);
|
QImage newImage = image.scaled(QSize(imageWidth, imageHeight), Qt::IgnoreAspectRatio);
|
||||||
image.swap(newImage);
|
image.swap(newImage);
|
||||||
qCDebug(modelnetworking) << "Downscale image" << _url
|
qCDebug(modelnetworking) << "Downscale image" << _url
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <ResourceCache.h>
|
#include <ResourceCache.h>
|
||||||
#include <model/TextureMap.h>
|
#include <model/TextureMap.h>
|
||||||
|
|
||||||
const int ABSOLUTE_MAX_TEXTURE_SIZE = 8192 * 8192;
|
const int ABSOLUTE_MAX_TEXTURE_NUM_PIXELS = 8192 * 8192;
|
||||||
|
|
||||||
namespace gpu {
|
namespace gpu {
|
||||||
class Batch;
|
class Batch;
|
||||||
|
@ -62,7 +62,7 @@ public:
|
||||||
typedef gpu::Texture* TextureLoader(const QImage& image, const std::string& srcImageName);
|
typedef gpu::Texture* TextureLoader(const QImage& image, const std::string& srcImageName);
|
||||||
using TextureLoaderFunc = std::function<TextureLoader>;
|
using TextureLoaderFunc = std::function<TextureLoader>;
|
||||||
|
|
||||||
NetworkTexture(const QUrl& url, Type type, const QByteArray& content, int maxSize);
|
NetworkTexture(const QUrl& url, Type type, const QByteArray& content, int maxNumPixels);
|
||||||
NetworkTexture(const QUrl& url, const TextureLoaderFunc& textureLoader, const QByteArray& content);
|
NetworkTexture(const QUrl& url, const TextureLoaderFunc& textureLoader, const QByteArray& content);
|
||||||
|
|
||||||
QString getType() const override { return "NetworkTexture"; }
|
QString getType() const override { return "NetworkTexture"; }
|
||||||
|
@ -94,7 +94,7 @@ private:
|
||||||
int _originalHeight { 0 };
|
int _originalHeight { 0 };
|
||||||
int _width { 0 };
|
int _width { 0 };
|
||||||
int _height { 0 };
|
int _height { 0 };
|
||||||
int _maxSize { ABSOLUTE_MAX_TEXTURE_SIZE };
|
int _maxNumPixels { ABSOLUTE_MAX_TEXTURE_NUM_PIXELS };
|
||||||
};
|
};
|
||||||
|
|
||||||
using NetworkTexturePointer = QSharedPointer<NetworkTexture>;
|
using NetworkTexturePointer = QSharedPointer<NetworkTexture>;
|
||||||
|
@ -132,11 +132,11 @@ public:
|
||||||
|
|
||||||
/// Loads a texture from the specified URL.
|
/// Loads a texture from the specified URL.
|
||||||
NetworkTexturePointer getTexture(const QUrl& url, Type type = Type::DEFAULT_TEXTURE,
|
NetworkTexturePointer getTexture(const QUrl& url, Type type = Type::DEFAULT_TEXTURE,
|
||||||
const QByteArray& content = QByteArray(), int maxSize = ABSOLUTE_MAX_TEXTURE_SIZE);
|
const QByteArray& content = QByteArray(), int maxNumPixels = ABSOLUTE_MAX_TEXTURE_NUM_PIXELS);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Overload ResourceCache::prefetch to allow specifying texture type for loads
|
// Overload ResourceCache::prefetch to allow specifying texture type for loads
|
||||||
Q_INVOKABLE ScriptableResource* prefetch(const QUrl& url, int type, int maxSize = ABSOLUTE_MAX_TEXTURE_SIZE);
|
Q_INVOKABLE ScriptableResource* prefetch(const QUrl& url, int type, int maxNumPixels = ABSOLUTE_MAX_TEXTURE_NUM_PIXELS);
|
||||||
|
|
||||||
virtual QSharedPointer<Resource> createResource(const QUrl& url, const QSharedPointer<Resource>& fallback,
|
virtual QSharedPointer<Resource> createResource(const QUrl& url, const QSharedPointer<Resource>& fallback,
|
||||||
const void* extra) override;
|
const void* extra) override;
|
||||||
|
|
Loading…
Reference in a new issue