2016-07-16 19:21:12 +00:00
|
|
|
#include "Badging.hpp"
|
|
|
|
#include "athena/MemoryReader.hpp"
|
|
|
|
#include <zlib.h>
|
|
|
|
|
|
|
|
extern "C" uint8_t URDE_BADGE[];
|
|
|
|
extern "C" size_t URDE_BADGE_SZ;
|
|
|
|
|
|
|
|
namespace urde
|
|
|
|
{
|
|
|
|
static logvisor::Module Log("URDE::badging");
|
|
|
|
static specter::Icon g_BadgeIcon;
|
|
|
|
|
2017-11-05 06:17:12 +00:00
|
|
|
void InitializeBadging(specter::ViewResources& viewRes)
|
2016-07-16 19:21:12 +00:00
|
|
|
{
|
|
|
|
athena::io::MemoryReader r(URDE_BADGE, URDE_BADGE_SZ);
|
|
|
|
|
|
|
|
size_t fmt = r.readUint32Big();
|
|
|
|
if (fmt != 16)
|
|
|
|
Log.report(logvisor::Fatal, "incorrect icon texture format");
|
|
|
|
size_t width = r.readUint16Big();
|
|
|
|
size_t height = r.readUint16Big();
|
|
|
|
size_t mips = r.readUint32Big();
|
|
|
|
size_t decompSz = r.readUint32Big();
|
|
|
|
|
|
|
|
std::unique_ptr<uint8_t[]> texels(new uint8_t[decompSz]);
|
|
|
|
uLongf destSz = decompSz;
|
|
|
|
size_t pos = r.position();
|
|
|
|
if (uncompress(texels.get(), &destSz, URDE_BADGE + pos, URDE_BADGE_SZ - pos) != Z_OK)
|
|
|
|
Log.report(logvisor::Fatal, "unable to decompress badge");
|
|
|
|
|
2017-11-05 06:17:12 +00:00
|
|
|
viewRes.m_factory->commitTransaction([&](boo::IGraphicsDataFactory::Context& ctx) -> bool
|
2016-07-16 19:21:12 +00:00
|
|
|
{
|
|
|
|
specter::IconAtlas<1, 1> atlas;
|
|
|
|
|
|
|
|
atlas.initializeAtlas(ctx.newStaticTexture(width, height, mips,
|
2017-10-01 04:26:46 +00:00
|
|
|
boo::TextureFormat::RGBA8, boo::TextureClampMode::Repeat,
|
2016-07-16 19:21:12 +00:00
|
|
|
texels.get(), destSz));
|
|
|
|
g_BadgeIcon = atlas.getIcon(0, 0);
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2017-11-05 06:17:12 +00:00
|
|
|
void DestroyBadging()
|
|
|
|
{
|
|
|
|
g_BadgeIcon.m_tex.reset();
|
|
|
|
}
|
|
|
|
|
2016-07-16 19:21:12 +00:00
|
|
|
specter::Icon& GetBadge()
|
|
|
|
{
|
|
|
|
return g_BadgeIcon;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|