#include "Render/Primitives/RenderPrimitivePool.h" #include "Render/Renderer.h" #include "Render/Textures/Texture.h" #include "Render/Primitives/UIRPData.h" #include #include // OFFSET: 0x00812780 // FUNCTION: fn_10117 UIRPData::UIRPData() : m_texture(nullptr) { } // OFFSET: 0x00812800 // FUNCTION: fn_10118 UIRPData::~UIRPData() { if (this->m_texture) { delete this->m_texture; this->m_texture = nullptr; } this->m_primitives.clear(); } // OFFSET: 0x008129D0 // FUNCTION: fn_10120 void UIRPData::Draw(int x, int y, CTexture* texture, std::uint32_t color, int width, int height, bool stretched) { if (!texture) { return; } RenderPrimitive* primitive; if (stretched == true) { primitive = g_renderer->primitives.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()); primitive->quad[0].z = 0.000001f; primitive->quad[0].rhw = 0.999999f; primitive->quad[0].diffuse = color; primitive->quad[1].z = 0.000001f; primitive->quad[1].rhw = 0.999999f; primitive->quad[1].diffuse = color; primitive->quad[2].z = 0.000001f; primitive->quad[2].rhw = 0.999999f; primitive->quad[2].diffuse = color; primitive->quad[3].z = 0.000001f; primitive->quad[3].rhw = 0.999999f; primitive->quad[3].diffuse = color; } else { primitive = g_renderer->primitives.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(); const int right = x + width; const float bottom = static_cast(y + height); primitive->quad[0].x = static_cast(x); primitive->quad[0].y = static_cast(y); primitive->quad[0].u = g_textureOffsetX / textureWidth; primitive->quad[0].v = g_textureOffsetY / textureHeight; primitive->quad[1].x = static_cast(right); primitive->quad[1].y = static_cast(y); primitive->quad[1].u = (static_cast(width <= imageWidth ? width : imageWidth) + g_textureOffsetX) / textureWidth; primitive->quad[1].v = g_textureOffsetY / textureHeight; primitive->quad[2].x = static_cast(x); primitive->quad[2].y = bottom; primitive->quad[2].u = g_textureOffsetX / textureWidth; primitive->quad[2].v = (height <= imageHeight ? static_cast(height) + g_textureOffsetX : static_cast(imageHeight) + g_textureOffsetY) / textureHeight; primitive->quad[3].x = static_cast(right); primitive->quad[3].y = bottom; primitive->quad[3].u = (static_cast(width <= imageWidth ? width : imageWidth) + g_textureOffsetX) / textureWidth; primitive->quad[3].v = (height <= imageHeight ? static_cast(height) + g_textureOffsetX : static_cast(imageHeight) + g_textureOffsetY) / textureHeight; primitive->quad[0].z = 0.000001f; primitive->quad[0].rhw = 0.999999f; primitive->quad[0].diffuse = color; primitive->quad[1].z = 0.000001f; primitive->quad[1].rhw = 0.999999f; primitive->quad[1].diffuse = color; primitive->quad[2].z = 0.000001f; primitive->quad[2].rhw = 0.999999f; primitive->quad[2].diffuse = color; primitive->quad[3].z = 0.000001f; primitive->quad[3].rhw = 0.999999f; primitive->quad[3].diffuse = color; } this->m_primitives.push_back(primitive); }