Fix mismatched max size for background.jpg when reloading
This commit is contained in:
parent
b6b565aabb
commit
f2cc51a602
@ -13,6 +13,7 @@ irr::video::ITexture* createFontTexture(const std::string& name,
|
||||
irr::video::ITexture* createTexture(irr::video::IImage* img,
|
||||
const std::string& name);
|
||||
irr::video::IImage* getResizedImage(const std::string& path,
|
||||
const irr::core::dimension2d<irr::u32>& max_size,
|
||||
irr::core::dimension2d<irr::u32>* orig_size = NULL);
|
||||
irr::video::ITexture* createTexture(const std::string& path,
|
||||
std::function<void(irr::video::IImage*)> image_mani = nullptr);
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "ge_main.hpp"
|
||||
#include "ge_texture.hpp"
|
||||
|
||||
#include <IAttributes.h>
|
||||
#include <vector>
|
||||
|
||||
namespace GE
|
||||
@ -15,6 +16,8 @@ GEDX9Texture::GEDX9Texture(const std::string& path,
|
||||
m_device_9(NULL), m_texture_9(NULL), m_texture_size(0),
|
||||
m_disable_reload(false)
|
||||
{
|
||||
m_max_size = getDriver()->getDriverAttributes()
|
||||
.getAttributeAsDimension2d("MAX_TEXTURE_SIZE");
|
||||
getDevice9();
|
||||
reload();
|
||||
} // GEDX9Texture
|
||||
@ -87,7 +90,7 @@ void GEDX9Texture::reload()
|
||||
if (!m_device_9 || m_disable_reload)
|
||||
return;
|
||||
video::IImage* texture_image = getResizedImage(NamedPath.getPtr(),
|
||||
&m_orig_size);
|
||||
m_max_size, &m_orig_size);
|
||||
if (texture_image == NULL)
|
||||
return;
|
||||
m_size = texture_image->getDimension();
|
||||
|
@ -17,7 +17,7 @@ namespace GE
|
||||
class GEDX9Texture : public video::ITexture
|
||||
{
|
||||
private:
|
||||
core::dimension2d<u32> m_size, m_orig_size;
|
||||
core::dimension2d<u32> m_size, m_orig_size, m_max_size;
|
||||
|
||||
std::function<void(video::IImage*)> m_image_mani;
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "ge_main.hpp"
|
||||
#include "ge_texture.hpp"
|
||||
|
||||
#include <IAttributes.h>
|
||||
#include <vector>
|
||||
|
||||
// TODO remove it after vulkan is done
|
||||
@ -20,6 +21,8 @@ GEGLTexture::GEGLTexture(const std::string& path,
|
||||
m_driver_type(GE::getDriver()->getDriverType()),
|
||||
m_disable_reload(false), m_single_channel(false)
|
||||
{
|
||||
m_max_size = getDriver()->getDriverAttributes()
|
||||
.getAttributeAsDimension2d("MAX_TEXTURE_SIZE");
|
||||
reload();
|
||||
} // GEGLTexture
|
||||
|
||||
@ -89,7 +92,7 @@ void GEGLTexture::reload()
|
||||
if (m_disable_reload)
|
||||
return;
|
||||
video::IImage* texture_image = getResizedImage(NamedPath.getPtr(),
|
||||
&m_orig_size);
|
||||
m_max_size, &m_orig_size);
|
||||
if (texture_image == NULL)
|
||||
return;
|
||||
m_size = texture_image->getDimension();
|
||||
@ -146,7 +149,7 @@ void* GEGLTexture::lock(video::E_TEXTURE_LOCK_MODE mode, u32 mipmap_level)
|
||||
|
||||
if (m_driver_type == video::EDT_OGLES2 || !glGetTexImage)
|
||||
{
|
||||
video::IImage* img = getResizedImage(NamedPath.getPtr());
|
||||
video::IImage* img = getResizedImage(NamedPath.getPtr(), m_max_size);
|
||||
if (!img)
|
||||
return NULL;
|
||||
img->setDeleteMemory(false);
|
||||
|
@ -14,7 +14,7 @@ namespace GE
|
||||
class GEGLTexture : public video::ITexture
|
||||
{
|
||||
private:
|
||||
core::dimension2d<u32> m_size, m_orig_size;
|
||||
core::dimension2d<u32> m_size, m_orig_size, m_max_size;
|
||||
|
||||
std::function<void(video::IImage*)> m_image_mani;
|
||||
|
||||
|
@ -5,12 +5,12 @@
|
||||
#include "ge_texture.hpp"
|
||||
|
||||
#include <IVideoDriver.h>
|
||||
#include <IAttributes.h>
|
||||
|
||||
namespace GE
|
||||
{
|
||||
using namespace irr;
|
||||
video::IImage* getResizedImage(const std::string& path,
|
||||
const core::dimension2du& max_size,
|
||||
core::dimension2d<u32>* orig_size)
|
||||
{
|
||||
video::IImage* image = getDriver()->createImageFromFile(path.c_str());
|
||||
@ -24,9 +24,6 @@ video::IImage* getResizedImage(const std::string& path,
|
||||
getDriver()->queryFeature(video::EVDF_TEXTURE_NPOT);
|
||||
|
||||
core::dimension2du tex_size = img_size.getOptimalSize(!has_npot);
|
||||
const core::dimension2du& max_size = getDriver()->getDriverAttributes().
|
||||
getAttributeAsDimension2d("MAX_TEXTURE_SIZE");
|
||||
|
||||
if (tex_size.Width > max_size.Width)
|
||||
tex_size.Width = max_size.Width;
|
||||
if (tex_size.Height > max_size.Height)
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "ge_main.hpp"
|
||||
#include "ge_texture.hpp"
|
||||
|
||||
#include <IAttributes.h>
|
||||
#include <limits>
|
||||
#include <vector>
|
||||
|
||||
@ -19,6 +20,8 @@ GEVulkanTexture::GEVulkanTexture(const std::string& path,
|
||||
m_image_view(VK_NULL_HANDLE), m_texture_size(0),
|
||||
m_disable_reload(false), m_single_channel(false)
|
||||
{
|
||||
m_max_size = getDriver()->getDriverAttributes()
|
||||
.getAttributeAsDimension2d("MAX_TEXTURE_SIZE");
|
||||
reloadInternal();
|
||||
} // GEVulkanTexture
|
||||
|
||||
@ -322,7 +325,7 @@ void GEVulkanTexture::reloadInternal()
|
||||
|
||||
clearVulkanData();
|
||||
video::IImage* texture_image = getResizedImage(NamedPath.getPtr(),
|
||||
&m_orig_size);
|
||||
m_max_size, &m_orig_size);
|
||||
if (texture_image == NULL)
|
||||
return;
|
||||
m_size = texture_image->getDimension();
|
||||
|
@ -14,7 +14,7 @@ namespace GE
|
||||
class GEVulkanTexture : public video::ITexture
|
||||
{
|
||||
private:
|
||||
core::dimension2d<u32> m_size, m_orig_size;
|
||||
core::dimension2d<u32> m_size, m_orig_size, m_max_size;
|
||||
|
||||
std::function<void(video::IImage*)> m_image_mani;
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "graphics/sp/sp_mesh.hpp"
|
||||
#include "graphics/sp/sp_mesh_buffer.hpp"
|
||||
#include "graphics/central_settings.hpp"
|
||||
#include "graphics/irr_driver.hpp"
|
||||
#include "graphics/material.hpp"
|
||||
#include "graphics/material_manager.hpp"
|
||||
#include "graphics/mesh_tools.hpp"
|
||||
@ -171,7 +172,9 @@ scene::IAnimatedMesh* SPMeshLoader::createMesh(io::IReadFile* f)
|
||||
{
|
||||
image_mani = [mask_full_path](video::IImage* img)->void
|
||||
{
|
||||
video::IImage* converted_mask = GE::getResizedImage(mask_full_path);
|
||||
video::IImage* converted_mask = GE::getResizedImage(mask_full_path,
|
||||
irr_driver->getVideoDriver()->getDriverAttributes()
|
||||
.getAttributeAsDimension2d("MAX_TEXTURE_SIZE"));
|
||||
if (converted_mask == NULL)
|
||||
{
|
||||
Log::warn("SPMeshLoader", "Applying mask failed for '%s'!",
|
||||
|
@ -2965,6 +2965,7 @@ video::IImage* Track::getSkyTexture(std::string path) const
|
||||
path = file_manager->getFileSystem()->getAbsolutePath(relative_path)
|
||||
.c_str();
|
||||
}
|
||||
return GE::getResizedImage(path);
|
||||
return GE::getResizedImage(path, irr_driver->getVideoDriver()
|
||||
->getDriverAttributes().getAttributeAsDimension2d("MAX_TEXTURE_SIZE"));
|
||||
#endif
|
||||
} // getSkyTexture
|
||||
|
Loading…
x
Reference in New Issue
Block a user