通
过
GU
函数在自己的程序中添加(
png
)
图
像,我想
这应该
是
每
个人想要的。
下载本课Demo
首先我假 设 你已 经 安装了 cygwin ( 也可以不要 ) ,并且安装了 DevkitPro ,知道怎 样 生成 eboot.pbp 并且放入 psp 中运行,那就往下看。否 则 重新 阅读 前面的教程。也 许 你 还 要再修 炼 一下 C 或者 C++ 。
在正式 进 行工作前,我 们 先要安装一些 SVN 的新 库 文件。也 许 你要 问 SVN 是什 么 ,它是一个版本管理程序,适合 许 多人 开发 一个 项 目。 http://subversion.tigris.org/ 下 载 并安装它。我 们 需要使用 zlib 和 libpng 这 两个
库 。
运行 cygwin ,在窗口下 键 入
svn checkout svn://svn.pspdev.org/psp/trunk/zlib
得到如下 结 果:
PSP_EBOOT_SFO = PARAM.SFO
首先我假 设 你已 经 安装了 cygwin ( 也可以不要 ) ,并且安装了 DevkitPro ,知道怎 样 生成 eboot.pbp 并且放入 psp 中运行,那就往下看。否 则 重新 阅读 前面的教程。也 许 你 还 要再修 炼 一下 C 或者 C++ 。
在正式 进 行工作前,我 们 先要安装一些 SVN 的新 库 文件。也 许 你要 问 SVN 是什 么 ,它是一个版本管理程序,适合 许 多人 开发 一个 项 目。 http://subversion.tigris.org/ 下 载 并安装它。我 们 需要使用 zlib 和 libpng 这 两个
库 。
运行 cygwin ,在窗口下 键 入
svn checkout svn://svn.pspdev.org/psp/trunk/zlib
得到如下 结 果:
这时
在
cygwin/home/
的用
户
名目
录
中就会得到
zlib
文件
夹
键 入:
cd zlib
make
make install
得到如下 结 果:
键 入:
cd zlib
make
make install
得到如下 结 果:
继续
:
cd ..
svn checkout svn://svn.pspdev.org/psp/trunk/libpng
cd libpng
make
make install
cd ..
svn checkout svn://svn.pspdev.org/psp/trunk/libpng
cd libpng
make
make install
在
cygwin/usr/local/psp/lib
目
录
中就得到了
libz.a
和
libpng.a
rm -Rf zlib
rm -Rf libpng
rm -Rf zlib
rm -Rf libpng
(
其
实
所有的操作在
dos
窗口下同
样
可以,可以不用
cygwin)
现
在可以
开
始了,首先下
载
this
,
接着往下看:
把
framebuffer.h framebuffer.c graphics.h graphics.c ourimage.png 解 压 到当前目 录
接着新建 main.c 或者 main.cpp (把前面文件后 缀 也改 为 cpp )加入以下代 码 :
把
framebuffer.h framebuffer.c graphics.h graphics.c ourimage.png 解 压 到当前目 录
接着新建 main.c 或者 main.cpp (把前面文件后 缀 也改 为 cpp )加入以下代 码 :
/*
My Image Display Program
Author: Brad Dwyer
翻 译 : Fan;2006,1,1
Date: 12/28/2005
Thanks to Psilocybeing for the base code.
*/
My Image Display Program
Author: Brad Dwyer
翻 译 : Fan;2006,1,1
Date: 12/28/2005
Thanks to Psilocybeing for the base code.
*/
头
文件如下:
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <stdio.h>
#include <png.h>
#include "graphics.h"
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <stdio.h>
#include <png.h>
#include "graphics.h"
/* Define the module info section */
PSP_MODULE_INFO("first_psp", 0, 1, 1);
PSP_MODULE_INFO("first_psp", 0, 1, 1);
/* Define the main thread's attribute value (optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
/* Define printf, just to make typing easier */
#define printf pspDebugScreenPrintf
#define printf pspDebugScreenPrintf
void dump_threadstatus(void);
/* Exit callback */
int exit_callback(void)
{
sceKernelExitGame();
return 0;
}
int exit_callback(void)
{
sceKernelExitGame();
return 0;
}
/* Callback thread */
void CallbackThread(void *arg)
{
int cbid;
// printf("/nCallback Thread Status:/n");
cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
}
void CallbackThread(void *arg)
{
int cbid;
// printf("/nCallback Thread Status:/n");
cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
int thid = 0;
int SetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", (SceKernelThreadEntry)CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
}
以上代
码
主要
实现
程序的退出
线
程
int main(int argc,char *argv[])
{
char path[255];
strcpy(path,argv[0]); // 获 取路径
*(path+strlen(path)-9)='/0'; // 之所以 -9 是去掉末尾 eboot.pbp 字符串。
int main(int argc,char *argv[])
{
char path[255];
strcpy(path,argv[0]); // 获 取路径
*(path+strlen(path)-9)='/0'; // 之所以 -9 是去掉末尾 eboot.pbp 字符串。
SetupCallbacks();
pspDebugScreenInit();
printf("/npath=%s/n",path); // 显 示路径。
printf("/npath=%s/n",path); // 显 示路径。
char buffer[200];
Image* ourImage; // 以下代 码 都封装在 graphics.h 和 png.h 中
initGraphics();
sprintf(buffer, "ourImage.png");
ourImage = loadImage(buffer);
printf("/nbuffer=%s/n",buffer);
Image* ourImage; // 以下代 码 都封装在 graphics.h 和 png.h 中
initGraphics();
sprintf(buffer, "ourImage.png");
ourImage = loadImage(buffer);
printf("/nbuffer=%s/n",buffer);
if (!ourImage) {
//Image load failed
printf("Image load failed!/n");
} else {
int x = 0;
int y = 0;
sceDisplayWaitVblankStart(); // 等待屏幕垂直 扫 描 结 束,可以去掉它 试 一下 结 果。
while (x < 480) {
while (y < 272) {
blitAlphaImageToScreen(0 ,0 ,32 , 32, ourImage, x, y);
y += 32;
}
x += 32;
y = 0;
}
flipScreen(); // 翻 转 屏幕 缓 冲区,否 则 无法 显 示更新的内容
}
//Image load failed
printf("Image load failed!/n");
} else {
int x = 0;
int y = 0;
sceDisplayWaitVblankStart(); // 等待屏幕垂直 扫 描 结 束,可以去掉它 试 一下 结 果。
while (x < 480) {
while (y < 272) {
blitAlphaImageToScreen(0 ,0 ,32 , 32, ourImage, x, y);
y += 32;
}
x += 32;
y = 0;
}
flipScreen(); // 翻 转 屏幕 缓 冲区,否 则 无法 显 示更新的内容
}
sceKernelSleepThread();
return 0;
}
主程序完成。
下面是 makefile 文件的 设 置:
TARGET = First_Psp
OBJS = main.o framebuffer.o graphics.o // 目 标 文件
return 0;
}
主程序完成。
下面是 makefile 文件的 设 置:
TARGET = First_Psp
OBJS = main.o framebuffer.o graphics.o // 目 标 文件
INCDIR =
CFLAGS = -O3 -G0 -Wall -mgp32 -mlong32 -g // 对 于大的 项 目可以先使用 -O0 或者 -O1 调试 。
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
CFLAGS = -O3 -G0 -Wall -mgp32 -mlong32 -g // 对 于大的 项 目可以先使用 -O0 或者 -O1 调试 。
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS =
LIBS=-lpsppower -lpspgu -lpng -lz -lm // 连 接 库
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = first_game
LDFLAGS =
LIBS=-lpsppower -lpspgu -lpng -lz -lm // 连 接 库
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = first_game
PSP_EBOOT_ICON = NULL
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG = NULL
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG = NULL
PSP_EBOOT_SFO = PARAM.SFO
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
最后一 步 , 键 入:
make
如果没有 错误 的 话 ,当前 项 目目 录 会生成 eboot.pbp
将其 转换 后和 ourimage.png 放入 psp 测试 。你将得到一个充 满 全屏幕的网格 图 案
这 个例子 显 示部分用到了 sceGu 有 关 的函数,以后我会 专门 将它 们详细 介 绍 。要想深入 psp 编 程就要 对 其内核函数熟 练 运用, 显 然 这 个例子不具 备这 个功能。
原文地址如下:
http://www.scriptscribbler.com/psp/tutorials/lesson04.htm
include $(PSPSDK)/lib/build.mak
最后一 步 , 键 入:
make
如果没有 错误 的 话 ,当前 项 目目 录 会生成 eboot.pbp
将其 转换 后和 ourimage.png 放入 psp 测试 。你将得到一个充 满 全屏幕的网格 图 案
这 个例子 显 示部分用到了 sceGu 有 关 的函数,以后我会 专门 将它 们详细 介 绍 。要想深入 psp 编 程就要 对 其内核函数熟 练 运用, 显 然 这 个例子不具 备这 个功能。
原文地址如下:
http://www.scriptscribbler.com/psp/tutorials/lesson04.htm