Цитата:
P.S. Раздел начал активно двигаЦЦо! |
с огл щас тока разбираюсь. но по идее сони от него не могло уйти далеко... может модель это матрица типа установки вида проектирования в огл?
|
И ещё вопрос тогда. Вот простейшее GU-приложение:
Код:
#include <pspkernel.h> 1) Как я понял, работает GU всегда на основе дисплейных списков (как в OpenGL). И для списка нужно явно указывать доступный объём памяти да ещё и с выравниванием по параграфу. Почему-то все задают размер 262144 - это почему так? И вообще, сколько на борту видеопамяти? 2) Почему буфер глубины 16-ти битный? Точность же пострадает... 3) Какой смысл в виртуальном экране 4096x4096, если отображать можно 480x272 максимум и при этом переключать страницы sceGuSwapBuffers(). Зачем же тогда такой экран? Хм... Какой в нём смысл? Единственно, реализовывать полноэкранное сглаживание можно используя полный 4096x4096, но примимо ли это на PSP? 4) Нулевой байт цвета - это альфа-канал? 5) Почему примитивы можно создавать либо глобально в программе, либо распределяя память дисплейного списка командой float __attribute__((aligned(16))) *vertex=(float*)sceGuGetMemory(9*sizeof(float)), но нельзя выделить память типа float vertex[9]. У меня последний вариант не работает никак. 6) Зачем придумано обрезание порта просмотра командами sceGuScissor(0,0,480,272); sceGuEnable(GU_SCISSOR_TEST); 7) Для чего нужна команда sceGuDisplay(GU_TRUE); Не понимаю логики. Зачем включать то, что уже включено? Хм... Вот такие вот пироги... я хорошо знаком с OpenGL, но вот GU меня местами удивляет неимоверно. :) |
Вложений: 1
Цитата:
|
Ээээ. мастер ты это. мыж тут нубы :)а ты к нам будто мы соневские доки читали и знаем...
видеопамяти на борту 2 метра афайк. |
Жалко... придётся выяснять опытным путём... Увы, в русском сегменте инета никакой вразумительной информации я не нашёл. А с английским у меня некоторые трудности - я немецкий учил, а английский исключительно "опытным путём". :) Ну ничего, эксперименты покажут, что вся эта тарабарщина из себя представляет. :)
добавлено через 4 часа 17 минут 1) Однако, оказывается, что альфа-канал в цвете идёт первым, а вот дальше идут уже b g и r. 2) Инициализацию локальных и глобальных массивов вершин примитивов можно делать только до sceGuInit. После sceGuInit инициализацию можно делать только через выделенный дисплею блок памяти, через sceGuGetMemory. 3) Чтобы каждую точку примитива раскрасить в свой цвет или чтобы назначить ей точку текстуры,нормали и т.д. нужно объединять флаги команды sceGumDrawArray, например, sceGumDrawArray(GU_TRIANGLES,GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D,3,0, sVertex); Ну а с остальным пока экспериментирую... |
Вложений: 1
Вот что ещё выяснил:
1) При задании текстур данные идут как RGBA (т.е. порядок не такой, как при задании цвета! в sceGuColor) 2) Если синхронизацию по sceDisplayWaitVblankStart() ставить после sceGuSwapBuffers(), то вверху экрана будет полоса, где вывод производиться не будет - отстаём от развёртки? :) 3) Ширина и высота текстуры должны быть степенью 2 и ширина должна быть выровнена по параграфу (16 байт). Вот код моей библиотеки для работы со спрайтами с использованием GU: Код:
#ifndef CSPRITE_H_INCLUDED |
А какой смысл в пикселе интресно порядок менять?
|
Хороший вопрос... Наверное, из целей совместимости с OpenGL. А вообще, картинки всякие (TGA и BMP и другие) тоже порядок цветов меняют. Я уже и не помню, зачем им это надо было... Но вообще, это не очень удобно лично мне. :)
добавлено через 1 минуту Ах да, я сказал несколько неоднозначно: "Однако, оказывается, что альфа-канал в цвете идёт первым, а вот дальше идут уже b g и r. " Т.е. раскладка битовая такая: abgr. А для текстуры или спрайта раскладка: rgba |
может во время какихто прередач(внутре конвеера или из памяти в гу...) удобно чтобы байты задом наперёд шли...хых. мистика :)
однако ценное наблюдение. спасибо. |
Да нет, вроде конвейеру-то как раз всё равно... Может, там для прямого вывода загруженных картинок сделано? То есть, читаем, скажем, bmp и тут же выводим простым копированием в видеопамять. Хотя вряд ли. Надо поискать смысл инверсии порядка цветов.
|
Отправил GU текстурку 480x272 по-моему, а по его представлениям 512x512. Ну что можно сказать... либо я что-то сделал не так, либо он с такими размерами не работает. Экран мерцает, по нему идут полосы, хотя на заднем фоне текстуру видно. Увеличивал размер памяти дисплейного списка - не помогло. А с маленькими 64x64 без проблем всё идёт. Наверное, 512 для него слишком жирно...
|
Вложений: 1
А вот GU-приложение "пасьянс косынка". Пока - прототип. То есть, играть можно (аналоговый джойстик и кнопка "крестик"). Это на нём текстуру зелёного сукна вместо 480x272 мне пришлось заменить маленький кусочек. :)
|
Занятно. Попытался вывести несколько раз относительно крупный спрайт (256x64). Опять глюки. Экран мерцает, картинка разваливается. Причём, один спрайт выводится. Два - уже нет. Такое впечатление, что Gu массив данных спрайта зачем-то перекидывает в память списка и заданных 256 кБ не хватает. Но если выделить в 10 раз больше, тоже работать не начинает. Если выводить один спрайт в одном дисплейном списке, а второй во втором, то тоже ничего не выходит, либо я чего-то не так делаю.
Вот сейчас сделал спрайты 128x64 и выделил под список 512 кБ. Пока работает. Интересно, если я ещё спрайтов добавлю, оно продолжит работать... хм.. |
А всё-таки непонятно, как же выглядит адресное пространство PSP. Я попытался снять скриншот в моём пасьянсе копированием области, заданной GU как видеобуфер (т.е. начинающейся с 0 (!) - обычно-то для графических приложений не для GU задавался адрес 64 мБ)
Код:
<...> |
Даю справку. по адресам:
http://wiki.ps2dev.org/psp:memory_map Надеюсь это то. на слимке чутка отличается но не критично. чуть пошире куски основной памяти и безкешевой области. думаю начинать копировать с 0 бесполезно, для неё это ркивой указатель и она сразу его в топку. АФАЙК начинать надо с 64Кб. Также советую заглянуть в папку с семплами, там был пример как гулять по памяти, делать карту и как дампить всякое разное. |
Цитата:
|
Вопрос без официальных доков имхо не отвечаем :) те как факт мы это знаем. а вот почему? ну хз. так уж сделано.
|
А ещё никто у Sony оригинальный SKD не спиратил? :)
|
Пока нет :( по крайней мере в торентах не ищутся.
|
Текущее время: 18:38. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.