#include "Render/Primitives/RenderPrimitivePool.h" #include "Render/Primitives/UIRPData.h" #include "Render/Textures/Texture.h" #include "Render/Textures/TextureCache.h" // OFFSET: 0x008130A0 // FUNCTION: fn_10121 void UIRPData::DrawStretched(RenderPrimitivePool& pool, int x, int y, CTexture* texture, std::uint32_t color, int width, int height) { if (!texture) { return; } RenderPrimitive* primitive = pool.Acquire(); primitive->texture = texture; const int right = x + width; const int bottom = y + height; primitive->quad[0].x = static_cast(x); primitive->quad[0].y = static_cast(y); primitive->quad[0].u = g_textureOffsetX / static_cast(texture->TextureWidth()); primitive->quad[0].v = g_textureOffsetY / static_cast(texture->TextureHeight()); primitive->quad[1].x = static_cast(right); primitive->quad[1].y = static_cast(y); primitive->quad[1].u = (static_cast(texture->Width()) + g_textureOffsetX) / static_cast(texture->TextureWidth()); primitive->quad[1].v = g_textureOffsetY / static_cast(texture->TextureHeight()); primitive->quad[2].x = static_cast(x); primitive->quad[2].y = static_cast(bottom); primitive->quad[2].u = g_textureOffsetX / static_cast(texture->TextureWidth()); primitive->quad[2].v = (static_cast(texture->Height()) + g_textureOffsetX) / static_cast(texture->TextureHeight()); primitive->quad[3].x = static_cast(right); primitive->quad[3].y = static_cast(bottom); primitive->quad[3].u = (static_cast(texture->Width()) + g_textureOffsetX) / static_cast(texture->TextureWidth()); primitive->quad[3].v = (static_cast(texture->Height()) + g_textureOffsetX) / static_cast(texture->TextureHeight()); for (RenderVertex& vertex : primitive->quad) { vertex.diffuse = color; } for (RenderVertex& vertex : primitive->quad) { vertex.z = 0.000001f; vertex.rhw = 0.999999f; } this->m_primitives.push_back(primitive); } // OFFSET: 0x008134B0 // FUNCTION: fn_10122 void UIRPData::DrawNamed(RenderPrimitivePool& pool, int x, int y, std::string name, std::uint32_t color, int width, int height) { CTexture* texture = g_texMgr.Load(name.c_str(), 0, true, true, false); if (!texture) { return; } RenderPrimitive* primitive = pool.Acquire(); primitive->texture = texture; const int imageWidth = texture->Width(); const int imageHeight = texture->Height(); if (!width) { width = texture->Width(); } if (!height) { height = texture->Height(); } const int textureWidth = texture->TextureWidth(); const int textureHeight = texture->TextureHeight(); primitive->quad[0].x = static_cast(x); primitive->quad[0].y = static_cast(y); primitive->quad[0].u = g_textureOffsetX / static_cast(textureWidth); primitive->quad[0].v = g_textureOffsetY / static_cast(textureHeight); primitive->quad[1].x = static_cast(x + width); primitive->quad[1].y = static_cast(y); if (width > imageWidth) { primitive->quad[1].u = (static_cast(imageWidth) + g_textureOffsetX) / static_cast(textureWidth); } else { primitive->quad[1].u = (static_cast(width) + g_textureOffsetX) / static_cast(textureWidth); } primitive->quad[1].v = g_textureOffsetY / static_cast(textureHeight); primitive->quad[2].x = static_cast(x); primitive->quad[2].y = static_cast(y + height); primitive->quad[2].u = g_textureOffsetX / static_cast(textureWidth); if (height > imageHeight) { primitive->quad[2].v = (static_cast(imageHeight) + g_textureOffsetY) / static_cast(textureHeight); } else { primitive->quad[2].v = (static_cast(height) + g_textureOffsetX) / static_cast(textureHeight); } primitive->quad[3].x = static_cast(x + width); primitive->quad[3].y = static_cast(y + height); if (width > imageWidth) { primitive->quad[3].u = (static_cast(imageWidth) + g_textureOffsetX) / static_cast(textureWidth); } else { primitive->quad[3].u = (static_cast(width) + g_textureOffsetX) / static_cast(textureWidth); } if (height > imageHeight) { primitive->quad[3].v = (static_cast(imageHeight) + g_textureOffsetY) / static_cast(textureHeight); } else { primitive->quad[3].v = (static_cast(height) + g_textureOffsetX) / static_cast(textureHeight); } for (int i = 0; i < 4; ++i) { primitive->quad[i].diffuse = color; } for (int i = 0; i < 4; ++i) { primitive->quad[i].z = 0.000001f; primitive->quad[i].rhw = 0.999999f; } this->m_primitives.push_back(primitive); } // OFFSET: 0x00813A00 // FUNCTION: fn_10123 void UIRPData::SetSolid(RenderPrimitivePool& pool, int width, int height, std::uint32_t color) { this->m_primitives.clear(); RenderPrimitive* primitive = pool.Acquire(); primitive->texture = nullptr; primitive->quad[0].x = 0.0f; primitive->quad[0].y = 0.0f; primitive->quad[1].x = static_cast(width); primitive->quad[1].y = 0.0f; primitive->quad[2].x = 0.0f; primitive->quad[2].y = static_cast(height); primitive->quad[3].x = static_cast(width); primitive->quad[3].y = static_cast(height); for (RenderVertex& vertex : primitive->quad) { vertex.u = 0.0f; vertex.v = 0.0f; vertex.z = 0.000001f; vertex.rhw = 0.999999f; vertex.diffuse = color; } this->m_primitives.push_back(primitive); }