static bool vita_get_current_sw_framebuffer(void *data, struct retro_framebuffer *framebuffer) { vita_video_t *vita = (vita_video_t*)data; if (!vita->texture || vita->width != framebuffer->width || vita->height != framebuffer->height) { if(vita->texture) { vita2d_wait_rendering_done(); vita2d_free_texture(vita->texture); vita->texture = NULL; } vita->width = framebuffer->width; vita->height = framebuffer->height; vita->texture = vita2d_create_empty_texture_format( vita->width, vita->height, vita->format); vita2d_texture_set_filters(vita->texture, vita->tex_filter,vita->tex_filter); } framebuffer->data = vita2d_texture_get_datap(vita->texture); framebuffer->pitch = vita2d_texture_get_stride(vita->texture); framebuffer->format = vita->rgb32 ? RETRO_PIXEL_FORMAT_XRGB8888 : RETRO_PIXEL_FORMAT_RGB565; framebuffer->memory_flags = 0; return true; }
static void vita2d_free_overlay(vita_video_t *vita) { unsigned i; vita2d_wait_rendering_done(); for (i = 0; i < vita->overlays; i++) vita2d_free_texture(vita->overlay[i].tex); free(vita->overlay); vita->overlay = NULL; vita->overlays = 0; }
static void vita_unload_texture(void *data, uintptr_t handle) { struct vita2d_texture *texture = (struct vita2d_texture*)handle; if (!texture) return; /* TODO: We really want to defer this deletion instead, * but this will do for now. */ vita2d_wait_rendering_done(); vita2d_free_texture(texture); //free(texture); }
void VID_Update (vrect_t *rects) { if (fixpalette > 0){ Cvar_SetValue ("v_gamma", fixpalette); fixpalette = 0; } vita2d_start_drawing(); vita2d_draw_texture_scale(tex_buffer, 0, 0, rend_scale, rend_scale); vita2d_end_drawing(); if (isKeyboard) vita2d_common_dialog_update(); vita2d_wait_rendering_done(); vita2d_swap_buffers(); if (vid_vsync.value) sceDisplayWaitVblankStart(); }
void Psp2Ui::UpdateDisplay() { vita2d_start_drawing(); vita2d_clear_screen(); switch (zoom_state){ case 0: // 640x480 vita2d_draw_texture_scale(main_texture, 160, 32, 2.0, 2.0); break; case 1: // 725x544 vita2d_draw_texture_scale(main_texture, 117, 0, 2.266, 2.266); break; case 2: // 960x544 vita2d_draw_texture_scale(main_texture, 0, 0, 3, 2.266); break; } vita2d_end_drawing(); vita2d_wait_rendering_done(); vita2d_swap_buffers(); }
static int renderThread(unsigned int args, void* arg){ for (;;){ sceKernelWaitSema(GPU_Mutex, 1, NULL); memcpy(vita2d_texture_get_datap(gpu_texture), vita2d_texture_get_datap(next_texture), vita2d_texture_get_stride(gpu_texture)*240); sceKernelSignalSema(GPU_Mutex, 1); sceKernelWaitSema(GPU_Cleanup_Mutex, 1, NULL); if (main_texture == NULL) sceKernelExitDeleteThread(0); // Exit procedure vita2d_start_drawing(); if (set_shader){ Output::Post("Shader set to %s.",shader_names[in_use_shader]); set_shader = false; vita2d_texture_set_program(shaders[in_use_shader]->vertexProgram, shaders[in_use_shader]->fragmentProgram); vita2d_texture_set_wvp(shaders[in_use_shader]->wvpParam); vita2d_texture_set_vertexInput(&shaders[in_use_shader]->vertexInput); vita2d_texture_set_fragmentInput(&shaders[in_use_shader]->fragmentInput); } vita2d_clear_screen(); switch (zoom_state){ case 0: // 640x480 vita2d_draw_texture_scale(gpu_texture, 160, 32, 2.0, 2.0); break; case 1: // 725x544 vita2d_draw_texture_scale(gpu_texture, 117, 0, 2.266, 2.266); break; case 2: // 960x544 vita2d_draw_texture_scale(gpu_texture, 0, 0, 3, 2.266); break; } vita2d_end_drawing(); vita2d_wait_rendering_done(); vita2d_swap_buffers(); sceKernelSignalSema(GPU_Cleanup_Mutex, 1); } }
void MOD_SelectModMenu(char *basedir){ SceCtrlData pad, oldpad; sceCtrlPeekBufferPositive(0, &pad, 1); // Ch0wW: Enable the mod menu once the R trigger is hold on startup. if (!(pad.buttons & SCE_CTRL_RTRIGGER)) { // Reading current used mod char cur_mod[64]; modname = malloc(64); FILE* f; if ((f = fopen( va("%s/%s", basedir, MOD_FILE), "r")) != NULL) { char tmp[256]; fseek(f, 0, SEEK_END); int len = ftell(f); fseek(f, 0, SEEK_SET); fread(tmp, 1, len, f); fclose(f); tmp[len] = 0; sprintf(modname, "%s", tmp); } else modname = NULL; return; } // Initializing empty ModList ModsList* mods = NULL; int i = 0; int max_idx = -1; // Scanning main folder in search of mods int dd = sceIoDopen(basedir); SceIoDirent entry; int res; while (sceIoDread(dd, &entry) > 0){ if (SCE_S_ISDIR(entry.d_stat.st_mode)){ if (CheckForMod( va("%s/%s", basedir, entry.d_name))){ mods = addMod(entry.d_name, mods); max_idx++; } } } sceIoDclose(dd); // Reading current used mod char cur_mod[64]; modname = malloc(64); FILE* f; if ((f = fopen(va("%s/%s", basedir, MOD_FILE), "r")) != NULL) { char tmp[256]; fseek(f, 0, SEEK_END); int len = ftell(f); fseek(f, 0, SEEK_SET); fread(tmp, 1, len, f); fclose(f); tmp[len] = 0; sprintf(modname, "%s", tmp); sprintf(cur_mod, "Current in use mod: %s - Press START to launch vitaQuake core", tmp); }else strcpy(cur_mod,"Current in use mod: id1 - Press START to launch vitaQuake core"); // Initializing graphics stuffs vita2d_set_clear_color(RGBA8(0x00, 0x00, 0x00, 0xFF)); vita2d_pgf* debug_font = vita2d_load_default_pgf(); uint32_t white = RGBA8(0xFF, 0xFF, 0xFF, 0xFF); uint32_t green = RGBA8(0x00, 0xFF, 0x00, 0xFF); uint32_t red = RGBA8(0xFF, 0x00, 0x00, 0xFF); // Main loop while (max_idx >= 0){ vita2d_start_drawing(); vita2d_clear_screen(); vita2d_pgf_draw_text(debug_font, 2, 20, red, 1.0, cur_mod); // Drawing menu int y = 40; int d = 0; ModsList* ptr = mods; while (ptr != NULL && y < 540){ uint32_t color = white; if (d++ == i) color = green; vita2d_pgf_draw_text(debug_font, 2, y, color, 1.0, ptr->name); ptr = ptr->next; y += 20; } // Controls checking sceCtrlPeekBufferPositive(0, &pad, 1); if ((pad.buttons & SCE_CTRL_CROSS) && (!(oldpad.buttons & SCE_CTRL_CROSS))){ int z = 0; ModsList* tmp = mods; while (z < i){ tmp = tmp->next; z++; } sprintf(cur_mod,"Current in use mod: %s - Press START to launch vitaQuake core", tmp->name); if (!strcmp(tmp->name, "id1")) { sceIoRemove( va("%s/%s", basedir, MOD_FILE) ); modname = NULL; } else{ f = fopen(va("%s/%s", basedir, MOD_FILE), "w"); fwrite(tmp->name,1,strlen(tmp->name),f); fclose(f); strcpy(modname, tmp->name); // Refresh the mod directory. } }else if ((pad.buttons & SCE_CTRL_UP) && (!(oldpad.buttons & SCE_CTRL_UP))){ i--; if (i < 0) i = max_idx; }else if ((pad.buttons & SCE_CTRL_DOWN) && (!(oldpad.buttons & SCE_CTRL_DOWN))){ i++; if (i > max_idx) i = 0; }else if (pad.buttons & SCE_CTRL_START) break; oldpad = pad; vita2d_end_drawing(); vita2d_wait_rendering_done(); vita2d_swap_buffers(); } // Freeing stuffs ModsList* tmp = mods; ModsList* tmp2; while (tmp != NULL){ tmp2 = tmp->next; free(tmp); tmp = tmp2; } return; }