From 827a483e8551501c035768cb3f9d654aa8a36f53 Mon Sep 17 00:00:00 2001 From: Benau Date: Fri, 6 Jan 2017 15:04:15 +0800 Subject: [PATCH] Allow legacy pipeline to use new texture format --- .../source/Irrlicht/COGLES2Driver.cpp | 2 +- .../source/Irrlicht/COpenGLDriver.cpp | 3 +- src/graphics/draw_tools.hpp | 7 +- src/graphics/geometry_passes.cpp | 9 +- src/graphics/irr_driver.cpp | 170 +----------------- src/graphics/irr_driver.hpp | 2 - src/graphics/material.cpp | 39 ++-- src/graphics/post_processing.cpp | 6 +- src/graphics/shader_based_renderer.cpp | 27 --- src/graphics/shader_based_renderer.hpp | 1 - src/graphics/show_curve.cpp | 8 +- src/graphics/slip_stream.cpp | 4 +- src/graphics/stars.cpp | 19 +- src/graphics/stk_mesh.cpp | 5 +- src/graphics/stk_mesh_loader.cpp | 20 +-- src/graphics/stk_tex_manager.cpp | 9 +- src/graphics/stk_tex_manager.hpp | 26 +-- src/graphics/stk_text_billboard.cpp | 6 +- src/graphics/stk_texture.cpp | 130 ++++++++------ src/graphics/stk_texture.hpp | 6 +- src/graphics/texture_manager.cpp | 31 +--- src/graphics/texture_manager.hpp | 1 - src/items/rubber_band.cpp | 8 +- src/karts/controller/skidding_ai.cpp | 6 +- src/karts/controller/test_ai.cpp | 6 +- src/karts/kart_properties.cpp | 4 +- src/modes/soccer_world.cpp | 33 +--- src/modes/three_strikes_battle.cpp | 18 +- src/tracks/check_line.cpp | 10 +- src/tracks/graph.cpp | 8 +- src/tracks/track.cpp | 7 +- src/tracks/track_object_presentation.cpp | 17 +- 32 files changed, 187 insertions(+), 461 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/COGLES2Driver.cpp b/lib/irrlicht/source/Irrlicht/COGLES2Driver.cpp index 501152864..e0d34c365 100644 --- a/lib/irrlicht/source/Irrlicht/COGLES2Driver.cpp +++ b/lib/irrlicht/source/Irrlicht/COGLES2Driver.cpp @@ -3120,7 +3120,7 @@ namespace video setActiveTexture(GL_TEXTURE0 + stage); if(Driver->CurrentTexture[stage]) - glBindTexture(GL_TEXTURE_2D, static_cast(Driver->CurrentTexture[stage])->getOpenGLTextureName()); + glBindTexture(GL_TEXTURE_2D, Driver->CurrentTexture[stage]->getOpenGLTextureName()); Texture[stage] = Driver->CurrentTexture[stage]; } diff --git a/lib/irrlicht/source/Irrlicht/COpenGLDriver.cpp b/lib/irrlicht/source/Irrlicht/COpenGLDriver.cpp index 3bf8a5894..8c392cee4 100644 --- a/lib/irrlicht/source/Irrlicht/COpenGLDriver.cpp +++ b/lib/irrlicht/source/Irrlicht/COpenGLDriver.cpp @@ -2565,8 +2565,7 @@ bool COpenGLDriver::setActiveTexture(u32 stage, const video::ITexture* texture) if (!useCoreContext) glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, - static_cast(texture)->getOpenGLTextureName()); + glBindTexture(GL_TEXTURE_2D, texture->getOpenGLTextureName()); } return true; } diff --git a/src/graphics/draw_tools.hpp b/src/graphics/draw_tools.hpp index e44a81336..42daf3352 100644 --- a/src/graphics/draw_tools.hpp +++ b/src/graphics/draw_tools.hpp @@ -21,7 +21,6 @@ #include "graphics/shader.hpp" #include "graphics/irr_driver.hpp" #include "graphics/stk_mesh.hpp" -#include "graphics/texture_manager.hpp" // ---------------------------------------------------------------------------- /** Variadic template to draw a mesh (using OpenGL 3.2 function) @@ -87,10 +86,8 @@ struct TexExpanderImpl Args... args) { size_t idx = STK::tuple_get(tex_swizzle); - TexExpanderImpl::template expandTex( mesh, - tex_swizzle, - args..., - getTextureGLuint(mesh.textures[idx])); + TexExpanderImpl::template expandTex(mesh, tex_swizzle, + args..., mesh.textures[idx]->getOpenGLTextureName()); } // ExpandTex }; // TexExpanderImpl diff --git a/src/graphics/geometry_passes.cpp b/src/graphics/geometry_passes.cpp index 2859cf7f0..1dcd68470 100644 --- a/src/graphics/geometry_passes.cpp +++ b/src/graphics/geometry_passes.cpp @@ -222,7 +222,10 @@ void renderTransparenPass(const std::vector &TexUnits, if (CVS->isAZDOEnabled()) Shader::getInstance()->setTextureHandles(mesh.TextureHandles[0]); else - Shader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0])); + { + Shader::getInstance()->setTextureUnits(mesh.textures[0] + ->getOpenGLTextureName()); + } CustomUnrollArgs::template drawMesh(meshes->at(i)); } } // renderTransparenPass @@ -370,10 +373,10 @@ void AbstractGeometryPasses::renderTransparent(const DrawCalls& draw_calls, size_t count = mesh.IndexCount; // Render the effect DisplaceShader::getInstance()->setTextureUnits( - getTextureGLuint(m_displace_tex), + m_displace_tex->getOpenGLTextureName(), colors_framebuffer.getRTT()[0], tmp_framebuffer.getRTT()[0], - getTextureGLuint(mesh.textures[0])); + mesh.textures[0]->getOpenGLTextureName()); DisplaceShader::getInstance()->use(); DisplaceShader::getInstance()->setUniforms(AbsoluteTransformation, core::vector2df(cb->getDirX(), cb->getDirY()), diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 755e11be4..7d65b0509 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -753,11 +753,11 @@ void IrrDriver::createSunInterposer() if (!mb) continue; mb->getMaterial().setTexture(0, - getUnicolorTexture(video::SColor(255, 255, 255, 255))); + STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 255, 255, 255))); mb->getMaterial().setTexture(1, - getUnicolorTexture(video::SColor(0, 0, 0, 0))); + STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); mb->getMaterial().setTexture(2, - getUnicolorTexture(video::SColor(0, 0, 0, 0))); + STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); } m_sun_interposer = new STKMeshSceneNode(sphere, m_scene_manager->getRootSceneNode(), @@ -1204,10 +1204,10 @@ scene::IMeshSceneNode *IrrDriver::addSphere(float radius, m.BackfaceCulling = false; m.MaterialType = video::EMT_SOLID; #ifndef SERVER_ONLY - //m.setTexture(0, getUnicolorTexture(video::SColor(128, 255, 105, 180))); - m.setTexture(0, getUnicolorTexture(color)); - m.setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); - m.setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + //m.setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(128, 255, 105, 180))); + m.setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(color)); + m.setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m.setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); if (CVS->isGLSL()) { @@ -1677,91 +1677,7 @@ video::ITexture *IrrDriver::getTexture(const std::string &filename, bool is_prediv, bool complain_if_not_found) { -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - return STKTexManager::getInstance()->getTexture(filename); - } -#endif // !SERVER_ONLY - video::ITexture* out; - if(!is_premul && !is_prediv) - { - if (!complain_if_not_found) m_device->getLogger()->setLogLevel(ELL_NONE); - out = m_video_driver->getTexture(filename.c_str()); - if (!complain_if_not_found) m_device->getLogger()->setLogLevel(ELL_WARNING); - } - else - { - // FIXME: can't we just do this externally, and just use the - // modified textures?? - video::IImage* img = - m_video_driver->createImageFromFile(filename.c_str()); - // PNGs are non premul, but some are used for premul tasks, so convert - // http://home.comcast.net/~tom_forsyth/blog.wiki.html#[[Premultiplied%20alpha]] - // FIXME check param, not name - if(img && is_premul && - StringUtils::hasSuffix(filename.c_str(), ".png") && - (img->getColorFormat() == video::ECF_A8R8G8B8) && - img->lock()) - { - core::dimension2d dim = img->getDimension(); - for(unsigned int x = 0; x < dim.Width; x++) - { - for(unsigned int y = 0; y < dim.Height; y++) - { - video::SColor col = img->getPixel(x, y); - unsigned int alpha = col.getAlpha(); - unsigned int red = alpha * col.getRed() / 255; - unsigned int blue = alpha * col.getBlue() / 255; - unsigned int green = alpha * col.getGreen() / 255; - col.set(alpha, red, green, blue); - img->setPixel(x, y, col, false); - } // for y - } // for x - img->unlock(); - } // if png and ColorFOrmat and lock - // Other formats can be premul, but the tasks can be non premul - // So divide to get the separate RGBA (only possible if alpha!=0) - else if(img && is_prediv && - (img->getColorFormat() == video::ECF_A8R8G8B8) && - img->lock()) - { - core::dimension2d dim = img->getDimension(); - for(unsigned int x = 0; x < dim.Width; x++) - { - for(unsigned int y = 0; y < dim.Height; y++) - { - video::SColor col = img->getPixel(x, y); - unsigned int alpha = col.getAlpha(); - // Avoid divide by zero - if (alpha) { - unsigned int red = 255 * col.getRed() / alpha ; - unsigned int blue = 255 * col.getBlue() / alpha; - unsigned int green = 255 * col.getGreen() / alpha; - col.set(alpha, red, green, blue); - img->setPixel(x, y, col, false); - } - } // for y - } // for x - img->unlock(); - } // if premul && color format && lock - out = m_video_driver->addTexture(filename.c_str(), img, NULL); - } // if is_premul or is_prediv - - - if (complain_if_not_found && out == NULL) - { - - if(m_texture_error_message.size()>0) - { - Log::error("irr_driver", m_texture_error_message.c_str()); - } - Log::error("irr_driver", "Texture '%s' not found.", filename.c_str()); - } - - m_texturesFileName[out] = filename; - - return out; + return STKTexManager::getInstance()->getTexture(filename); } // getTexture // ---------------------------------------------------------------------------- @@ -1835,76 +1751,6 @@ void IrrDriver::dropAllTextures(const scene::IMesh *mesh) } // for i size = texture->getSize(); - video::IImage* img = - m_video_driver->createImage(texture, core::position2d(0,0), size); - - video::IImage* mask = - m_video_driver->createImageFromFile(mask_path.c_str()); - - if (img == NULL || mask == NULL) - { - Log::warn("irr_driver", "Applying mask failed for '%s'!", - texture->getName().getPtr()); - return; - } - - if (mask->getDimension() != size) - { - video::IImage* mask_scaled = - m_video_driver->createImage(texture->getColorFormat(), size); - mask->copyToScaling(mask_scaled); - mask->drop(); - mask = mask_scaled; - } - - void* dest = img->lock(); - if (dest != NULL && mask->lock()) - { - core::dimension2d dim = img->getDimension(); - for (unsigned int x = 0; x < dim.Width; x++) - { - for (unsigned int y = 0; y < dim.Height; y++) - { - video::SColor col = img->getPixel(x, y); - video::SColor alpha = mask->getPixel(x, y); - col.setAlpha( alpha.getRed() ); - img->setPixel(x, y, col, false); - } // for y - } // for x - - if (!CVS->isGLSL()) - { - // For new graphical pipeline, it will be done in texture manager - // compressTexture - glBindTexture(GL_TEXTURE_2D, getTextureGLuint(texture)); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, dim.Width, dim.Height, - GL_BGRA, GL_UNSIGNED_BYTE, dest); - glGenerateMipmap(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, 0); - } - mask->unlock(); - img->unlock(); -#if defined(USE_GLES2) - static_cast(texture)->setImage(img); -#else - static_cast(texture)->setImage(img); -#endif - mask->drop(); - return; - } - Log::warn("irr_driver", "Applying mask failed for '%s'!", - texture->getName().getPtr()); - img->drop(); - mask->drop(); -#endif -} // applyMask - // ---------------------------------------------------------------------------- void IrrDriver::onLoadWorld() { diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index e0f713895..9f8d54337 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -220,8 +220,6 @@ public: void setAllMaterialFlags(scene::IMesh *mesh) const; scene::IAnimatedMesh *getAnimatedMesh(const std::string &name); scene::IMesh *getMesh(const std::string &name); - void applyMask(video::ITexture* texture, - const std::string& mask_path); void displayFPS(); bool OnEvent(const irr::SEvent &event); void setAmbientLight(const video::SColorf &light, diff --git a/src/graphics/material.cpp b/src/graphics/material.cpp index 233b28e87..038248059 100644 --- a/src/graphics/material.cpp +++ b/src/graphics/material.cpp @@ -33,9 +33,7 @@ #include "graphics/irr_driver.hpp" #include "graphics/particle_kind_manager.hpp" #include "graphics/shaders.hpp" -#include "graphics/stk_texture.hpp" #include "graphics/stk_tex_manager.hpp" -#include "graphics/texture_manager.hpp" #include "io/file_manager.hpp" #include "race/race_manager.hpp" #include "io/xml_node.hpp" @@ -508,20 +506,9 @@ void Material::install(bool srgb, bool premul_alpha) } else { -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - m_texture = STKTexManager::getInstance()->getTexture - (m_full_path, srgb, premul_alpha, false/*set_material*/, - srgb/*mesh_tex*/); - } - else -#endif - { - m_texture = irr_driver->getTexture(m_full_path, - false, //isPreMul(), false, //isPreDiv(), - m_complain_if_not_found); - } + m_texture = STKTexManager::getInstance()->getTexture + (m_full_path, srgb, premul_alpha, false/*set_material*/, + srgb/*mesh_tex*/); } if (m_texture == NULL) return; @@ -529,12 +516,6 @@ void Material::install(bool srgb, bool premul_alpha) // now set the name to the basename, so that all tests work as expected m_texname = StringUtils::getBasename(m_texname); -#ifndef SERVER_ONLY - if (!CVS->isGLSL() && m_mask.size() > 0) - { - irr_driver->applyMask(m_texture, m_mask); - } -#endif m_texture->grab(); } // install @@ -772,13 +753,14 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m } else { - glossytex = getUnicolorTexture(SColor(0, 0, 0, 0)); + glossytex = stm->STKTexManager::getInstance()->getUnicolorTexture(SColor(0, 0, 0, 0)); } if (!m->getTexture(2)) { // Only set colorization mask if not set - ITexture *colorization_mask_tex = getUnicolorTexture(SColor(0, 0, 0, 0)); + ITexture *colorization_mask_tex = + stm->STKTexManager::getInstance()->getUnicolorTexture(SColor(0, 0, 0, 0)); if (m_colorization_mask.size() > 0) { colorization_mask_tex = stm->getTexture(m_colorization_mask, @@ -897,7 +879,10 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m } if (!m->getTexture(0)) - m->setTexture(0, getUnicolorTexture(SColor(255, 255, 255, 255))); + { + m->setTexture(0, + stm->STKTexManager::getInstance()->getUnicolorTexture(SColor(255, 255, 255, 255))); + } if (m_normal_map_tex.size() > 0) { @@ -908,7 +893,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m true/*mesh_tex*/); } else - tex = getUnicolorTexture(SColor(0, 0, 0, 0)); + tex = stm->STKTexManager::getInstance()->getUnicolorTexture(SColor(0, 0, 0, 0)); m->setTexture(3, tex); // Material and shaders @@ -924,7 +909,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m if (m->getTexture(1) != glossytex) m->setTexture(3, m->getTexture(1)); if (!m->getTexture(3)) - m->setTexture(3, getUnicolorTexture(SColor(255, 255, 255, 255))); + m->setTexture(3, stm->STKTexManager::getInstance()->getUnicolorTexture(SColor(255, 255, 255, 255))); } m->setTexture(1, glossytex); } diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 3ba0be240..5c70c0639 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -31,7 +31,6 @@ #include "graphics/shaders.hpp" #include "graphics/shared_gpu_objects.hpp" #include "graphics/stk_mesh_scene_node.hpp" -#include "graphics/texture_manager.hpp" #include "graphics/weather.hpp" #include "io/file_manager.hpp" #include "karts/abstract_kart.hpp" @@ -380,7 +379,7 @@ public: setTextureUnits(render_target_bloom_128, render_target_bloom_256, render_target_bloom_512, - getTextureGLuint(lensDustTex)); + lensDustTex->getOpenGLTextureName()); drawFullScreenEffect(); } // render }; // BloomBlendShader @@ -705,8 +704,7 @@ public: GLuint rtt_mlaa_tmp) { use(); - setTextureUnits(rtt_mlaa_tmp, - getTextureGLuint(area_map)); + setTextureUnits(rtt_mlaa_tmp, area_map->getOpenGLTextureName()); drawFullScreenEffect(pixel_size); } // render diff --git a/src/graphics/shader_based_renderer.cpp b/src/graphics/shader_based_renderer.cpp index 4adba170b..287717f5b 100644 --- a/src/graphics/shader_based_renderer.cpp +++ b/src/graphics/shader_based_renderer.cpp @@ -35,7 +35,6 @@ #include "graphics/skybox.hpp" #include "graphics/stk_mesh_scene_node.hpp" #include "graphics/spherical_harmonics.hpp" -#include "graphics/texture_manager.hpp" #include "items/item_manager.hpp" #include "items/powerup_manager.hpp" #include "modes/world.hpp" @@ -67,30 +66,6 @@ void ShaderBasedRenderer::setRTT(RTT* rtts) } } //setRTT -// ---------------------------------------------------------------------------- -void ShaderBasedRenderer::compressPowerUpTextures() -{ - for (unsigned i = 0; i < PowerupManager::POWERUP_MAX; i++) - { - scene::IMesh *mesh = powerup_manager->m_all_meshes[i]; - if (!mesh) - continue; - for (unsigned j = 0; j < mesh->getMeshBufferCount(); j++) - { - scene::IMeshBuffer *mb = mesh->getMeshBuffer(j); - if (!mb) - continue; - for (unsigned k = 0; k < 4; k++) - { - video::ITexture *tex = mb->getMaterial().getTexture(k); - if (!tex) - continue; - compressTexture(tex, true); - } - } - } -} //compressPowerUpTextures - // ---------------------------------------------------------------------------- void ShaderBasedRenderer::setOverrideMaterial() { @@ -696,8 +671,6 @@ void ShaderBasedRenderer::onLoadWorld() size_t height = viewport.LowerRightCorner.Y - viewport.UpperLeftCorner.Y; RTT* rtts = new RTT(width, height); setRTT(rtts); - - compressPowerUpTextures(); } // ---------------------------------------------------------------------------- diff --git a/src/graphics/shader_based_renderer.hpp b/src/graphics/shader_based_renderer.hpp index 6f91e67d5..d5eee08a2 100644 --- a/src/graphics/shader_based_renderer.hpp +++ b/src/graphics/shader_based_renderer.hpp @@ -54,7 +54,6 @@ private: std::vector m_glowing; size_t m_nb_static_glowing; - void compressPowerUpTextures(); void setOverrideMaterial(); void addItemsInGlowingList(); diff --git a/src/graphics/show_curve.cpp b/src/graphics/show_curve.cpp index b2abf2d3b..eae2aa851 100644 --- a/src/graphics/show_curve.cpp +++ b/src/graphics/show_curve.cpp @@ -21,7 +21,7 @@ #include "graphics/show_curve.hpp" #include "graphics/irr_driver.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "utils/vec3.hpp" #include @@ -67,9 +67,9 @@ void ShowCurve::addEmptyMesh() m_mesh = irr_driver->createQuadMesh(&m, /*create_one_quad*/ false); m_buffer = m_mesh->getMeshBuffer(0); - m_buffer->getMaterial().setTexture(0, getUnicolorTexture(video::SColor(128, 255, 105, 180))); - m_buffer->getMaterial().setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); - m_buffer->getMaterial().setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m_buffer->getMaterial().setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(128, 255, 105, 180))); + m_buffer->getMaterial().setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m_buffer->getMaterial().setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); assert(m_buffer->getVertexType()==video::EVT_STANDARD); } // addEmptyMesh diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index 5ced96ad9..4a306cbca 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -23,7 +23,7 @@ #include "graphics/material.hpp" #include "graphics/material_manager.hpp" #include "graphics/stk_mesh_scene_node.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "io/file_manager.hpp" #include "karts/abstract_kart.hpp" #include "karts/controller/controller.hpp" @@ -102,7 +102,7 @@ SlipStream::SlipStream(AbstractKart* kart) : MovingTexture(0, 0), m_kart(kart) video::SMaterial &mat = buffer->getMaterial(); // Meshes need a texture, otherwise stk crashes. #ifndef SERVER_ONLY - video::ITexture *red_texture = getUnicolorTexture(red); + video::ITexture *red_texture = STKTexManager::getInstance()->getUnicolorTexture(red); mat.setTexture(0, red_texture); #endif diff --git a/src/graphics/stars.cpp b/src/graphics/stars.cpp index 6136f06ad..d1d54a1d2 100644 --- a/src/graphics/stars.cpp +++ b/src/graphics/stars.cpp @@ -18,11 +18,9 @@ #include "graphics/stars.hpp" -#include "graphics/central_settings.hpp" #include "graphics/irr_driver.hpp" #include "graphics/material.hpp" #include "graphics/material_manager.hpp" -#include "graphics/stk_texture.hpp" #include "graphics/stk_tex_manager.hpp" #include "karts/abstract_kart.hpp" #include "karts/kart_model.hpp" @@ -42,20 +40,9 @@ Stars::Stars(AbstractKart *kart) m_parent_kart_node = kart->getNode(); m_enabled = false; - video::ITexture* texture = NULL; -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - texture = STKTexManager::getInstance()->getTexture - ("starparticle.png", true/*srgb*/, true/*premul_alpha*/, - false/*set_material*/, true/*mesh_tex*/); - } - else -#endif - { - texture = - irr_driver->getTexture("starparticle.png"); - } + video::ITexture* texture = STKTexManager::getInstance()->getTexture + ("starparticle.png", true/*srgb*/, true/*premul_alpha*/, + false/*set_material*/, true/*mesh_tex*/); Material* star_material = material_manager->getMaterial("starparticle.png"); diff --git a/src/graphics/stk_mesh.cpp b/src/graphics/stk_mesh.cpp index 127c2d9af..fcde93d69 100644 --- a/src/graphics/stk_mesh.cpp +++ b/src/graphics/stk_mesh.cpp @@ -25,6 +25,7 @@ #include "graphics/material_manager.hpp" #include "graphics/materials.hpp" #include "graphics/shaders.hpp" +#include "graphics/stk_tex_manager.hpp" #include "graphics/texture_manager.hpp" #include @@ -389,7 +390,7 @@ static void setTexture(GLMesh &mesh, unsigned i, bool is_srgb, mat_name.c_str()); // use unicolor texture to replace missing texture mesh.textures[i] = - getUnicolorTexture(video::SColor(255, 127, 127, 127)); + STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 127, 127, 127)); } compressTexture(mesh.textures[i], is_srgb); #if !defined(USE_GLES2) @@ -479,7 +480,7 @@ void initTexturesTransparent(GLMesh &mesh) { if (!mesh.textures[0]) { - mesh.textures[0] = getUnicolorTexture(video::SColor(255, 255, 255, 255)); + mesh.textures[0] = STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 255, 255, 255)); } compressTexture(mesh.textures[0], true); #if !defined(USE_GLES2) diff --git a/src/graphics/stk_mesh_loader.cpp b/src/graphics/stk_mesh_loader.cpp index fa6a3c54b..c1a7fc892 100644 --- a/src/graphics/stk_mesh_loader.cpp +++ b/src/graphics/stk_mesh_loader.cpp @@ -16,8 +16,6 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "graphics/stk_mesh_loader.hpp" -#include "graphics/central_settings.hpp" -#include "graphics/stk_texture.hpp" #include "graphics/stk_tex_manager.hpp" #include @@ -1042,7 +1040,6 @@ void STKMeshLoader::loadTextures(SB3dMaterial& material) const SB3dTexture* B3dTexture = material.Textures[i]; if (B3dTexture && B3dTexture->TextureName.size() && !material.Material.getTexture(i)) { - video::ITexture* tex = NULL; if (!SceneManager->getParameters()->getAttributeAsBool(scene::B3D_LOADER_IGNORE_MIPMAP_FLAG)) SceneManager->getVideoDriver()->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, (B3dTexture->Flags & 0x8) ? true:false); io::IFileSystem* fs = SceneManager->getFileSystem(); @@ -1060,18 +1057,11 @@ void STKMeshLoader::loadTextures(SB3dMaterial& material) const else full_path = fs->getFileBasename(B3dTexture->TextureName); -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - tex = STKTexManager::getInstance()->getTexture(full_path.c_str(), - i == 0 ? true : false/*is_srgb*/, false/*premul_alpha*/, - true/*set_material*/); - } - else -#endif // !SERVER_ONLY - { - tex = SceneManager->getVideoDriver()->getTexture(full_path); - } + video::ITexture* tex = + STKTexManager::getInstance()->getTexture(full_path.c_str(), + i == 0 ? true : false/*is_srgb*/, false/*premul_alpha*/, + true/*set_material*/); + material.Material.setTexture(i, tex); if (material.Textures[i]->Flags & 0x10) // Clamp U material.Material.TextureLayer[i].TextureWrapU=video::ETC_CLAMP; diff --git a/src/graphics/stk_tex_manager.cpp b/src/graphics/stk_tex_manager.cpp index ea160c77c..8ca0dfe4c 100644 --- a/src/graphics/stk_tex_manager.cpp +++ b/src/graphics/stk_tex_manager.cpp @@ -69,9 +69,10 @@ STKTexture* STKTexManager::findTexturePathless(const std::string& filename) } // findTexturePathless // ---------------------------------------------------------------------------- -STKTexture* STKTexManager::getTexture(const std::string& path, bool srgb, - bool premul_alpha, bool set_material, - bool mesh_tex, bool no_upload) +video::ITexture* STKTexManager::getTexture(const std::string& path, bool srgb, + bool premul_alpha, + bool set_material, bool mesh_tex, + bool no_upload) { auto ret = m_all_textures.find(path); if (!no_upload && ret != m_all_textures.end()) @@ -134,7 +135,7 @@ int STKTexManager::dumpTextureUsage() } // dumpAllTexture // ---------------------------------------------------------------------------- -STKTexture* STKTexManager::getUnicolorTexture(const irr::video::SColor &c) +video::ITexture* STKTexManager::getUnicolorTexture(const irr::video::SColor &c) { std::string name = StringUtils::toString(c.color) + "unic"; auto ret = m_all_textures.find(name); diff --git a/src/graphics/stk_tex_manager.hpp b/src/graphics/stk_tex_manager.hpp index 1bb337632..f68913ebd 100644 --- a/src/graphics/stk_tex_manager.hpp +++ b/src/graphics/stk_tex_manager.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2016 SuperTuxKart-Team +// Copyright (C) 2017 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -29,7 +29,7 @@ class STKTexture; namespace irr { - namespace video { class SColor; } + namespace video { class ITexture; class SColor; } } class STKTexManager : public Singleton, NoCopy @@ -37,23 +37,25 @@ class STKTexManager : public Singleton, NoCopy private: std::unordered_map m_all_textures; + // ------------------------------------------------------------------------ + STKTexture* findTexturePathless(const std::string& filename); + // ------------------------------------------------------------------------ + STKTexture* findTextureInFileSystem(const std::string& filename, + std::string* full_path); public: // ------------------------------------------------------------------------ STKTexManager() {} // ------------------------------------------------------------------------ ~STKTexManager(); // ------------------------------------------------------------------------ - STKTexture* findTexturePathless(const std::string& filename); + irr::video::ITexture* getTexture(const std::string& path, + bool srgb = false, + bool premul_alpha = false, + bool set_material = false, + bool mesh_tex = false, + bool no_upload = false); // ------------------------------------------------------------------------ - STKTexture* findTextureInFileSystem(const std::string& filename, - std::string* full_path); - // ------------------------------------------------------------------------ - STKTexture* getTexture(const std::string& path, bool srgb = false, - bool premul_alpha = false, - bool set_material = false, - bool mesh_tex = false, bool no_upload = false); - // ------------------------------------------------------------------------ - STKTexture* getUnicolorTexture(const irr::video::SColor &c); + irr::video::ITexture* getUnicolorTexture(const irr::video::SColor &c); // ------------------------------------------------------------------------ void addTexture(STKTexture* t); // ------------------------------------------------------------------------ diff --git a/src/graphics/stk_text_billboard.cpp b/src/graphics/stk_text_billboard.cpp index efaa002cc..138f824ba 100644 --- a/src/graphics/stk_text_billboard.cpp +++ b/src/graphics/stk_text_billboard.cpp @@ -22,7 +22,7 @@ #include "graphics/irr_driver.hpp" #include "graphics/stk_billboard.hpp" #include "graphics/stk_mesh_scene_node.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include #include #include @@ -123,8 +123,8 @@ scene::IMesh* STKTextBillboard::getTextMesh(core::stringw text, FontWithFace* fo { buffer = new scene::SMeshBuffer(); buffer->getMaterial().setTexture(0, m_chars[i].m_texture); - buffer->getMaterial().setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); - buffer->getMaterial().setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + buffer->getMaterial().setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); + buffer->getMaterial().setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); buffer->getMaterial().MaterialType = Shaders::getShader(ES_OBJECT_UNLIT); buffers[m_chars[i].m_texture] = buffer; } diff --git a/src/graphics/stk_texture.cpp b/src/graphics/stk_texture.cpp index a2a754c63..0b72665d2 100644 --- a/src/graphics/stk_texture.cpp +++ b/src/graphics/stk_texture.cpp @@ -39,6 +39,10 @@ STKTexture::STKTexture(const std::string& path, bool srgb, bool premul_alpha, m_material = material_manager->getMaterialFor(this); m_mesh_texture = true; } +#ifndef SERVER_ONLY + if (!CVS->isGLSL()) + m_srgb = false; +#endif reload(no_upload); } // STKTexture @@ -113,15 +117,19 @@ void STKTexture::reload(bool no_upload, video::IImage* pre_loaded_tex) video::IImage* new_texture = NULL; if (pre_loaded_tex == NULL) { - new_texture = convertImage(&orig_img); + new_texture = resizeImage(orig_img, &m_orig_size, &m_size); applyMask(new_texture); } else + { new_texture = pre_loaded_tex; + m_orig_size = pre_loaded_tex->getDimension(); + m_size = pre_loaded_tex->getDimension(); + } unsigned char* data = (unsigned char*)new_texture->lock(); - const unsigned int w = new_texture->getDimension().Width; - const unsigned int h = new_texture->getDimension().Height; + const unsigned int w = m_size.Width; + const unsigned int h = m_size.Height; unsigned int format = GL_BGRA; unsigned int internal_format = GL_RGBA; @@ -172,30 +180,24 @@ void STKTexture::reload(bool no_upload, video::IImage* pre_loaded_tex) glBindTexture(GL_TEXTURE_2D, m_texture_name); if (!reload) { - glTexImage2D(GL_TEXTURE_2D, 0, internal_format, - new_texture->getDimension().Width, - new_texture->getDimension().Height, 0, format, + glTexImage2D(GL_TEXTURE_2D, 0, internal_format, w, h, 0, format, GL_UNSIGNED_BYTE, data); } else { - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, - new_texture->getDimension().Width, - new_texture->getDimension().Height, format, GL_UNSIGNED_BYTE, - data); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, format, + GL_UNSIGNED_BYTE, data); } new_texture->unlock(); - glGenerateMipmap(GL_TEXTURE_2D); + if (hasMipMaps()) + glGenerateMipmap(GL_TEXTURE_2D); } - m_size = new_texture->getDimension(); - m_orig_size = orig_img->getDimension(); - orig_img->drop(); - m_texture_size = m_size.Width * m_size.Height * 4 /*BRGA*/; - if (!no_upload && pre_loaded_tex == NULL) - new_texture->drop(); - else if (pre_loaded_tex == NULL) + m_texture_size = w * h * 4 /*BRGA*/; + if (no_upload) m_texture_image = new_texture; + else + new_texture->drop(); if (!compressed_texture.empty()) saveCompressedTexture(compressed_texture); @@ -207,66 +209,70 @@ void STKTexture::reload(bool no_upload, video::IImage* pre_loaded_tex) } // reload // ---------------------------------------------------------------------------- -video::IImage* STKTexture::convertImage(video::IImage** orig_img) +video::IImage* STKTexture::resizeImage(video::IImage* orig_img, + core::dimension2du* new_img_size, + core::dimension2du* new_tex_size) { #ifndef SERVER_ONLY - video::IImage* image = *orig_img; - core::dimension2du size = image->getDimension(); + video::IImage* image = orig_img; + const core::dimension2du& old_size = image->getDimension(); + core::dimension2du img_size = old_size; - bool scale_image = false; - const float ratio = float(size.Width) / float(size.Height); + const float ratio = float(img_size.Width) / float(img_size.Height); const unsigned int drv_max_size = irr_driver->getVideoDriver()->getMaxTextureSize().Width; - if ((size.Width > drv_max_size) && (ratio >= 1.0f)) + if ((img_size.Width > drv_max_size) && (ratio >= 1.0f)) { - size.Width = drv_max_size; - size.Height = (unsigned)(drv_max_size / ratio); - scale_image = true; + img_size.Width = drv_max_size; + img_size.Height = (unsigned)(drv_max_size / ratio); } - else if (size.Height > drv_max_size) + else if (img_size.Height > drv_max_size) { - size.Height = drv_max_size; - size.Width = (unsigned)(drv_max_size * ratio); - scale_image = true; + img_size.Height = drv_max_size; + img_size.Width = (unsigned)(drv_max_size * ratio); } - if (scale_image) + + if (img_size != old_size) { video::IImage* new_img = irr_driver->getVideoDriver() - ->createImage(video::ECF_A8R8G8B8, size); + ->createImage(video::ECF_A8R8G8B8, img_size); image->copyToScaling(new_img); image->drop(); image = new_img; - *orig_img = new_img; } - bool scale_texture = false; - size = size.getOptimalSize + core::dimension2du tex_size = img_size.getOptimalSize (!irr_driver->getVideoDriver()->queryFeature(video::EVDF_TEXTURE_NPOT)); const core::dimension2du& max_size = irr_driver->getVideoDriver() ->getDriverAttributes().getAttributeAsDimension2d("MAX_TEXTURE_SIZE"); - if (max_size.Width > 0 && size.Width > max_size.Width) + if (max_size.Width > 0 && tex_size.Width > max_size.Width) + tex_size.Width = max_size.Width; + if (max_size.Height > 0 && tex_size.Height > max_size.Height) + tex_size.Height = max_size.Height; + + if (image->getColorFormat() != video::ECF_A8R8G8B8 || + tex_size != img_size) { - size.Width = max_size.Width; - scale_texture = true; - } - if (max_size.Height > 0 && size.Height > max_size.Height) - { - size.Height = max_size.Height; - scale_texture = true; + video::IImage* new_texture = irr_driver + ->getVideoDriver()->createImage(video::ECF_A8R8G8B8, tex_size); + if (tex_size != img_size) + image->copyToScaling(new_texture); + else + image->copyTo(new_texture); + image->drop(); + image = new_texture; } - video::IImage* new_texture = - irr_driver->getVideoDriver()->createImage(video::ECF_A8R8G8B8, size); - if (scale_texture) - image->copyToScaling(new_texture); - else - image->copyTo(new_texture); - - return new_texture; + if (new_img_size && new_tex_size) + { + *new_img_size = img_size; + *new_tex_size = tex_size; + } + return image; #endif // !SERVER_ONLY -} // convertImage +} // resizeImage // ---------------------------------------------------------------------------- void STKTexture::applyMask(video::IImage* orig_img) @@ -274,16 +280,15 @@ void STKTexture::applyMask(video::IImage* orig_img) #ifndef SERVER_ONLY if (m_material && !m_material->getAlphaMask().empty()) { - video::IImage* tmp_mask = irr_driver->getVideoDriver() + video::IImage* converted_mask = irr_driver->getVideoDriver() ->createImageFromFile(m_material->getAlphaMask().c_str()); - if (tmp_mask == NULL) + if (converted_mask == NULL) { Log::warn("STKTexture", "Applying mask failed for '%s'!", m_material->getAlphaMask().c_str()); return; } - video::IImage* converted_mask = convertImage(&tmp_mask); - tmp_mask->drop(); + converted_mask = resizeImage(converted_mask); if (converted_mask->lock()) { core::dimension2d dim = orig_img->getDimension(); @@ -298,6 +303,7 @@ void STKTexture::applyMask(video::IImage* orig_img) } // for y } // for x } + converted_mask->unlock(); converted_mask->drop(); } #endif // !SERVER_ONLY @@ -409,3 +415,13 @@ std::string STKTexture::getHashedName(const std::string& orig_file) hash << std::hex << hash_1 << hash_2 << max_size.Height; return result + hash.str() + ".stktz"; } // getHashedName + +//----------------------------------------------------------------------------- +bool STKTexture::hasMipMaps() const +{ +#ifndef SERVER_ONLY + return CVS->getGLSLVersion() >= 130; +#else + return false; +#endif // !SERVER_ONLY +} // hasMipMaps diff --git a/src/graphics/stk_texture.hpp b/src/graphics/stk_texture.hpp index a9fc7a2fb..76d92aefa 100644 --- a/src/graphics/stk_texture.hpp +++ b/src/graphics/stk_texture.hpp @@ -46,7 +46,9 @@ private: video::IImage* m_texture_image; // ------------------------------------------------------------------------ - video::IImage* convertImage(video::IImage** orig_img); + video::IImage* resizeImage(video::IImage* orig_img, + core::dimension2du* new_img_size = NULL, + core::dimension2du* new_tex_size = NULL); // ------------------------------------------------------------------------ void applyMask(video::IImage* orig_img); // ------------------------------------------------------------------------ @@ -99,6 +101,8 @@ public: // ------------------------------------------------------------------------ virtual u32 getPitch() const { return 0; } // ------------------------------------------------------------------------ + virtual bool hasMipMaps() const; + // ------------------------------------------------------------------------ virtual void regenerateMipMapLevels(void* mipmap_data = NULL) {} // ------------------------------------------------------------------------ virtual u32 getOpenGLTextureName() const { return m_texture_name; } diff --git a/src/graphics/texture_manager.cpp b/src/graphics/texture_manager.cpp index 84ffd9067..72e006210 100644 --- a/src/graphics/texture_manager.cpp +++ b/src/graphics/texture_manager.cpp @@ -17,12 +17,13 @@ #ifndef SERVER_ONLY -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "graphics/central_settings.hpp" #include "graphics/irr_driver.hpp" #include "graphics/materials.hpp" #include "graphics/stk_texture.hpp" +#include "graphics/texture_manager.hpp" #include "utils/string_utils.hpp" #if defined(USE_GLES2) @@ -244,34 +245,6 @@ void saveCompressedTexture(const std::string& compressed_tex) #endif } -video::ITexture* getUnicolorTexture(const video::SColor &c) -{ - std::map::iterator it = unicolor_cache.find(c.color); - if (it != unicolor_cache.end()) - { - return it->second; - } - else - { - unsigned tmp[4] = { - c.color, - c.color, - c.color, - c.color - }; - video::IImage *img = irr_driver->getVideoDriver()->createImageFromData(video::ECF_A8R8G8B8, core::dimension2d(2, 2), tmp); - std::stringstream name; - name << "color" << c.color; - video::ITexture* tex = irr_driver->getVideoDriver()->addTexture(name.str().c_str(), img); - tex->grab(); - // Only let our map hold the unicolor texture - irr_driver->getVideoDriver()->removeTexture(tex); - unicolor_cache[c.color] = tex; - img->drop(); - return tex; - } -} - core::stringw reloadTexture(const core::stringw& name) { if (!CVS->isGLSL()) diff --git a/src/graphics/texture_manager.hpp b/src/graphics/texture_manager.hpp index 50518a10d..41f858f42 100644 --- a/src/graphics/texture_manager.hpp +++ b/src/graphics/texture_manager.hpp @@ -32,7 +32,6 @@ void cleanUnicolorTextures(); void compressTexture(irr::video::ITexture *tex, bool srgb, bool premul_alpha = false); bool loadCompressedTexture(const std::string& compressed_tex); void saveCompressedTexture(const std::string& compressed_tex); -irr::video::ITexture* getUnicolorTexture(const irr::video::SColor &c); void insertTextureHandle(uint64_t handle); bool reloadSingleTexture(irr::video::ITexture *tex); irr::core::stringw reloadTexture(const irr::core::stringw& name); diff --git a/src/items/rubber_band.cpp b/src/items/rubber_band.cpp index 6fad556cf..17ea5339f 100644 --- a/src/items/rubber_band.cpp +++ b/src/items/rubber_band.cpp @@ -23,7 +23,7 @@ #include "graphics/irr_driver.hpp" #include "graphics/material_manager.hpp" #include "graphics/stk_mesh_scene_node.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "items/plunger.hpp" #include "items/projectile_manager.hpp" #include "karts/abstract_kart.hpp" @@ -69,11 +69,11 @@ RubberBand::RubberBand(Plunger *plunger, AbstractKart *kart) #ifndef SERVER_ONLY // Color - mb->getMaterial().setTexture(0, getUnicolorTexture(video::SColor(255, 255, 255, 255))); + mb->getMaterial().setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 255, 255, 255))); // Gloss - mb->getMaterial().setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + mb->getMaterial().setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); // Colorization mask - mb->getMaterial().setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + mb->getMaterial().setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); #endif updatePosition(); m_node = irr_driver->addMesh(m_mesh, "rubberband"); diff --git a/src/karts/controller/skidding_ai.cpp b/src/karts/controller/skidding_ai.cpp index e042cb8f1..092e3393f 100644 --- a/src/karts/controller/skidding_ai.cpp +++ b/src/karts/controller/skidding_ai.cpp @@ -23,7 +23,7 @@ #ifdef AI_DEBUG # include "graphics/irr_driver.hpp" -# include "graphics/texture_manager.hpp" +# include "graphics/stk_tex_manager.hpp" #endif #include "graphics/show_curve.hpp" #include "graphics/slip_stream.hpp" @@ -95,8 +95,8 @@ SkiddingAI::SkiddingAI(AbstractKart *kart) i==2 ? 128 : 0); m_debug_sphere[i] = irr_driver->addSphere(1.0f, col_debug); m_debug_sphere[i]->setVisible(false); - m_debug_sphere[i]->setMaterialTexture(0, getUnicolorTexture(video::SColor(128, 255, 105, 180))); - m_debug_sphere[i]->setMaterialTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m_debug_sphere[i]->setMaterialTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(128, 255, 105, 180))); + m_debug_sphere[i]->setMaterialTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); } m_debug_sphere[m_point_selection_algorithm]->setVisible(true); m_item_sphere = irr_driver->addSphere(1.0f, video::SColor(255, 0, 255, 0)); diff --git a/src/karts/controller/test_ai.cpp b/src/karts/controller/test_ai.cpp index 151875926..915b18772 100644 --- a/src/karts/controller/test_ai.cpp +++ b/src/karts/controller/test_ai.cpp @@ -23,7 +23,7 @@ #ifdef AI_DEBUG # include "graphics/irr_driver.hpp" -# include "graphics/texture_manager.hpp" +# include "graphics/stk_tex_manager.hpp" #endif #include "graphics/show_curve.hpp" #include "graphics/slip_stream.hpp" @@ -101,8 +101,8 @@ SkiddingAI::SkiddingAI(AbstractKart *kart) i==2 ? 128 : 0); m_debug_sphere[i] = irr_driver->addSphere(1.0f, col_debug); m_debug_sphere[i]->setVisible(false); - m_debug_sphere[i]->setMaterialTexture(0, getUnicolorTexture(video::SColor(128, 255, 105, 180))); - m_debug_sphere[i]->setMaterialTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m_debug_sphere[i]->setMaterialTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(128, 255, 105, 180))); + m_debug_sphere[i]->setMaterialTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); } m_debug_sphere[m_point_selection_algorithm]->setVisible(true); m_item_sphere = irr_driver->addSphere(1.0f, video::SColor(255, 0, 255, 0)); diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp index 099ca110f..abd8a502b 100644 --- a/src/karts/kart_properties.cpp +++ b/src/karts/kart_properties.cpp @@ -23,7 +23,7 @@ #include "config/player_manager.hpp" #include "graphics/irr_driver.hpp" #include "graphics/material_manager.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "io/file_manager.hpp" #include "karts/cached_characteristic.hpp" #include "karts/combined_characteristic.hpp" @@ -252,7 +252,7 @@ void KartProperties::load(const std::string &filename, const std::string &node) #ifndef SERVER_ONLY if (m_minimap_icon == NULL) { - m_minimap_icon = getUnicolorTexture(m_color); + m_minimap_icon = STKTexManager::getInstance()->getUnicolorTexture(m_color); } #endif diff --git a/src/modes/soccer_world.cpp b/src/modes/soccer_world.cpp index 07f1f922e..60bcaa37c 100644 --- a/src/modes/soccer_world.cpp +++ b/src/modes/soccer_world.cpp @@ -26,7 +26,6 @@ #include "graphics/irr_driver.hpp" #include "graphics/render_info.hpp" #include "graphics/stk_tex_manager.hpp" -#include "graphics/stk_texture.hpp" #include "karts/kart.hpp" #include "karts/kart_model.hpp" #include "karts/kart_properties.hpp" @@ -327,38 +326,18 @@ void SoccerWorld::initKartList() const unsigned int kart_amount = (unsigned int)m_karts.size(); //Loading the indicator textures - video::ITexture* red = NULL; - video::ITexture* blue = NULL; std::string red_path = file_manager->getAsset(FileManager::GUI, "soccer_player_red.png"); std::string blue_path = file_manager->getAsset(FileManager::GUI, "soccer_player_blue.png"); -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - red = STKTexManager::getInstance()->getTexture - (red_path, true/*srgb*/, true/*premul_alpha*/, - false/*set_material*/, true/*mesh_tex*/); - } - else -#endif - { - red = irr_driver->getTexture(red_path); - } + video::ITexture* red = STKTexManager::getInstance()->getTexture + (red_path, true/*srgb*/, true/*premul_alpha*/, false/*set_material*/, + true/*mesh_tex*/); -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - blue = STKTexManager::getInstance()->getTexture - (blue_path, true/*srgb*/, true/*premul_alpha*/, - false/*set_material*/, true/*mesh_tex*/); - } - else -#endif - { - blue = irr_driver->getTexture(blue_path); - } + video::ITexture* blue = STKTexManager::getInstance()->getTexture + (blue_path, true/*srgb*/, true/*premul_alpha*/, false/*set_material*/, + true/*mesh_tex*/); //Assigning indicators for(unsigned int i = 0; i < kart_amount; i++) diff --git a/src/modes/three_strikes_battle.cpp b/src/modes/three_strikes_battle.cpp index 3e3bc88d9..87052c086 100644 --- a/src/modes/three_strikes_battle.cpp +++ b/src/modes/three_strikes_battle.cpp @@ -21,10 +21,8 @@ #include "audio/music_manager.hpp" #include "config/user_config.hpp" #include "graphics/camera.hpp" -#include "graphics/central_settings.hpp" #include "graphics/irr_driver.hpp" #include "graphics/stk_tex_manager.hpp" -#include "graphics/stk_texture.hpp" #include "io/file_manager.hpp" #include "karts/kart.hpp" #include "karts/controller/spare_tire_ai.hpp" @@ -181,19 +179,9 @@ void ThreeStrikesBattle::kartAdded(AbstractKart* kart, scene::ISceneNode* node) // Add heart billboard above it std::string heart_path = file_manager->getAsset(FileManager::GUI, "heart.png"); - video::ITexture* heart = NULL; -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - heart = STKTexManager::getInstance()->getTexture - (heart_path, true/*srgb*/, true/*premul_alpha*/, - false/*set_material*/, true/*mesh_tex*/); - } - else -#endif - { - heart = irr_driver->getTexture(heart_path); - } + video::ITexture* heart = STKTexManager::getInstance()->getTexture + (heart_path, true/*srgb*/, true/*premul_alpha*/, + false/*set_material*/, true/*mesh_tex*/); float height = kart->getKartHeight() + 0.5f; diff --git a/src/tracks/check_line.cpp b/src/tracks/check_line.cpp index bb9ace654..ec5252f70 100644 --- a/src/tracks/check_line.cpp +++ b/src/tracks/check_line.cpp @@ -20,7 +20,7 @@ #include "config/user_config.hpp" #include "graphics/irr_driver.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "io/xml_node.hpp" #include "karts/abstract_kart.hpp" #include "modes/linear_world.hpp" @@ -103,9 +103,9 @@ CheckLine::CheckLine(const XMLNode &node, unsigned int index) : video::SColor(128, 128, 128, 128); } buffer->recalculateBoundingBox(); - buffer->getMaterial().setTexture(0, getUnicolorTexture(video::SColor(128, 255, 105, 180))); - buffer->getMaterial().setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); - buffer->getMaterial().setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + buffer->getMaterial().setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(128, 255, 105, 180))); + buffer->getMaterial().setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); + buffer->getMaterial().setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); buffer->getMaterial().BackfaceCulling = false; //mesh->setBoundingBox(buffer->getBoundingBox()); m_debug_node = irr_driver->addMesh(mesh, "checkdebug"); @@ -153,7 +153,7 @@ void CheckLine::changeDebugColor(bool is_active) vertices[i].Color = color; } #ifndef SERVER_ONLY - buffer->getMaterial().setTexture(0, getUnicolorTexture(color)); + buffer->getMaterial().setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(color)); #endif } // changeDebugColor diff --git a/src/tracks/graph.cpp b/src/tracks/graph.cpp index 1ca3e6153..117da8e72 100644 --- a/src/tracks/graph.cpp +++ b/src/tracks/graph.cpp @@ -21,7 +21,7 @@ #include "config/user_config.hpp" #include "graphics/irr_driver.hpp" #include "graphics/render_target.hpp" -#include "graphics/texture_manager.hpp" +#include "graphics/stk_tex_manager.hpp" #include "graphics/vao_manager.hpp" #include "modes/profile_world.hpp" #include "tracks/arena_node_3d.hpp" @@ -108,9 +108,9 @@ void Graph::createMesh(bool show_invisible, bool enable_transparency, m.Lighting = false; if (enable_transparency) m.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m.setTexture(0, getUnicolorTexture(video::SColor(255, 255, 255, 255))); - m.setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); - m.setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m.setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 255, 255, 255))); + m.setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); + m.setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); m_mesh = irr_driver->createQuadMesh(&m); m_mesh_buffer = m_mesh->getMeshBuffer(0); assert(m_mesh_buffer->getVertexType()==video::EVT_STANDARD); diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index c5bfdbddd..658d52b2f 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -39,7 +39,6 @@ #include "graphics/particle_kind.hpp" #include "graphics/particle_kind_manager.hpp" #include "graphics/render_target.hpp" -#include "graphics/stk_texture.hpp" #include "graphics/stk_tex_manager.hpp" #include "graphics/texture_manager.hpp" #include "graphics/vao_manager.hpp" @@ -810,14 +809,14 @@ void Track::createPhysicsModel(unsigned int main_track_count) // Color #ifndef SERVER_ONLY - mb->getMaterial().setTexture(0, getUnicolorTexture(video::SColor(255, 255, 105, 180))); + mb->getMaterial().setTexture(0, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(255, 255, 105, 180))); #endif irr_driver->grabAllTextures(mesh); // Gloss #ifndef SERVER_ONLY - mb->getMaterial().setTexture(1, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + mb->getMaterial().setTexture(1, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); // Colorization mask - mb->getMaterial().setTexture(2, getUnicolorTexture(video::SColor(0, 0, 0, 0))); + mb->getMaterial().setTexture(2, STKTexManager::getInstance()->getUnicolorTexture(video::SColor(0, 0, 0, 0))); #endif } else diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index cacc6b09e..1082575f2 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -832,20 +832,9 @@ TrackObjectPresentationBillboard::TrackObjectPresentationBillboard( xml_node.get("start", &m_fade_out_start); xml_node.get("end", &m_fade_out_end ); } - video::ITexture* texture = NULL; -#ifndef SERVER_ONLY - if (CVS->isGLSL()) - { - texture = STKTexManager::getInstance()->getTexture - (file_manager->searchTexture(texture_name), true/*srgb*/, - true/*premul_alpha*/, false/*set_material*/, true/*mesh_tex*/); - } - else -#endif - { - texture = - irr_driver->getTexture(file_manager->searchTexture(texture_name)); - } + video::ITexture* texture = STKTexManager::getInstance()->getTexture + (file_manager->searchTexture(texture_name), true/*srgb*/, + true/*premul_alpha*/, false/*set_material*/, true/*mesh_tex*/); if (texture == NULL) {