summaryrefslogtreecommitdiffstats
path: root/src/runtimerender
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender')
-rw-r--r--src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp6
-rw-r--r--src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp4
-rw-r--r--src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp6
-rw-r--r--src/runtimerender/Qt3DSRenderEffectSystem.cpp4
-rw-r--r--src/runtimerender/Qt3DSRenderUIPLoader.cpp2
-rw-r--r--src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp38
-rw-r--r--src/runtimerender/Qt3DSRenderUIPSharedTranslation.h16
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderImage.cpp2
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderImage.h2
9 files changed, 75 insertions, 5 deletions
diff --git a/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp b/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
index 7423c0e..a09a896 100644
--- a/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
+++ b/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
@@ -442,6 +442,12 @@ struct SShaderGenerator : public ICustomMaterialShaderGenerator
inImage.m_Image.m_HorizontalTilingMode);
inImage.m_Image.m_TextureData.m_Texture->SetTextureWrapT(
inImage.m_Image.m_VerticalTilingMode);
+ if (inImage.m_Image.m_MinFilter > NVRenderTextureMinifyingOp::Linear
+ && inImage.m_Image.m_TextureData.m_Texture->GetNumMipmaps() == 0) {
+ inImage.m_Image.m_TextureData.m_Texture->GenerateMipmaps();
+ }
+ inImage.m_Image.m_TextureData.m_Texture->SetMinFilter(inImage.m_Image.m_MinFilter);
+ inImage.m_Image.m_TextureData.m_Texture->SetMagFilter(inImage.m_Image.m_MagFilter);
theShaderProps.m_Sampler.Set(inImage.m_Image.m_TextureData.m_Texture);
theShaderProps.m_Offsets.Set(offsets);
diff --git a/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp b/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
index 1b2e6a0..62ff5c6 100644
--- a/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
+++ b/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
@@ -1305,8 +1305,8 @@ struct SMaterialSystem : public ICustomMaterialSystem
auto *texture = image->m_TextureData.m_Texture;
texture->SetTextureWrapS(image->m_HorizontalTilingMode);
texture->SetTextureWrapT(image->m_VerticalTilingMode);
- texture->SetMinFilter(inDefinition.m_MinFilterOp);
- texture->SetMagFilter(inDefinition.m_MagFilterOp);
+ texture->SetMinFilter(image->m_MinFilter);
+ texture->SetMagFilter(image->m_MagFilter);
if (inDefinition.m_MinFilterOp != NVRenderTextureMinifyingOp::Nearest
&& inDefinition.m_MinFilterOp != NVRenderTextureMinifyingOp::Linear
&& !texture->GetNumMipmaps()) {
diff --git a/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp b/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
index 157434d..cfa6cff 100644
--- a/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
+++ b/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
@@ -862,6 +862,12 @@ struct SShaderGenerator : public IDefaultMaterialShaderGenerator
inImage.m_Image.m_HorizontalTilingMode);
inImage.m_Image.m_TextureData.m_Texture->SetTextureWrapT(
inImage.m_Image.m_VerticalTilingMode);
+ if (inImage.m_Image.m_MinFilter > NVRenderTextureMinifyingOp::Linear
+ && inImage.m_Image.m_TextureData.m_Texture->GetNumMipmaps() == 0) {
+ inImage.m_Image.m_TextureData.m_Texture->GenerateMipmaps();
+ }
+ inImage.m_Image.m_TextureData.m_Texture->SetMinFilter(inImage.m_Image.m_MinFilter);
+ inImage.m_Image.m_TextureData.m_Texture->SetMagFilter(inImage.m_Image.m_MagFilter);
theShaderProps.m_Sampler.Set(imageTexture);
theShaderProps.m_Offsets.Set(offsets);
theShaderProps.m_Rotations.Set(rotations);
diff --git a/src/runtimerender/Qt3DSRenderEffectSystem.cpp b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
index e3da5b0..6ece380 100644
--- a/src/runtimerender/Qt3DSRenderEffectSystem.cpp
+++ b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
@@ -1063,8 +1063,8 @@ struct SEffectSystem : public IEffectSystem
auto *texture = image->m_TextureData.m_Texture;
texture->SetTextureWrapS(image->m_HorizontalTilingMode);
texture->SetTextureWrapT(image->m_VerticalTilingMode);
- texture->SetMinFilter(inDefinition.m_MinFilterOp);
- texture->SetMagFilter(inDefinition.m_MagFilterOp);
+ texture->SetMinFilter(image->m_MinFilter);
+ texture->SetMagFilter(image->m_MagFilter);
if (inDefinition.m_MinFilterOp != NVRenderTextureMinifyingOp::Nearest
&& inDefinition.m_MinFilterOp != NVRenderTextureMinifyingOp::Linear
&& !texture->GetNumMipmaps()) {
diff --git a/src/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
index 2cecc1a..8d26350 100644
--- a/src/runtimerender/Qt3DSRenderUIPLoader.cpp
+++ b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
@@ -841,6 +841,8 @@ struct SRenderUIPLoader : public IDOMReferenceResolver
#define Image_Rotation "rotationuv"
#define Image_Position_X "positionu"
#define Image_Position_Y "positionv"
+#define Image_MinFilter "minfilter"
+#define Image_MagFilter "magfilter"
#define Image_MappingMode "mappingmode"
#define Image_HorizontalTilingMode "tilingmodehorz"
#define Image_VerticalTilingMode "tilingmodevert"
diff --git a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
index e63dd76..998de32 100644
--- a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
+++ b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
@@ -113,6 +113,12 @@ namespace render {
#define WCHAR_T_Front L"Front"
#define WCHAR_T_All L"All"
#define WCHAR_T_None L"None"
+#define WCHAR_T_Nearest L"Nearest"
+#define WCHAR_T_Linear L"Linear"
+#define WCHAR_T_NearestMipmapNearest L"NearestMipmapNearest"
+#define WCHAR_T_LinearMipmapNearest L"LinearMipmapNearest"
+#define WCHAR_T_NearestMipmapLinear L"NearestMipmapLinear"
+#define WCHAR_T_LinearMipmapLinear L"LinearMipmapLinear"
#define CHAR_T_Directional "Directional"
#define CHAR_T_Point "Point"
@@ -195,6 +201,12 @@ namespace render {
#define CHAR_T_Front "Front"
#define CHAR_T_All "All"
#define CHAR_T_None "None"
+#define CHAR_T_Nearest "Nearest"
+#define CHAR_T_Linear "Linear"
+#define CHAR_T_NearestMipmapNearest "NearestMipmapNearest"
+#define CHAR_T_LinearMipmapNearest "LinearMipmapNearest"
+#define CHAR_T_NearestMipmapLinear "NearestMipmapLinear"
+#define CHAR_T_LinearMipmapLinear "LinearMipmapLinear"
#define DEFINE_NAME_MAP_ENTRY(enumval, name) \
{ \
@@ -246,6 +258,22 @@ namespace render {
{ (QT3DSU32)-1, NULL },
};
+ SEnumNameMap g_RenderTextureMinifyingOpMap[] = {
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::Nearest, Nearest),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::Linear, Linear),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::NearestMipmapNearest, NearestMipmapNearest),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::LinearMipmapNearest, LinearMipmapNearest),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::NearestMipmapLinear, NearestMipmapLinear),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMinifyingOp::LinearMipmapLinear, LinearMipmapLinear),
+ { (QT3DSU32)-1, NULL },
+ };
+
+ SEnumNameMap g_RenderTextureMagnifyingOpMap[] = {
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMagnifyingOp::Nearest, Nearest),
+ DEFINE_NAME_MAP_ENTRY(NVRenderTextureMagnifyingOp::Linear, Linear),
+ { (QT3DSU32)-1, NULL },
+ };
+
SEnumNameMap g_TextHorizontalAlignmentMap[] = {
DEFINE_NAME_MAP_ENTRY(TextHorizontalAlignment::Left, Left),
DEFINE_NAME_MAP_ENTRY(TextHorizontalAlignment::Center, Center),
@@ -414,6 +442,16 @@ namespace render {
return g_RenderTextureCoordOpMap;
}
+ SEnumNameMap *SEnumParseMap<NVRenderTextureMinifyingOp::Enum>::GetMap()
+ {
+ return g_RenderTextureMinifyingOpMap;
+ }
+
+ SEnumNameMap *SEnumParseMap<NVRenderTextureMagnifyingOp::Enum>::GetMap()
+ {
+ return g_RenderTextureMagnifyingOpMap;
+ }
+
SEnumNameMap *SEnumParseMap<TextHorizontalAlignment::Enum>::GetMap()
{
return g_TextHorizontalAlignmentMap;
diff --git a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
index a7e8d4a..11299c9 100644
--- a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
+++ b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
@@ -88,6 +88,18 @@ namespace render {
};
template <>
+ struct SEnumParseMap<NVRenderTextureMinifyingOp::Enum>
+ {
+ static SEnumNameMap *GetMap();
+ };
+
+ template <>
+ struct SEnumParseMap<NVRenderTextureMagnifyingOp::Enum>
+ {
+ static SEnumNameMap *GetMap();
+ };
+
+ template <>
struct SEnumParseMap<TextHorizontalAlignment::Enum>
{
static SEnumNameMap *GetMap();
@@ -460,7 +472,9 @@ namespace render {
HANDLE_QT3DS_RENDER_VEC2_PROPERTY(Image, Position, TransformDirty) \
HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, MappingMode, Dirty) \
HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, HorizontalTilingMode, Dirty) \
- HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, VerticalTilingMode, Dirty)
+ HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, VerticalTilingMode, Dirty) \
+ HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, MinFilter, Dirty) \
+ HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Image, MagFilter, Dirty)
#define ITERATE_QT3DS_RENDER_TEXT_PROPERTIES \
HANDLE_QT3DS_RENDER_PROPERTY(Text, Text, TextDirty) \
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp b/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
index 78760b6..f2ca055 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
+++ b/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
@@ -48,6 +48,8 @@ SImage::SImage()
, m_MappingMode(ImageMappingModes::Normal)
, m_HorizontalTilingMode(NVRenderTextureCoordOp::ClampToEdge)
, m_VerticalTilingMode(NVRenderTextureCoordOp::ClampToEdge)
+ , m_MinFilter(NVRenderTextureMinifyingOp::LinearMipmapLinear)
+ , m_MagFilter(NVRenderTextureMagnifyingOp::Linear)
{
m_Flags.SetActive(true);
m_Flags.SetDirty(true);
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderImage.h b/src/runtimerender/graphobjects/Qt3DSRenderImage.h
index 04d890f..16cd02c 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderImage.h
+++ b/src/runtimerender/graphobjects/Qt3DSRenderImage.h
@@ -78,6 +78,8 @@ namespace render {
ImageMappingModes::Enum m_MappingMode;
NVRenderTextureCoordOp::Enum m_HorizontalTilingMode;
NVRenderTextureCoordOp::Enum m_VerticalTilingMode;
+ NVRenderTextureMinifyingOp::Enum m_MinFilter;
+ NVRenderTextureMagnifyingOp::Enum m_MagFilter;
// Setting any of the above variables means this object is dirty.
// Setting any of the vec2 properties means this object's transform is dirty