====== TIM ====== TIM - это стандартный формат графических файлов для PlayStation. Структура TIM в значительной степени отражает принцип организации текстур [[GPU]]. Особенность формата в том, что он хранит позицию текстуры в [[VRAM|видеопамяти]], что позволяет разработчику игры заранее распланировать ее расход и не создавать динамический менеджер видеопамяти. Файл состоит из трех логических блоков: заголовка, палитры (CLUT) и данных изображения. Блоки CLUT и данных изображения имеют схожее внутреннее устройство; при загрузке файла TIM в кадровый буфер PlayStation они обрабатываются одинако. Блок CLUT является необязательным: во-первых, он не требуется, если текстура закодирована в 16-битном или 24-битном режиме, во-вторых, даже если текстура индексированная, CLUT может быть загружен из другого файла. ===== Заголовок ===== Заголовок начинается с байта-идентификатора. Его значение является постоянным для всех файлов формата TIM и должно быть равно 0x10. За ним идут три нулевых байта. Следующее 32-битное слово содержит битовые флаги, определяющие основные свойства изображения: * Биты 0-1 - глубина цвета (BPP): * 00 (0) - 4 бита на пиксель (16 цветов, используется CLUT) * 01 (1) - 8 бит на пиксель (256 цветов, используется CLUT) * 10 (2) - 16 бит на пиксель (без CLUT) * 11 (3) - 24 бит на пиксель (без CLUT) * Бит 3 - наличие в файле CLUT (как правило, этот флаг установлен, если значение BPP равно 00 или 01) * 0 - CLUT отсутствует * 1 - CLUT присутствует. ===== Блок CLUT ===== CLUT состоит из 12-байтного заголовка и собственно байтов палитры. Заголовок состоит из: * 32-битного слова, в котором хранится размер всего блока CLUT в байтах (включая и заголовк, и данные) * 16-битных координат X, Y, которые указывают на позицию CLUT в видеопамяти. Координаты выражены в логических 16-битных пикселях VRAM. Они используются для загрузки данных в видеопамять командой GP0(A0h) * 16-битных значений width, height, которые обозначают ширину и высоту CLUT. Ширина CLUT зависит от глубины цвета: 16 пикселей для 4-битных изображений и 256 пикселей для 16-битных. Высота CLUT (количество строк) обычно равна 1, но может быть и больше, если текстура поддерживает вариативные палитры. ===== Блок изображения ===== Изображение хранится по тому же принципу, что и CLUT - такой же заголовок и данные.