mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 00:56:40 -04:00
Vita: Launcher at least renders now
This commit is contained in:
parent
a9535fbd3f
commit
8ec22586fb
@ -1,5 +1,5 @@
|
|||||||
PROJECT_TITLE := ClassiCube
|
PROJECT_TITLE := ClassiCube
|
||||||
PROJECT_TITLEID := VSDK00007
|
PROJECT_TITLEID := CUBE00200
|
||||||
TARGET := ClassiCube-vita
|
TARGET := ClassiCube-vita
|
||||||
|
|
||||||
BUILD_DIR := build
|
BUILD_DIR := build
|
||||||
@ -21,12 +21,7 @@ $(BUILD_DIR):
|
|||||||
mkdir -p $(BUILD_DIR)
|
mkdir -p $(BUILD_DIR)
|
||||||
|
|
||||||
$(TARGET).vpk: eboot.bin param.sfo
|
$(TARGET).vpk: eboot.bin param.sfo
|
||||||
vita-pack-vpk -s param.sfo -b eboot.bin \
|
vita-pack-vpk -s param.sfo -b eboot.bin $(TARGET).vpk
|
||||||
--add sce_sys/icon0.png=sce_sys/icon0.png \
|
|
||||||
--add sce_sys/livearea/contents/bg.png=sce_sys/livearea/contents/bg.png \
|
|
||||||
--add sce_sys/livearea/contents/startup.png=sce_sys/livearea/contents/startup.png \
|
|
||||||
--add sce_sys/livearea/contents/template.xml=sce_sys/livearea/contents/template.xml \
|
|
||||||
$(TARGET).vpk
|
|
||||||
|
|
||||||
eboot.bin: $(TARGET).velf
|
eboot.bin: $(TARGET).velf
|
||||||
vita-make-fself $(TARGET).velf eboot.bin
|
vita-make-fself $(TARGET).velf eboot.bin
|
||||||
@ -45,4 +40,4 @@ $(BUILD_DIR)/%.o : src/%.c
|
|||||||
arm-vita-eabi-gcc -c $(CFLAGS) -o $@ $<
|
arm-vita-eabi-gcc -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm $(PROJECT).velf $(PROJECT).elf $(PROJECT).vpk param.sfo eboot.bin $(OBJS)
|
rm $(TARGET).velf $(TARGET).elf $(TARGET).vpk param.sfo eboot.bin $(OBJS)
|
||||||
|
@ -117,30 +117,42 @@ void Window_AllocFramebuffer(struct Bitmap* bmp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define ALIGNUP(size, a) (((size) + ((a) - 1)) & ~((a) - 1))
|
#define ALIGNUP(size, a) (((size) + ((a) - 1)) & ~((a) - 1))
|
||||||
|
|
||||||
|
static void AllocGPUMemory(int size, SceUID* ret_uid, void** ret_mem) {
|
||||||
|
SceUID uid;
|
||||||
|
void* mem;
|
||||||
|
size = ALIGNUP(size, 256 * 1024);
|
||||||
|
|
||||||
|
// https://wiki.henkaku.xyz/vita/SceSysmem
|
||||||
|
uid = sceKernelAllocMemBlock("CC Framebuffer", SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, size, NULL);
|
||||||
|
if (uid < 0) Logger_Abort2(uid, "Failed to allocate 2D framebuffer");
|
||||||
|
|
||||||
|
int res1 = sceKernelGetMemBlockBase(uid, &mem);
|
||||||
|
if (res1 < 0) Logger_Abort2(res1, "Failed to get base of 2D framebuffer");
|
||||||
|
|
||||||
|
int res2 = sceGxmMapMemory(mem, size, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE);
|
||||||
|
if (res1 < 0) Logger_Abort2(res2, "Failed to map framebuffer for GPU usage");
|
||||||
|
// https://wiki.henkaku.xyz/vita/GPU
|
||||||
|
|
||||||
|
*ret_uid = uid;
|
||||||
|
*ret_mem = mem;
|
||||||
|
}
|
||||||
|
|
||||||
void Window_DrawFramebuffer(Rect2D r) {
|
void Window_DrawFramebuffer(Rect2D r) {
|
||||||
static SceUID fb_uid;
|
static SceUID fb_uid;
|
||||||
static void* fb;
|
static void* fb;
|
||||||
|
|
||||||
// TODO: Purge when closing the 2D window, so more memory for 3D ClassiCube
|
// TODO: Purge when closing the 2D window, so more memory for 3D ClassiCube
|
||||||
if (!fb) {
|
// TODO: Use framebuffers directly instead of our own internal framebuffer too..
|
||||||
int size = ALIGNUP(4 * BUFFER_WIDTH * SCREEN_HEIGHT, 256 * 1024);
|
if (!fb)
|
||||||
// https://wiki.henkaku.xyz/vita/SceSysmem
|
AllocGPUMemory(4 * SCREEN_WIDTH * SCREEN_HEIGHT, &fb_uid, &fb);
|
||||||
fb_uid = sceKernelAllocMemBlock("CC Framebuffer", SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, size, NULL);
|
|
||||||
if (fb_uid < 0) Logger_Abort2(fb_uid, "Failed to allocate 2D framebuffer");
|
|
||||||
|
|
||||||
int res1 = sceKernelGetMemBlockBase(fb_uid, &fb);
|
|
||||||
if (res1 < 0) Logger_Abort2(res1, "Failed to get base of 2D framebuffer");
|
|
||||||
|
|
||||||
int res2 = sceGxmMapMemory(fb, size, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE);
|
|
||||||
if (res1 < 0) Logger_Abort2(res2, "Failed to map framebuffer for GPU usage");
|
|
||||||
// https://wiki.henkaku.xyz/vita/GPU
|
|
||||||
}
|
|
||||||
|
|
||||||
sceDisplayWaitVblankStart();
|
sceDisplayWaitVblankStart();
|
||||||
|
|
||||||
SceDisplayFrameBuf framebuf = { 0 };
|
SceDisplayFrameBuf framebuf = { 0 };
|
||||||
framebuf.size = sizeof(SceDisplayFrameBuf);
|
framebuf.size = sizeof(SceDisplayFrameBuf);
|
||||||
framebuf.base = fb;
|
framebuf.base = fb;
|
||||||
framebuf.pitch = BUFFER_WIDTH * 4;
|
framebuf.pitch = SCREEN_WIDTH;
|
||||||
framebuf.pixelformat = SCE_DISPLAY_PIXELFORMAT_A8B8G8R8;
|
framebuf.pixelformat = SCE_DISPLAY_PIXELFORMAT_A8B8G8R8;
|
||||||
framebuf.width = SCREEN_WIDTH;
|
framebuf.width = SCREEN_WIDTH;
|
||||||
framebuf.height = SCREEN_HEIGHT;
|
framebuf.height = SCREEN_HEIGHT;
|
||||||
@ -152,7 +164,7 @@ void Window_DrawFramebuffer(Rect2D r) {
|
|||||||
|
|
||||||
for (int y = r.Y; y < r.Y + r.Height; y++)
|
for (int y = r.Y; y < r.Y + r.Height; y++)
|
||||||
{
|
{
|
||||||
Mem_Copy(dst + y * BUFFER_WIDTH, src + y * fb_bmp.width, r.Width * 4);
|
Mem_Copy(dst + y * SCREEN_WIDTH, src + y * fb_bmp.width, r.Width * 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,23 +172,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) {
|
|||||||
Mem_Free(bmp->scan0);
|
Mem_Free(bmp->scan0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void Window_AllocFramebuffer(struct Bitmap* bmp) {
|
|
||||||
void* fb = sceGeEdramGetAddr();
|
|
||||||
bmp->scan0 = fb;
|
|
||||||
bmp->width = BUFFER_WIDTH;
|
|
||||||
bmp->height = SCREEN_HEIGHT;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window_DrawFramebuffer(Rect2D r) {
|
|
||||||
//sceDisplayWaitVblankStart();
|
|
||||||
//sceDisplaySetMode(0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
||||||
//sceDisplaySetFrameBuf(sceGeEdramGetAddr(), BUFFER_WIDTH, PSP_DISPLAY_PIXEL_FORMAT_8888, PSP_DISPLAY_SETBUF_IMMEDIATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window_FreeFramebuffer(struct Bitmap* bmp) {
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*------------------------------------------------------Soft keyboard------------------------------------------------------*
|
*------------------------------------------------------Soft keyboard------------------------------------------------------*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user