|
@@ -20,11 +20,12 @@
|
|
*/
|
|
*/
|
|
#include "../../SDL_internal.h"
|
|
#include "../../SDL_internal.h"
|
|
|
|
|
|
-#if SDL_VIDEO_DRIVER_VITA && SDL_VIDEO_VITA_PVR
|
|
|
|
|
|
+#if SDL_VIDEO_DRIVER_VITA && SDL_VIDEO_VITA_PVR && SDL_VIDEO_VITA_PVR_OGL
|
|
#include <stdlib.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <string.h>
|
|
#include <psp2/kernel/modulemgr.h>
|
|
#include <psp2/kernel/modulemgr.h>
|
|
#include <gpu_es4/psp2_pvr_hint.h>
|
|
#include <gpu_es4/psp2_pvr_hint.h>
|
|
|
|
+#include <gl4esinit.h>
|
|
|
|
|
|
#include "SDL_error.h"
|
|
#include "SDL_error.h"
|
|
#include "SDL_log.h"
|
|
#include "SDL_log.h"
|
|
@@ -34,6 +35,16 @@
|
|
|
|
|
|
#define MAX_PATH 256 // vita limits are somehow wrong
|
|
#define MAX_PATH 256 // vita limits are somehow wrong
|
|
|
|
|
|
|
|
+/* Defaults */
|
|
|
|
+int FB_WIDTH = 960;
|
|
|
|
+int FB_HEIGHT = 544;
|
|
|
|
+
|
|
|
|
+void getFBSize(int *width, int *height)
|
|
|
|
+{
|
|
|
|
+ *width = FB_WIDTH;
|
|
|
|
+ *height = FB_HEIGHT;
|
|
|
|
+}
|
|
|
|
+
|
|
int
|
|
int
|
|
VITA_GL_LoadLibrary(_THIS, const char *path)
|
|
VITA_GL_LoadLibrary(_THIS, const char *path)
|
|
{
|
|
{
|
|
@@ -53,6 +64,9 @@ VITA_GL_LoadLibrary(_THIS, const char *path)
|
|
sceKernelLoadStartModule("vs0:sys/external/libfios2.suprx", 0, NULL, 0, NULL, NULL);
|
|
sceKernelLoadStartModule("vs0:sys/external/libfios2.suprx", 0, NULL, 0, NULL, NULL);
|
|
sceKernelLoadStartModule("vs0:sys/external/libc.suprx", 0, NULL, 0, NULL, NULL);
|
|
sceKernelLoadStartModule("vs0:sys/external/libc.suprx", 0, NULL, 0, NULL, NULL);
|
|
|
|
|
|
|
|
+ SDL_snprintf(target_path, MAX_PATH, "%s/%s", default_path, "libGL.suprx");
|
|
|
|
+ sceKernelLoadStartModule(target_path, 0, NULL, 0, NULL, NULL);
|
|
|
|
+
|
|
SDL_snprintf(target_path, MAX_PATH, "%s/%s", default_path, "libgpu_es4_ext.suprx");
|
|
SDL_snprintf(target_path, MAX_PATH, "%s/%s", default_path, "libgpu_es4_ext.suprx");
|
|
sceKernelLoadStartModule(target_path, 0, NULL, 0, NULL, NULL);
|
|
sceKernelLoadStartModule(target_path, 0, NULL, 0, NULL, NULL);
|
|
|
|
|
|
@@ -74,30 +88,45 @@ VITA_GL_LoadLibrary(_THIS, const char *path)
|
|
SDL_GLContext
|
|
SDL_GLContext
|
|
VITA_GL_CreateContext(_THIS, SDL_Window * window)
|
|
VITA_GL_CreateContext(_THIS, SDL_Window * window)
|
|
{
|
|
{
|
|
- return SDL_EGL_CreateContext(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
|
|
|
|
-}
|
|
|
|
|
|
+ char gl_version[3];
|
|
|
|
+ SDL_GLContext context = NULL;
|
|
|
|
+ int temp_major = _this->gl_config.major_version;
|
|
|
|
+ int temp_minor = _this->gl_config.minor_version;
|
|
|
|
+ int temp_profile = _this->gl_config.profile_mask;
|
|
|
|
|
|
-int
|
|
|
|
-VITA_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
|
|
|
|
-{
|
|
|
|
- if (window && context) {
|
|
|
|
- return SDL_EGL_MakeCurrent(_this, ((SDL_WindowData *) window->driverdata)->egl_surface, context);
|
|
|
|
- } else {
|
|
|
|
- return SDL_EGL_MakeCurrent(_this, NULL, NULL);
|
|
|
|
|
|
+ /* Set version to 2.1 and PROFILE to ES */
|
|
|
|
+ _this->gl_config.major_version = 2;
|
|
|
|
+ _this->gl_config.minor_version = 1;
|
|
|
|
+ _this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
|
|
|
|
+
|
|
|
|
+ context = SDL_EGL_CreateContext(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
|
|
|
|
+
|
|
|
|
+ if (context != NULL)
|
|
|
|
+ {
|
|
|
|
+ FB_WIDTH = window->w;
|
|
|
|
+ FB_HEIGHT = window->h;
|
|
|
|
+ set_getprocaddress((void *(*)(const char *))eglGetProcAddress);
|
|
|
|
+ set_getmainfbsize(getFBSize);
|
|
|
|
+ SDL_snprintf(gl_version, 3, "%d%d", temp_major, temp_minor);
|
|
|
|
+ gl4es_setenv("LIBGL_NOTEXRECT", "1", 1); /* Currently broken in driver */
|
|
|
|
+ gl4es_setenv("LIBGL_GL", gl_version, 1);
|
|
|
|
+ initialize_gl4es();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /* Restore gl_config */
|
|
|
|
+ _this->gl_config.major_version = temp_major;
|
|
|
|
+ _this->gl_config.minor_version = temp_minor;
|
|
|
|
+ _this->gl_config.profile_mask = temp_profile;
|
|
|
|
+
|
|
|
|
+ return context;
|
|
}
|
|
}
|
|
|
|
|
|
-int
|
|
|
|
-VITA_GL_SwapWindow(_THIS, SDL_Window * window)
|
|
|
|
|
|
+void *
|
|
|
|
+VITA_GL_GetProcAddress(_THIS, const char *proc)
|
|
{
|
|
{
|
|
- SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
|
|
|
|
- if (videodata->ime_active) {
|
|
|
|
- sceImeUpdate();
|
|
|
|
- }
|
|
|
|
- return SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
|
|
|
|
|
|
+ return gl4es_GetProcAddress(proc);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
#endif /* SDL_VIDEO_DRIVER_VITA && SDL_VIDEO_VITA_PVR */
|
|
#endif /* SDL_VIDEO_DRIVER_VITA && SDL_VIDEO_VITA_PVR */
|
|
|
|
|
|
/* vi: set ts=4 sw=4 expandtab: */
|
|
/* vi: set ts=4 sw=4 expandtab: */
|