void ParseOBJ::parse(BinaryInput& bi, const ParseOBJ::Options& options, const String& basePath) { m_filename = bi.getFilename(); String bp = basePath; if (bp == "<AUTO>") { bp = FilePath::parent(FileSystem::resolve(m_filename)); } parse((const char*)bi.getCArray() + bi.getPosition(), size_t(bi.getLength() - bi.getPosition()), bp, options); }
GFont::GFont(const String& filename, BinaryInput& b) { int ver = b.readInt32(); debugAssertM(ver == 1 || ver == 2, "Can't read font files other than version 1"); (void)ver; if (ver == 1) { charsetSize = 128; } else { charsetSize = b.readInt32(); } // Read the widths subWidth.resize(charsetSize); for (int c = 0; c < charsetSize; ++c) { subWidth[c] = b.readUInt16(); } baseline = b.readUInt16(); int texWidth = b.readUInt16(); charWidth = texWidth / 16; charHeight = texWidth / 16; // The input may not be a power of 2 int width = ceilPow2(charWidth * 16); int height = ceilPow2(charHeight * (charsetSize / 16)); // Create a texture const uint8* ptr = ((uint8*)b.getCArray()) + b.getPosition(); debugAssertM((b.getLength() - b.getPosition()) >= width * height, "File does not contain enough data for this size texture"); Texture::Preprocess preprocess; preprocess.computeMinMaxMean = false; const bool generateMipMaps = true; m_texture = Texture::fromMemory ( filename, ptr, ImageFormat::R8(), width, height, 1, 1, ImageFormat::R8(), Texture::DIM_2D, generateMipMaps, preprocess); m_textureMatrix[0] = 1.0f / m_texture->width(); m_textureMatrix[1] = 0; m_textureMatrix[2] = 0; m_textureMatrix[3] = 0; m_textureMatrix[4] = 0; m_textureMatrix[5] = 1.0f / m_texture->height(); m_textureMatrix[6] = 0; m_textureMatrix[7] = 0; m_textureMatrix[8] = 0; m_textureMatrix[9] = 0; m_textureMatrix[10] = 1; m_textureMatrix[11] = 0; m_textureMatrix[12] = 0; m_textureMatrix[13] = 0; m_textureMatrix[14] = 0; m_textureMatrix[15] = 1; m_name = filename; }