mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 07:37:20 +02:00
Add runtime access to compression settings
This commit is contained in:
parent
f728ae7955
commit
ecda313223
3 changed files with 131 additions and 34 deletions
|
@ -330,6 +330,30 @@ void setupPreferences() {
|
||||||
preferences->addPreference(preference);
|
preferences->addPreference(preference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
auto getter = []()->bool { return image::isColorTexturesCompressionEnabled(); };
|
||||||
|
auto setter = [](bool value) { return image::setColorTexturesCompressionEnabled(value); };
|
||||||
|
auto preference = new CheckPreference(RENDER, "Compress Color Textures", getter, setter);
|
||||||
|
preferences->addPreference(preference);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto getter = []()->bool { return image::isNormalTexturesCompressionEnabled(); };
|
||||||
|
auto setter = [](bool value) { return image::setNormalTexturesCompressionEnabled(value); };
|
||||||
|
auto preference = new CheckPreference(RENDER, "Compress Normal Textures", getter, setter);
|
||||||
|
preferences->addPreference(preference);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto getter = []()->bool { return image::isGrayscaleTexturesCompressionEnabled(); };
|
||||||
|
auto setter = [](bool value) { return image::setGrayscaleTexturesCompressionEnabled(value); };
|
||||||
|
auto preference = new CheckPreference(RENDER, "Compress Grayscale Textures", getter, setter);
|
||||||
|
preferences->addPreference(preference);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto getter = []()->bool { return image::isCubeTexturesCompressionEnabled(); };
|
||||||
|
auto setter = [](bool value) { return image::setCubeTexturesCompressionEnabled(value); };
|
||||||
|
auto preference = new CheckPreference(RENDER, "Compress Cube Textures", getter, setter);
|
||||||
|
preferences->addPreference(preference);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
static const QString RENDER("Networking");
|
static const QString RENDER("Networking");
|
||||||
|
|
|
@ -22,16 +22,19 @@
|
||||||
#include <Profile.h>
|
#include <Profile.h>
|
||||||
#include <StatTracker.h>
|
#include <StatTracker.h>
|
||||||
#include <GLMHelpers.h>
|
#include <GLMHelpers.h>
|
||||||
|
#include <SettingHandle.h>
|
||||||
|
|
||||||
#include "ImageLogging.h"
|
#include "ImageLogging.h"
|
||||||
|
|
||||||
using namespace gpu;
|
using namespace gpu;
|
||||||
|
|
||||||
#define CPU_MIPMAPS 1
|
#define CPU_MIPMAPS 1
|
||||||
#define COMPRESS_COLOR_TEXTURES 0
|
|
||||||
#define COMPRESS_NORMALMAP_TEXTURES 0 // Disable Normalmap compression for now
|
static std::mutex settingsMutex;
|
||||||
#define COMPRESS_GRAYSCALE_TEXTURES 0
|
static Setting::Handle<bool> compressColorTextures("hifi.graphics.compressColorTextures", false);
|
||||||
#define COMPRESS_CUBEMAP_TEXTURES 0 // Disable Cubemap compression for now
|
static Setting::Handle<bool> compressNormalTextures("hifi.graphics.compressNormalTextures", false);
|
||||||
|
static Setting::Handle<bool> compressGrayscaleTextures("hifi.graphics.compressGrayscaleTextures", false);
|
||||||
|
static Setting::Handle<bool> compressCubeTextures("hifi.graphics.compressCubeTextures", false);
|
||||||
|
|
||||||
static const glm::uvec2 SPARSE_PAGE_SIZE(128);
|
static const glm::uvec2 SPARSE_PAGE_SIZE(128);
|
||||||
static const glm::uvec2 MAX_TEXTURE_SIZE(4096);
|
static const glm::uvec2 MAX_TEXTURE_SIZE(4096);
|
||||||
|
@ -144,6 +147,64 @@ gpu::TexturePointer TextureUsage::createCubeTextureFromImageWithoutIrradiance(co
|
||||||
return processCubeTextureColorFromImage(srcImage, srcImageName, false);
|
return processCubeTextureColorFromImage(srcImage, srcImageName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool isColorTexturesCompressionEnabled() {
|
||||||
|
#if CPU_MIPMAPS
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
return compressColorTextures.get();
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isNormalTexturesCompressionEnabled() {
|
||||||
|
#if CPU_MIPMAPS
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
return compressNormalTextures.get();
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isGrayscaleTexturesCompressionEnabled() {
|
||||||
|
#if CPU_MIPMAPS
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
return compressGrayscaleTextures.get();
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isCubeTexturesCompressionEnabled() {
|
||||||
|
#if CPU_MIPMAPS
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
return compressCubeTextures.get();
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void setColorTexturesCompressionEnabled(bool enabled) {
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
compressColorTextures.set(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setNormalTexturesCompressionEnabled(bool enabled) {
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
compressNormalTextures.set(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setGrayscaleTexturesCompressionEnabled(bool enabled) {
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
compressGrayscaleTextures.set(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setCubeTexturesCompressionEnabled(bool enabled) {
|
||||||
|
std::lock_guard<std::mutex> guard(settingsMutex);
|
||||||
|
compressCubeTextures.set(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gpu::TexturePointer processImage(const QByteArray& content, const std::string& filename, int maxNumPixels, TextureUsage::Type textureType) {
|
gpu::TexturePointer processImage(const QByteArray& content, const std::string& filename, int maxNumPixels, TextureUsage::Type textureType) {
|
||||||
// Help the QImage loader by extracting the image file format from the url filename ext.
|
// Help the QImage loader by extracting the image file format from the url filename ext.
|
||||||
// Some tga are not created properly without it.
|
// Some tga are not created properly without it.
|
||||||
|
@ -428,18 +489,19 @@ gpu::TexturePointer TextureUsage::process2DTextureColorFromImage(const QImage& s
|
||||||
gpu::TexturePointer theTexture = nullptr;
|
gpu::TexturePointer theTexture = nullptr;
|
||||||
|
|
||||||
if ((image.width() > 0) && (image.height() > 0)) {
|
if ((image.width() > 0) && (image.height() > 0)) {
|
||||||
#if CPU_MIPMAPS && COMPRESS_COLOR_TEXTURES
|
gpu::Element formatMip;
|
||||||
gpu::Element formatGPU;
|
gpu::Element formatGPU;
|
||||||
if (validAlpha) {
|
if (isColorTexturesCompressionEnabled()) {
|
||||||
formatGPU = alphaAsMask ? gpu::Element::COLOR_COMPRESSED_SRGBA_MASK : gpu::Element::COLOR_COMPRESSED_SRGBA;
|
if (validAlpha) {
|
||||||
|
formatGPU = alphaAsMask ? gpu::Element::COLOR_COMPRESSED_SRGBA_MASK : gpu::Element::COLOR_COMPRESSED_SRGBA;
|
||||||
|
} else {
|
||||||
|
formatGPU = gpu::Element::COLOR_COMPRESSED_SRGB;
|
||||||
|
}
|
||||||
|
formatMip = formatGPU;
|
||||||
} else {
|
} else {
|
||||||
formatGPU = gpu::Element::COLOR_COMPRESSED_SRGB;
|
formatMip = gpu::Element::COLOR_SBGRA_32;
|
||||||
|
formatGPU = gpu::Element::COLOR_SRGBA_32;
|
||||||
}
|
}
|
||||||
gpu::Element formatMip = formatGPU;
|
|
||||||
#else
|
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_SBGRA_32;
|
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_SRGBA_32;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (isStrict) {
|
if (isStrict) {
|
||||||
theTexture = gpu::Texture::createStrict(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
theTexture = gpu::Texture::createStrict(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
||||||
|
@ -547,14 +609,12 @@ gpu::TexturePointer TextureUsage::process2DTextureNormalMapFromImage(const QImag
|
||||||
|
|
||||||
gpu::TexturePointer theTexture = nullptr;
|
gpu::TexturePointer theTexture = nullptr;
|
||||||
if ((image.width() > 0) && (image.height() > 0)) {
|
if ((image.width() > 0) && (image.height() > 0)) {
|
||||||
|
|
||||||
#if CPU_MIPMAPS && COMPRESS_NORMALMAP_TEXTURES
|
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_COMPRESSED_XY;
|
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_COMPRESSED_XY;
|
|
||||||
#else
|
|
||||||
gpu::Element formatMip = gpu::Element::VEC2NU8_XY;
|
gpu::Element formatMip = gpu::Element::VEC2NU8_XY;
|
||||||
gpu::Element formatGPU = gpu::Element::VEC2NU8_XY;
|
gpu::Element formatGPU = gpu::Element::VEC2NU8_XY;
|
||||||
#endif
|
if (isNormalTexturesCompressionEnabled()) {
|
||||||
|
formatMip = gpu::Element::COLOR_COMPRESSED_XY;
|
||||||
|
formatGPU = gpu::Element::COLOR_COMPRESSED_XY;
|
||||||
|
}
|
||||||
|
|
||||||
theTexture = gpu::Texture::create2D(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
theTexture = gpu::Texture::create2D(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
||||||
theTexture->setSource(srcImageName);
|
theTexture->setSource(srcImageName);
|
||||||
|
@ -580,14 +640,15 @@ gpu::TexturePointer TextureUsage::process2DTextureGrayscaleFromImage(const QImag
|
||||||
|
|
||||||
gpu::TexturePointer theTexture = nullptr;
|
gpu::TexturePointer theTexture = nullptr;
|
||||||
if ((image.width() > 0) && (image.height() > 0)) {
|
if ((image.width() > 0) && (image.height() > 0)) {
|
||||||
|
gpu::Element formatMip;
|
||||||
#if CPU_MIPMAPS && COMPRESS_GRAYSCALE_TEXTURES
|
gpu::Element formatGPU;
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_COMPRESSED_RED;
|
if (isGrayscaleTexturesCompressionEnabled()) {
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_COMPRESSED_RED;
|
formatMip = gpu::Element::COLOR_COMPRESSED_RED;
|
||||||
#else
|
formatGPU = gpu::Element::COLOR_COMPRESSED_RED;
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_R_8;
|
} else {
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_R_8;
|
formatMip = gpu::Element::COLOR_R_8;
|
||||||
#endif
|
formatGPU = gpu::Element::COLOR_R_8;
|
||||||
|
}
|
||||||
|
|
||||||
theTexture = gpu::Texture::create2D(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
theTexture = gpu::Texture::create2D(formatGPU, image.width(), image.height(), gpu::Texture::MAX_NUM_MIPS, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
||||||
theTexture->setSource(srcImageName);
|
theTexture->setSource(srcImageName);
|
||||||
|
@ -864,13 +925,15 @@ gpu::TexturePointer TextureUsage::processCubeTextureColorFromImage(const QImage&
|
||||||
image = image.convertToFormat(QImage::Format_ARGB32);
|
image = image.convertToFormat(QImage::Format_ARGB32);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CPU_MIPMAPS && COMPRESS_CUBEMAP_TEXTURES
|
gpu::Element formatMip;
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_COMPRESSED_SRGBA;
|
gpu::Element formatGPU;
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_COMPRESSED_SRGBA;
|
if (isCubeTexturesCompressionEnabled()) {
|
||||||
#else
|
formatMip = gpu::Element::COLOR_COMPRESSED_SRGBA;
|
||||||
gpu::Element formatMip = gpu::Element::COLOR_SRGBA_32;
|
formatGPU = gpu::Element::COLOR_COMPRESSED_SRGBA;
|
||||||
gpu::Element formatGPU = gpu::Element::COLOR_SRGBA_32;
|
} else {
|
||||||
#endif
|
formatMip = gpu::Element::COLOR_SRGBA_32;
|
||||||
|
formatGPU = gpu::Element::COLOR_SRGBA_32;
|
||||||
|
}
|
||||||
|
|
||||||
// Find the layout of the cubemap in the 2D image
|
// Find the layout of the cubemap in the 2D image
|
||||||
// Use the original image size since processSourceImage may have altered the size / aspect ratio
|
// Use the original image size since processSourceImage may have altered the size / aspect ratio
|
||||||
|
|
|
@ -63,6 +63,16 @@ gpu::TexturePointer processCubeTextureColorFromImage(const QImage& srcImage, con
|
||||||
|
|
||||||
} // namespace TextureUsage
|
} // namespace TextureUsage
|
||||||
|
|
||||||
|
bool isColorTexturesCompressionEnabled();
|
||||||
|
bool isNormalTexturesCompressionEnabled();
|
||||||
|
bool isGrayscaleTexturesCompressionEnabled();
|
||||||
|
bool isCubeTexturesCompressionEnabled();
|
||||||
|
|
||||||
|
void setColorTexturesCompressionEnabled(bool enabled);
|
||||||
|
void setNormalTexturesCompressionEnabled(bool enabled);
|
||||||
|
void setGrayscaleTexturesCompressionEnabled(bool enabled);
|
||||||
|
void setCubeTexturesCompressionEnabled(bool enabled);
|
||||||
|
|
||||||
gpu::TexturePointer processImage(const QByteArray& content, const std::string& url, int maxNumPixels, TextureUsage::Type textureType);
|
gpu::TexturePointer processImage(const QByteArray& content, const std::string& url, int maxNumPixels, TextureUsage::Type textureType);
|
||||||
|
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|
Loading…
Reference in a new issue