Ejemplo n.º 1
0
// Returns one of the layout's rectangles.
TextureLayoutRectangle& TextureLayout::GetRectangle(int index)
{
	ROCKET_ASSERT(index >= 0);
	ROCKET_ASSERT(index < GetNumRectangles());

	return rectangles[index];
}
Ejemplo n.º 2
0
void TextureLayout::WriteCacheFile(FILE* f)
{   
	int sr = GetNumRectangles();
	fwrite(&sr, sizeof(sr), 1, f);
	for (int i = 0; i < sr; ++i)
	{
		auto& rect = GetRectangle(i);

		TextureLayoutRectangleCache rectc;
		rectc.dimensions_x = rect.GetDimensions().x;
		rectc.dimensions_y = rect.GetDimensions().y;
		rectc.id = rect.GetId();
		rectc.texture_index = rect.GetTextureIndex();
		rectc.texture_position_x = rect.GetPosition().x;
		rectc.texture_position_y = rect.GetPosition().y;
		rectc.texture_stride = rect.GetTextureStride();

		fwrite(&rectc, sizeof(TextureLayoutRectangleCache), 1, f);
	}

	int sl = GetNumTextures();
	fwrite(&sl, sizeof(sl), 1, f);
	for (int i = 0; i < sl; ++i)
	{
		GetTexture(i).WriteCacheFile(f, &rectangles[0]);
	}
}
Ejemplo n.º 3
0
// Attempts to generate an efficient texture layout for the rectangles.
bool TextureLayout::GenerateLayout(int max_texture_dimensions)
{
	// Sort the rectangles by height.
	std::sort(rectangles.begin(), rectangles.end(), RectangleSort());

	int num_placed_rectangles = 0;
	while (num_placed_rectangles != GetNumRectangles())
	{
		TextureLayoutTexture texture;
		int texture_size = texture.Generate(*this, max_texture_dimensions);
		if (texture_size == 0)
			return false;

		textures.push_back(texture);
		num_placed_rectangles += texture_size;
	}

	return true;
}