diff options
Diffstat (limited to 'src/runtimerender')
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 |