Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_pod_PSP_na_C__RUS.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.73 Mб
Скачать

Урок 4: Простейшие способы обработки изображений, глава 5

Мы практически завершили составление нашей программы о выводе изображения на экран. Это последняя часть четвертого урока. Если вы не читали части 1, 2, 3 и 4, то начните урок с начала, а не с конца.

Итак, добавляем приращение для x:

                              x += 32;                               y = 0;                     }

С помощью этого мы перемещаем горизонтальный заполнитель более чем на 32 пикселя (ширина нашего изображения). То есть отодвигаемся на один столбец. Затем мы приравняем заполнитель y к нулю, что позволяет ему стартовать с вершины столбца и перемещаться вниз. Теперь наше изображение растянуто. Но подождите, остался еще один этап! Сейчас «экран» сохранен в памяти. Так как намного быстрее записать в память, чем на экран. Все операции, проделанные нами с экраном, необходимо превратить в результат; такой процесс называется зеркальным отражением экрана.

                    flipScreen();           }

Функция flipScreen () также определена в graphics.h. Поэтому этим действием мы фактически обновляем экран.

И наконец, мы завершаем работу программы, позволяющую нам увидеть наше красивое творение и восхищаться сеткой изображения.

          sceKernelSleepThread();           return 0; }

Теперь у нас есть готовый main.c. Далее мы должны скомпилировать этот файл. Makefile\’у для этой программы требуются некоторые модификации:

TARGET = hello OBJS = main.o graphics.o framebuffer.o

CFLAGS = -O2 -G0 –Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS)

LIBDIR = LIBS = -lpspgu -lpng -lz –lm LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Image Example

PSPSDK=$(shell psp-config —pspsdk-path) include $(PSPSDK)/lib/build.mak

Перед вами стандартный Makefile, но с двумя особенностями. Во-первых, мы добавили graphics.o и framebuffer.o к строке OBJS. Мы используем их, так как они являются исходными файлами (graphics.c, и это использует framebuffer.c). Таким образом, мы сообщаем компилятору о том, что нам нужны эти скомпилированные файлы в нашей программе. Во-вторых, мы добавили LIBS (библиотеки), поменяли zlib на»-lz«, и libpng на«-lpng«. Кроме того, мы открыли доступ к аппаратному обеспечению машинной графики с помощью «-lpspgu» . После этого вставили математическую библиотеку (которая использует graphics.h) с помощью «-lm«. Теперь у вас имеется первая программа с изображениями. А сейчас выйдите и создайте более мощные приложения и игры, используя полученные знания!

Примечание: Убедитесь в том, что, когда вы помещаете EBOOT в папку PSP, вы также копируете файл изображения PNG и помещаете его в ту же самую папку, что и EBOOT.

Не забудьте подписаться на RSS нашего сайта (или хотя бы занести сайт в закладки в браузере), чтобы быть в курсе и не пропустить обновления нашего курса.

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

Урок 5: Новые методы программирования на psp, глава 1

Итак, мы создали среду для разработки, написали нашу первую программу, изучили некоторые методы программирования и занимались программированием изображений. Чем же мы займемся теперь? Вы находитесь на этой странице и, держу пари, не удивляетесь тому, что уже дошли до 5 урока. Мы будем улучшать наши навыки программирования (говоря «мы» я подразумеваю «вас») и познакомимся с расширенными понятиями.

Хотя «расширенный» — это довольно субъективно. Мы по-прежнему будем формировать основу программирования в С (Си), которая поможет вам создать более сложные приложения. По окончании данного урока вы должны будете знать, как «разогнать» PSP до его истинной скорости в 333 МГц, как вывести текст на экран (графический текст, а не текст отладки, использованные ранее) и как работают цвета в PSP.

Программу, которую мы собираемся создать в этом уроке, называется «backround changer». Мы собираемся научить пользователя выбирать цвет фона и создавать свой собственный подобно тому, как мы выводили цветовые изображения на экран.

Во-первых, у нас есть какой-то фон. В большинстве случаев люди имеют неправильное понятие о «разгоне» PSP. Из-за своих предубеждений «разгон» ассоциируется у них с тепловыми проблемами и повреждениями аппаратных средств. Но дело не только в PSP. В действительности производитель PSP поставляет неполную комплектацию с данным товаром. Есть несколько версий, почему Sony делает это. Одна их них заключается в том, что максимальный «разгон» быстро будет разряжать батарею, что неблагоприятно повлияет на популярность Sony (для нас, не беспокоящихся по этому поводу, вращение UMD диска забирает гораздо больше заряда батареи по сравнению с загрузкой карты памяти). По другой версии Sony хотел, чтобы разработчики написали оптимизированный код. И третья (на мой взгляд, более вероятная) состоит в следующем: они хотели позволить разработчикам использовать максимальную скорость тогда, когда выйдут более мощные игры. Так или иначе PSP обычно достигает 222 МГц. Если вам требуется большее количество заряда батареи для своих программ, то опция — «разгон». Программа, которую мы будем составлять, не нуждается в таком питании. Однако самое время рассказать об этом понятии. Итак, с этого момента мы начинаем составлять нашу программу. Вам необходимо загрузить данный zip-файл для этого урока. Вы можете скачать его здесь. Вы должны поместить main.c файл в ту же самую папку, в которую извлекаете файлы из zip-файла.

#include <pspkernel.h> #include <pspdisplay.h> #include <pspctrl.h> #include <stdio.h> #include <psppower.h> #include "graphics.h"

Принимая во внимание предыдущие уроки, вам все это должно быть знакомо. Единственное, что может показаться новым для вас, является включенный файл psppower.h. Данный файл содержит функции, которые мы будем использовать для того, чтобы изменить тактовую частоту PSP.

С помощью более знакомого кода:

PSP_MODULE_INFO("Background Changer", 0, 1, 1);

#define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16))

Помните, как в уроке 2 мы только упомянули об этой строке без подробного объяснения ее функционирования. Думаю, сейчас хороший момент для этого. Первый параметр – ваш идентификатор программы, как правило, это название вашего приложения. Второй параметр позволяет вам присваивать атрибуты. Для большинства ваших программ понадобится только 0, но если вы будете создавать более мощные приложения, то вам необходимо будет переключиться на «0×1000″. Третий параметр для основной версии, четвертый для вспомогательной версии. Они предназначены только для того, чтобы документировать номер версии вашей программы.

Теперь стандартные обратные вызовы:

/* Exit callback */ int exit_callback(int arg1, int arg2, void *common) {           sceKernelExitGame();           return 0; }

/* Callback thread */ int CallbackThread(SceSize args, void *argp) {           int cbid;

          cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);           sceKernelRegisterExitCallback(cbid);

          sceKernelSleepThreadCB();

          return 0; }

/* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) {           int thid = 0;

          thid = sceKernelCreateThread("update_thread", CallbackThread, 0×11, 0xFA0, 0, 0);           if(thid >= 0) {                     sceKernelStartThread(thid, 0, 0);           }

          return thid; }

На этом заканчивается часть установки в данном учебном руководстве. Смело переходим ко второй части данного урока.