[Vm-dev] [commit] r2268 - iOS open/GL work, use double buffering,
change flush rules. Improves dragon drawing by 3x, but still slow
commits at squeakvm.org
commits at squeakvm.org
Tue Aug 31 04:00:51 UTC 2010
Author: johnmci
Date: 2010-08-30 21:00:50 -0700 (Mon, 30 Aug 2010)
New Revision: 2268
Modified:
trunk/platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+events.m
trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m
trunk/platforms/iOS/vm/OSX/sqSqueakOSXNSView.m
trunk/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist
Log:
iOS open/GL work, use double buffering, change flush rules. Improves dragon drawing by 3x, but still slow
Modified: trunk/platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+events.m
===================================================================
--- trunk/platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+events.m 2010-08-29 05:20:46 UTC (rev 2267)
+++ trunk/platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+events.m 2010-08-31 04:00:50 UTC (rev 2268)
@@ -41,11 +41,18 @@
@implementation sqSqueakMainApplication (events)
- (void) pumpRunLoop {
+ static NSTimeInterval old = 0.0;
+ NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
+ if ((now - old) < 1.0/30.0)
+ return;
+
+ old = now;
+
/* This the carbon logic model
described by http://developer.apple.com/qa/qa2001/qa1061.html
but fails on device, bug tracking number 5971848 */
-
+
NSRunLoop *theRL = [NSRunLoop mainRunLoop];
BOOL result = [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
Modified: trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
===================================================================
--- trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2010-08-29 05:20:46 UTC (rev 2267)
+++ trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2010-08-31 04:00:50 UTC (rev 2268)
@@ -115,11 +115,12 @@
resetFrame.size.width = width;
resetFrame.size.height = height;
[gDelegateApp.window setAcceptsMouseMovedEvents: YES];
- [gDelegateApp.window useOptimizedDrawing: NO];
+ [gDelegateApp.window useOptimizedDrawing: YES];
[gDelegateApp.window setTitle: [[self.squeakApplication.imageNameURL path] lastPathComponent]];
[gDelegateApp.window setRepresentedURL: self.squeakApplication.imageNameURL];
[gDelegateApp.window setInitialFirstResponder: gDelegateApp.mainView];
[gDelegateApp.window setShowsResizeIndicator: NO];
+
extern sqInt getFullScreenFlag(void);
#if (SQ_VI_BYTES_PER_WORD == 4)
NSPanel *panel;
Modified: trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m
===================================================================
--- trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m 2010-08-29 05:20:46 UTC (rev 2267)
+++ trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m 2010-08-31 04:00:50 UTC (rev 2268)
@@ -82,7 +82,8 @@
#if (SQ_VI_BYTES_PER_WORD == 4)
#if STACKVM
- return "Mac Cocoa Cog 5.8b4 27-Aug-10 >5954D562-FB39-4195-9D19-EBB49FAECCF7<";
+ return "Mac Cocoa Cog 5.8b5 30-Aug-10 >0A92B82A-9AC1-4B0E-9DEE-440C3FFAE568<";
+// return "Mac Cocoa Cog 5.8b4 27-Aug-10 >5954D562-FB39-4195-9D19-EBB49FAECCF7<";
// return "Mac Cocoa Cog 5.8b3 21-Aug-10 >5954D562-FB39-4195-9D19-EBB49FAECCF7<";
// return "Mac Cocoa Cog 5.8b2 08-Jul-10 >7BCAB029-A835-4D12-946D-4AB7083D2955<";
// return "Mac Cocoa Cog 5.8b1 07-Jul-10 >529F6B5A-DC81-4C1F-81B6-3D99741B954A<";
Modified: trunk/platforms/iOS/vm/OSX/sqSqueakOSXNSView.m
===================================================================
--- trunk/platforms/iOS/vm/OSX/sqSqueakOSXNSView.m 2010-08-29 05:20:46 UTC (rev 2267)
+++ trunk/platforms/iOS/vm/OSX/sqSqueakOSXNSView.m 2010-08-31 04:00:50 UTC (rev 2268)
@@ -62,6 +62,7 @@
{
NSOpenGLPFAAccelerated,
NSOpenGLPFANoRecovery,
+ NSOpenGLPFABackingStore,
0
};
return[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
@@ -129,11 +130,11 @@
[self setNeedsDisplayInRect: what];
}
-- (void) drawThelayers {
- if([[self window] viewsNeedDisplay]) {
- [self displayIfNeeded];
-// NSLog(@"drawTheLayers flushHappened");
+- (void) drawThelayers {
+ if (syncNeeded) {
+ [[self openGLContext] makeCurrentContext];
glFlush();
+ [[NSOpenGLContext currentContext] flushBuffer];
syncNeeded = NO;
}
if (!firstDrawCompleted) {
@@ -144,11 +145,12 @@
}
-(void)setupOpenGL {
- CGLContextObj ctx = CGLGetCurrentContext();
-
+ CGLContextObj ctx = [[self openGLContext] CGLContextObj];
// Enable the multithreading
CGLEnable( ctx, kCGLCEMPEngine);
-
+ GLenum err = glGetError();
+// GLint newSwapInterval = 1;
+// CGLSetParameter(ctx, kCGLCPSwapInterval, &newSwapInterval);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glClearColor(1.0, 1.0, 1.0, 1.0);
@@ -180,7 +182,13 @@
}
- (void)loadTexturesFrom: (void*) lastBitsIndex subRectangle: (NSRect) subRect {
+ static void *previousLastBitsIndex=null;
NSRect r=[self frame];
+ if (!(previousLastBitsIndex == lastBitsIndex)) {
+ previousLastBitsIndex = lastBitsIndex;
+ glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_ARB, r.size.width*r.size.height*4,lastBitsIndex);
+ }
+
glViewport( subRect.origin.x,subRect.origin.y, subRect.size.width,subRect.size.height );
char *subimg = ((char*)lastBitsIndex) + (unsigned int)(subRect.origin.x + (r.size.height-subRect.origin.y-subRect.size.height)*r.size.width)*4;
glTexImage2D( GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, subRect.size.width, subRect.size.height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, subimg );
@@ -255,8 +263,6 @@
[self setupOpenGL];
inited=YES;
}
- if (syncNeeded)
- glFlush();
[self loadTexturesFrom:dispBitsIndex subRectangle: rect];
[self defineQuad:rect];
syncNeeded = YES;
Modified: trunk/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist 2010-08-29 05:20:46 UTC (rev 2267)
+++ trunk/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist 2010-08-31 04:00:50 UTC (rev 2268)
@@ -350,7 +350,7 @@
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key>
- <string>Squeak VM 5.8b4 http://www.squeak.org</string>
+ <string>Squeak VM 5.8b5 http://www.squeak.org</string>
<key>CFBundleIconFile</key>
<string>Squeak.icns</string>
<key>CFBundleIdentifier</key>
@@ -362,11 +362,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>5.8b4</string>
+ <string>5.8b5</string>
<key>CFBundleSignature</key>
<string>FAST</string>
<key>CFBundleVersion</key>
- <string>22.0</string>
+ <string>23.0</string>
<key>LSBackgroundOnly</key>
<false/>
<key>LSMinimumSystemVersion</key>
More information about the Vm-dev
mailing list