consoledevФорум

Использование текстур в проектах для psp

#0
18:01, 27 фев 2007

Приветствую всех!

Хотелось бы поднять следующий вопрос:
1. Каким способом юзаются текстуры в проектах для psp? И какие файловые форматы обычно используются?
То, что я встречал пока - это raw, который линкуется к программе. Видел загрузку bmp. А также нашел прогу которая конвертит
raw или bmp в с-файл, который собирается вместе с исходниками проекта.
Не могли бы вы объяснить, для чего нужен такой, имхо, изврат? Неужели каждую текстуру, которая мне может понадобится, я буду прописывать в make-файле?? Знаете ли Вы другие способы?

2. Нарыл в документации что psp поддерживает s3tc. Нашел прогу, которая сохраняет текстуры формата dxt1, dxt5 etc. для psp.  Означает ли это что видеосопроцессор psp может работать с dds'ками? Кто-нибудь располагает какой-то информацией по данной проблеме?

Заранее спасибо!

#1
9:29, 1 мар 2007

Привет!

Как таковых форматов файловых (стандартизированных) нет. Native формат который предлагает Sony это еще с Playstation1 (и до PSP) это TIM. Но ним редко пользуються.
Обычно все делают свой формат ибо если разгонять по скорости оптимизировать etc.... обычные форматы не подходят. Например когда нада на лету сформировать push-buffer для GE процессора, в котором будет указано откуда брать CLUT , raw pixel data etc.... Кроме того есть очень полезная фича это загрузка 4- 8- битных текстур как 32битных (SWIZZLING - ускорение upto 4 times загрузки текстуры) там вообще ни один стандартный формат не подходит.

Если ты влинковываешь в executable картинки значит нет devkit :) потому что не пользуешься host0: , но для этих целей спокойно можна использовать ms0: (memory stick). sceIoOpen("ms0:/xxx/xxx/xxx.myownpictureformat",SCE_O_RDONLY,0777); sceIoLseek, sceIoRead, sceIoClose
Если в твоей реализации crt0 не кривой, тогда будут работать и fopen,fread,fwrite,fclose.

DXT1,DXT5 не нада использовать :)
1. они не такие как на PC , их нада постпроцессить
2. они тормознее чем даже RGBA
3. на PSP самый главный формат это 64x64x4 бита :) (история продолжаеться PS1->PS2->PSP ничего не поменялось:)))

Вот так :)
Пешите исчО

#2
10:47, 1 мар 2007

KVaks
Большое спасибо!
Ваш ответ многое прояснил.
Для меня остался неясным только вызов sceIoOpen(), мне нужно прописывать в коде полный путь к текстуре?
Могу я узнать полный путь к исполняемому файлу моей программы из ее кода?
Или необходимо ввести условность, что мое приложение будет находиться всегда в одной и той же папке в ms?
Для разработки это конечно же подойдет, но все же?

#3
13:36, 1 мар 2007

KmDm
оч просто!

ms0:/PSP_GAME/USRDIR/ дальше все ваше :)

также оно и на umd (PSP_GAME/USRDIR/ данные игры)

#4
0:26, 2 мар 2007

KVaks
> на PSP самый главный формат это 64x64x4 бита
Насколько я понял речь идет о том, что видеобуфер у нас 32 бит, а текстуры палитровые с индексами в 4 бит?
Если да, то где хранить палитру каждой текстуры, если они хранятся вместе как 32-битная текстура? И как выставляется эта палитра?
Сорри за обилие вопросов, отошлите почитать что-нибудь по теме) Сижу на forums.ps2dev.org, может просмотрел но пока не нашел инфы по данному вопросу.

#5
10:41, 2 мар 2007

KmDm
1. Видеобуффер не совсем 32бита :) там исчо есть 16бит к примеру (используеться очень широко)
2. Рассматривай видео память не как (супер-мего-закрыто-секретную видеопамять PC) а как обычную линейную память которая начинеться вполне себе с вменяемого адреса и ее можна спокойна адресовать (читать/писать)
  video_ram_ptr = (unsigned int*)(0x40000000 | (unsigned int)sceGeEdramGetAddr());
(0x40000000 - это тока режим кеширования)

соответственно хранить там можна что угодно, в свободных местах например народ вертекс буфера хранит, а если есть желание извращаться можешь и стек поинтер туда засунуть :))


Соотв. что raw picture data , что CLUT (palette) пихаешь куда хочешь (более того тесты показывали что медленней текстуры держать в видео чем в обычной памяти)
и при передачи тебе нада указать всего навсего какой формат , frame width,width,height, и адрем где raw data адрес где CLUT

.

#6
18:08, 5 мар 2007

при передачи тебе нада указать всего навсего какой формат , frame width,width,height, и адрем где raw data адрес где CLUT

А как осуществить передачу? sceGUTExImage2d() я так понял не работает с swizzled текстурами.
т.е. я понимаю, что swizzling - это часть toolchain'а и производится не в run-time, но в вызове sceGUTExImage2d()
отсутсвтует параметр адреса CLUT, отсюда я сделал вывод что для передачи юзается другая функция.. Или я что-то неправильно понимаю?

#7
18:53, 5 мар 2007

А вот нашел :)

       sceGuClutMode(GU_PSM_5650, 0, 0, 0); 
       sceGuClutLoad(8192, (void *)&PspCLUT);

Только я сейчас чего-то напрягся по поводу следующего: при каждом switch'е текстур мне нужно загружать CLUT?
Есть возможность выставлять ptr на CLUT?

#8
20:02, 5 мар 2007

KmDm

а он не загружаеться, он всегда береться с указанного адреса

#9
22:13, 5 мар 2007

о, круто. а называется load Ж)
пасибо огромное за потраченное время и проявленное  ко мне терпение
будем ковырять )

#10
10:55, 7 мар 2007

KmDm
оно всегда делаеться load , только этот load по DMA :)

consoledevФорум

Тема в архиве.