summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2019-04-25 15:33:19 +0300
committerAntti Määttä <antti.maatta@qt.io>2019-05-14 11:05:25 +0000
commit8ad0905baa8fa01d30fb793686ed8fa5f0c13a03 (patch)
tree5be91515deb5998dbb30469f73108d656361325f
parent39a6846e93ad2c117be6c172e9d6f483357f2b42 (diff)
Autogenerate mipmaps for textures
Generate mipmaps if they are missing using QT3DS_GENERATE_MIPMAPS. Also enable anisotropic filtering and allow setting the value with QT3DS_ANISOTROPIC_VALUE env variable. Change-Id: I53f7ed6ec0e3ee511b4d605ba8a76d1177ced966 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp9
-rw-r--r--src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp3
-rw-r--r--src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp5
-rw-r--r--src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h1
-rw-r--r--src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp8
5 files changed, 23 insertions, 3 deletions
diff --git a/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp b/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp
index d055d72c..c1c3e97d 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp
+++ b/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp
@@ -136,6 +136,12 @@ namespace render {
}
}
+ static GLfloat getMaxAnisotropy()
+ {
+ static GLfloat val = (GLfloat)qEnvironmentVariableIntValue("QT3DS_ANISOTROPIC_VALUE");
+ return val > 0 ? val : 1.0f;
+ }
+
void NVRenderTextureBase::applyTexParams()
{
if (m_SamplerParamsDirty) {
@@ -143,7 +149,8 @@ namespace render {
m_Sampler->m_MinFilter, m_Sampler->m_MagFilter,
m_Sampler->m_WrapS, m_Sampler->m_WrapT, m_Sampler->m_WrapR,
m_Sampler->m_MinLod, m_Sampler->m_MaxLod, m_Sampler->m_LodBias,
- m_Sampler->m_CompareMode, m_Sampler->m_CompareOp);
+ m_Sampler->m_CompareMode, m_Sampler->m_CompareOp,
+ getMaxAnisotropy());
m_SamplerParamsDirty = false;
}
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp
index d78c51d9..f49f3a16 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp
+++ b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp
@@ -300,7 +300,8 @@ namespace render {
m_Conversion.fromTextureCompareFuncToGL(compareFunc)));
if (m_backendSupport.caps.bits.bAnistropySupported) {
- GL_CALL_EXTRA_FUNCTION(glTexParameterf(glTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy));
+ GL_CALL_EXTRA_FUNCTION(glTexParameterf(glTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
+ qMin(anisotropy, m_maxAnisotropy)));
}
}
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
index 940ab094..ba25ae7e 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
+++ b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
@@ -81,6 +81,8 @@ namespace render {
QT3DS_NEW(m_Foundation.getAllocator(), NVRenderBackendRasterizerStateGL)();
m_pCurrentDepthStencilState =
QT3DS_NEW(m_Foundation.getAllocator(), NVRenderBackendDepthStencilStateGL)();
+
+ m_glFunctions->glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_maxAnisotropy);
}
/// destructor
NVRenderBackendGLBase::~NVRenderBackendGLBase()
@@ -1167,7 +1169,8 @@ namespace render {
GL_CALL_FUNCTION(glTexParameteri(glTarget, GL_TEXTURE_WRAP_T,
m_Conversion.fromTextureCoordOpToGL(wrapT)));
if (m_backendSupport.caps.bits.bAnistropySupported) {
- GL_CALL_FUNCTION(glTexParameterf(glTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy));
+ GL_CALL_FUNCTION(glTexParameterf(glTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
+ qMin(m_maxAnisotropy, anisotropy)));
}
}
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h
index 9048a9c4..28e4dbb1 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h
+++ b/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h
@@ -523,6 +523,7 @@ namespace render {
#endif
QOpenGLFunctions *m_glFunctions;
QOpenGLExtraFunctions *m_glExtraFunctions;
+ GLfloat m_maxAnisotropy;
};
}
}
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp b/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
index 74e55d79..638e8458 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
+++ b/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
@@ -446,6 +446,14 @@ struct SBufferManager : public IBufferManager
theTexture->SetTextureData(
NVDataRef<QT3DSU8>((QT3DSU8 *)inLoadedImage.data, inLoadedImage.dataSizeInBytes), 0,
inLoadedImage.width, inLoadedImage.height, inLoadedImage.format, destFormat);
+ {
+ static int enable = qEnvironmentVariableIntValue("QT3DS_GENERATE_MIPMAPS");
+ if (enable) {
+ theTexture->SetMinFilter(NVRenderTextureMinifyingOp::LinearMipmapLinear);
+ theTexture->SetMagFilter(NVRenderTextureMagnifyingOp::Linear);
+ theTexture->GenerateMipmaps();
+ }
+ }
}
if (inBsdfMipmaps