Add IImage to STKTexture constructor for areamap texture

This commit is contained in:
Benau 2017-01-09 15:04:34 +08:00
parent c4b4ea006e
commit 848dd05f11
5 changed files with 26 additions and 7 deletions

View File

@ -31,6 +31,8 @@
#include "graphics/shaders.hpp"
#include "graphics/shared_gpu_objects.hpp"
#include "graphics/stk_mesh_scene_node.hpp"
#include "graphics/stk_texture.hpp"
#include "graphics/stk_tex_manager.hpp"
#include "graphics/weather.hpp"
#include "io/file_manager.hpp"
#include "karts/abstract_kart.hpp"
@ -769,18 +771,20 @@ PostProcessing::PostProcessing(IVideoDriver* video_driver)
{
m_material.TextureLayer[i].TextureWrapU =
m_material.TextureLayer[i].TextureWrapV = ETC_CLAMP_TO_EDGE;
}
}
// Load the MLAA area map
io::IReadFile *areamap = irr_driver->getDevice()->getFileSystem()->
createMemoryReadFile((void *) AreaMap33, sizeof(AreaMap33),
"AreaMap33", false);
if (!areamap)
video::IImage* img = irr_driver->getVideoDriver()->createImageFromFile(areamap);
m_areamap = new STKTexture(img, "AreaMap33");
if (m_areamap->getOpenGLTextureName() == 0)
{
Log::fatal("postprocessing", "Failed to load the areamap");
return;
}
m_areamap = irr_driver->getVideoDriver()->getTexture(areamap);
STKTexManager::getInstance()->addTexture(m_areamap);
areamap->drop();
} // PostProcessing

View File

@ -27,6 +27,7 @@
class FrameBuffer;
class RTT;
class STKTexture;
namespace irr
{
@ -63,7 +64,7 @@ private:
* the vertex position, normal, and texture coordinate. */
std::vector<Quad> m_vertices;
video::ITexture *m_areamap;
STKTexture* m_areamap;
void setMotionBlurCenterY(const u32 num, const float y);

View File

@ -122,6 +122,7 @@ void STKTexManager::removeTexture(STKTexture* texture, bool remove_all)
}
}
#ifdef DEBUG
if (!remove_all) return;
for (const std::string& s : undeleted_texture)
{
Log::error("STKTexManager", "%s undeleted!", s.c_str());

View File

@ -70,6 +70,16 @@ STKTexture::STKTexture(uint8_t* data, const std::string& name, size_t size,
reload(false/*no_upload*/, data, single_channel);
} // STKTexture
// ----------------------------------------------------------------------------
STKTexture::STKTexture(video::IImage* img, const std::string& name)
: video::ITexture(name.c_str()), m_texture_handle(0), m_srgb(false),
m_premul_alpha(false), m_mesh_texture(false), m_material(NULL),
m_texture_name(0), m_texture_size(0), m_texture_image(NULL)
{
reload(false/*no_upload*/, NULL/*preload_data*/, false/*single_channel*/,
img);
} // STKTexture
// ----------------------------------------------------------------------------
STKTexture::~STKTexture()
{
@ -86,7 +96,7 @@ STKTexture::~STKTexture()
// ----------------------------------------------------------------------------
void STKTexture::reload(bool no_upload, uint8_t* preload_data,
bool single_channel)
bool single_channel, video::IImage* preload_img)
{
if (ProfileWorld::isNoGraphics())
{
@ -143,7 +153,7 @@ void STKTexture::reload(bool no_upload, uint8_t* preload_data,
uint8_t* data = preload_data;
if (data == NULL)
{
orig_img =
orig_img = preload_img ? preload_img :
irr_driver->getVideoDriver()->createImageFromFile(NamedPath);
if (orig_img == NULL)
{

View File

@ -66,6 +66,8 @@ public:
STKTexture(uint8_t* data, const std::string& name, size_t size,
bool single_channel = false);
// ------------------------------------------------------------------------
STKTexture(video::IImage* img, const std::string& name);
// ------------------------------------------------------------------------
virtual ~STKTexture();
// ------------------------------------------------------------------------
virtual void* lock(video::E_TEXTURE_LOCK_MODE mode =
@ -117,7 +119,8 @@ public:
unsigned int getTextureSize() const { return m_texture_size; }
// ------------------------------------------------------------------------
void reload(bool no_upload = false, uint8_t* preload_data = NULL,
bool single_channel = false);
bool single_channel = false,
video::IImage* preload_img = NULL);
// ------------------------------------------------------------------------
video::IImage* getTextureImage() { return m_texture_image; }