diff --git a/Info.plist b/Info.plist
index f60ccd7..0c528ad 100644
--- a/Info.plist
+++ b/Info.plist
@@ -19,7 +19,7 @@
CFBundleSignature
????
CFBundleVersion
- 0.9.9
+ 0.9.9.1
NSPrincipalClass
OEGameCoreController
OEGameCoreClass
diff --git a/PPSSPP.xcodeproj/project.pbxproj b/PPSSPP.xcodeproj/project.pbxproj
index cdcd288..2a394c2 100644
--- a/PPSSPP.xcodeproj/project.pbxproj
+++ b/PPSSPP.xcodeproj/project.pbxproj
@@ -23,6 +23,7 @@
/* Begin PBXBuildFile section */
3DFCE410186F64170046C035 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DFCE40F186F64170046C035 /* libz.dylib */; };
+ 8C064E6519A5237700CB142D /* sceUsbGps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C064E6419A5237700CB142D /* sceUsbGps.cpp */; };
8C1B6E2E1993C70B00ABEB5D /* PSPScreenshotDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C1B6E2C1993C70B00ABEB5D /* PSPScreenshotDialog.cpp */; };
8C1B6E311993C73100ABEB5D /* HLEHelperThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C1B6E2F1993C73100ABEB5D /* HLEHelperThread.cpp */; };
8C1B6E341993C75500ABEB5D /* SimpleAudioDec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C1B6E321993C75500ABEB5D /* SimpleAudioDec.cpp */; };
@@ -459,6 +460,8 @@
/* Begin PBXFileReference section */
3DFCE40F186F64170046C035 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 8C064E6319A5237700CB142D /* sceUsbGps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sceUsbGps.h; sourceTree = ""; };
+ 8C064E6419A5237700CB142D /* sceUsbGps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sceUsbGps.cpp; sourceTree = ""; };
8C1B6E2C1993C70B00ABEB5D /* PSPScreenshotDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PSPScreenshotDialog.cpp; sourceTree = ""; };
8C1B6E2D1993C70B00ABEB5D /* PSPScreenshotDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSPScreenshotDialog.h; sourceTree = ""; };
8C1B6E2F1993C73100ABEB5D /* HLEHelperThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HLEHelperThread.cpp; sourceTree = ""; };
@@ -1851,6 +1854,8 @@
8CAFA8DE1785B3C200647A96 /* sceUmd.h */,
8CAFA8DF1785B3C200647A96 /* sceUsb.cpp */,
8CAFA8E01785B3C200647A96 /* sceUsb.h */,
+ 8C064E6419A5237700CB142D /* sceUsbGps.cpp */,
+ 8C064E6319A5237700CB142D /* sceUsbGps.h */,
8CAFA8E11785B3C200647A96 /* sceUtility.cpp */,
8CAFA8E21785B3C200647A96 /* sceUtility.h */,
8CAFA8E31785B3C200647A96 /* sceVaudio.cpp */,
@@ -3429,6 +3434,7 @@
8CA153F617C412480003002D /* AsyncIOManager.cpp in Sources */,
8CC8067118C27C4000AB1339 /* sceMt19937.cpp in Sources */,
8CA1540F17C415200003002D /* MIPSAsm.cpp in Sources */,
+ 8C064E6519A5237700CB142D /* sceUsbGps.cpp in Sources */,
8CA1541117C415200003002D /* MIPSAsmTables.cpp in Sources */,
8CA1541317C415280003002D /* MIPSStackWalk.cpp in Sources */,
);
diff --git a/gfx_es2/fbo.cpp b/gfx_es2/fbo.cpp
index 14292d6..f53cea0 100644
--- a/gfx_es2/fbo.cpp
+++ b/gfx_es2/fbo.cpp
@@ -41,6 +41,7 @@ struct FBO {
int width;
int height;
FBOColorDepth colorDepth;
+ bool native_fbo;
};
static FBO *g_overriddenBackbuffer;
@@ -51,6 +52,7 @@ static FBO *g_overriddenBackbuffer;
#ifndef USING_GLES2
FBO *fbo_ext_create(int width, int height, int num_color_textures, bool z_stencil, FBOColorDepth colorDepth) {
FBO *fbo = new FBO();
+ fbo->native_fbo = false;
fbo->width = width;
fbo->height = height;
fbo->colorDepth = colorDepth;
@@ -132,6 +134,7 @@ FBO *fbo_create(int width, int height, int num_color_textures, bool z_stencil, F
#endif
FBO *fbo = new FBO();
+ fbo->native_fbo = false;
fbo->width = width;
fbo->height = height;
fbo->colorDepth = colorDepth;
@@ -240,6 +243,24 @@ FBO *fbo_create(int width, int height, int num_color_textures, bool z_stencil, F
return fbo;
}
+FBO *fbo_create_from_native_fbo(GLuint native_fbo, FBO *fbo)
+{
+ if (!fbo)
+ fbo = new FBO();
+
+ fbo->native_fbo = true;
+ fbo->handle = native_fbo;
+ fbo->color_texture = 0;
+ fbo->z_stencil_buffer = 0;
+ fbo->z_buffer = 0;
+ fbo->stencil_buffer = 0;
+ fbo->width = 0;
+ fbo->height = 0;
+ fbo->colorDepth = FBO_8888;
+
+ return fbo;
+}
+
void fbo_unbind() {
// Bind OE framebuffer for rendering
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer);
@@ -301,6 +322,11 @@ void fbo_bind_as_render_target(FBO *fbo) {
}
void fbo_destroy(FBO *fbo) {
+ if (fbo->native_fbo) {
+ delete fbo;
+ return;
+ }
+
if (gl_extensions.FBO_ARB) {
glBindFramebuffer(GL_FRAMEBUFFER, fbo->handle);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
diff --git a/gfx_es2/fbo.h b/gfx_es2/fbo.h
index a8d34c6..28eb5bf 100644
--- a/gfx_es2/fbo.h
+++ b/gfx_es2/fbo.h
@@ -6,6 +6,8 @@ extern int framebuffer;
// Very C-ish API because that's what I felt like, and it's cool to completely
// hide the data from callers...
+#include "gfx/gl_common.h"
+
struct FBO;
@@ -26,6 +28,10 @@ enum FBOColorDepth {
// On some hardware, you might get a 24-bit depth buffer even though you only wanted a 16-bit one.
FBO *fbo_create(int width, int height, int num_color_textures, bool z_stencil, FBOColorDepth colorDepth = FBO_8888);
+// Create an opaque FBO from a native GL FBO, optionally reusing an existing FBO structure.
+// Useful for overriding the backbuffer FBO that is generated outside of this wrapper.
+FBO *fbo_create_from_native_fbo(GLuint native_fbo, FBO *fbo = NULL);
+
// These functions should be self explanatory.
void fbo_bind_as_render_target(FBO *fbo);
// color must be 0, for now.
diff --git a/ppsspp b/ppsspp
index b421e29..bf70979 160000
--- a/ppsspp
+++ b/ppsspp
@@ -1 +1 @@
-Subproject commit b421e29391b34d997b2c99ce2bdc74a0df5bb472
+Subproject commit bf709790c4fed9cd211f755acaa650ace0f7555a