Урок 1. Экономия памяти на одинаковых Картинках

> Свободная база знаний SFML > Уроки SFML > Разработка 2D Игр > Уроки от legozaur > Урок 1. Экономия памяти на одинаковых Картинках

Попозже оформлю покрасивее.

До некоторого времени я загружал одинаковые картинки для каждого объекта свою,  впрочем, вы наверное так-же делаете :)
Но столкнулся я с проблемой:
Имеется сложный тайлсет размерами w=768 h=128, весит 6.13 Kb
Для создания глобальной карты мне потребуется ровно 10.000 таких картинок.
61300 Kb приблизительно 61.3 Mb, серьёзно?

В общем, программа у меня жрала 2 Gb ОЗУ, точнее сколько смогла, столько и взяла, и не включилась.

И тут я понял что нужна какая-то оптимизация.
Самый простой велосипед, который удалось придумать,  это библиотека изображений.

Основной принцип:
Одна картинка может рисоваться 10.000 раз вместо того чтобы 10.000 картинок рисовать по 1 разу.

От пустой болтовни к коду:
1. Класс Image содержащий в себе sf::Image, sf::Texture, sf::Sprite и различные параметры и методы картинки, такой вы и сами сможете сделать.
2. Класс ссылка на картинку
Я его назвал LImage (L – сокращение от анг. библиотечная)

3. Класс LibImg – библиотека изображений

Небольшая задумка на будущее: в первой тройке векторов хранятся картинки которые имеют одинаковый набор параметров, и меняют только координаты или какие-то другие простые параметры.
Во второй тройке хранятся другие такие же картинки, для того чтобы можно было проводить с ними сложные операции по изменению размеров цвета и т.д..
4. main

Проверка:
Тестирование производилось на 10000 картинках по 32*32px
LibImg_Image2Результаты:
в 1 случае через 10000 Image
во 2 случае через LibImg и 10000 LImageLibImg_Image1Вроде ощутимо, вы так не считаете?
В общем то всё.

 

 
Буду благодарен, если поделитесь: