2003/09/19 08:33:46
[org.ibex.core.git] / src / org / xwt / plat / Darwin.cc
index b923803..c38f173 100644 (file)
@@ -9,8 +9,6 @@
 
 #define __private_extern__
 #include <mach-o/dyld.h>
-//#include <objc/objc-runtime.h>
-//#include <objc/hashtable.h>
 
 #include "POSIX.cc"
 #include "OpenGL.cc"
@@ -21,7 +19,7 @@
 #include <org/xwt/plat/Darwin.h>
 #include <org/xwt/plat/Darwin$CarbonSurface.h>
 #include <org/xwt/plat/Darwin$GLCarbonSurface.h>
-#include <org/xwt/plat/Darwin$GLCarbonDoubleBuffer.h>
+#include <org/xwt/plat/Darwin$GLCarbonPixelBuffer.h>
 #include <org/xwt/plat/Darwin$CarbonMessage.h>
 #include <org/xwt/plat/Darwin$CarbonOpenGL.h>
 #include <org/xwt/plat/Darwin$FileDialogHelper.h>
@@ -469,7 +467,7 @@ OSStatus our_windowEventHandler(EventHandlerCallRef handler, EventRef e, void *u
             
             switch(eKind) {
                 case kEventWindowUpdate: {
-                   surface->Dirty(0,0,surface->root->width,surface->root->height);
+                    surface->Dirty(0,0,surface->root->width,surface->root->height);
                     return noErr;
                 }
                 case kEventWindowBoundsChanged: {
@@ -536,34 +534,13 @@ void Darwin$CarbonSurface::natInit(jboolean framed) {
     // FIXME: unframed windows should appear in the window menu
     // This probably needs a hack similar to whats in Cocoa.mm
     WindowAttributes attr =  kWindowStandardHandlerAttribute|
-        (framed ? kWindowInWindowMenuAttribute|kWindowStandardDocumentAttributes|kWindowLiveResizeAttribute/*|kWindowMetalAttribute*/ : 0);
+        (framed ? kWindowInWindowMenuAttribute|kWindowStandardDocumentAttributes|kWindowLiveResizeAttribute : 0);
     OSStatus r;
     
     rect.top = 0; rect.left = 0; rect.bottom = 10; rect.right=10;
     r = CreateNewWindow(wc,attr,&rect,&window);
     checkStatus(r,"CreateNewWindow");
-    /*
-    // setBackingType
-    NSString* 
-    Class NSWindowClass = NSClassFromString
-      NSWindowClass->methodLists
-
-      void *iterator = 0;     // Method list (category) iterator
-    struct objc_method_list* mlist;
-    Method currMethod;
-    int  j;
-    while ( mlist = class_nextMethodList( NSWindowClass, &iterator ) ) {
-      for ( j = 0; j < mlist->method_count; ++j ) {
-        currMethod = (mlist->method_list + j);
-       if (strcmp((const char *)currMethod->method_name, "setBackingStore")) {
-         IMP imp = currMethod->method_imp;
-         (*imp)(NSWindowInstance, currMethod->method_name, 0);
-         // do stuff
-       }
-      }
-    }
-    NSWindow* window = 
-    */
+    
     GCJ$Retainer::retain(this); // Need to account for the EventHandlers pointer to us
     EventHandlerUPP upp = NewEventHandlerUPP(our_windowEventHandler);
     
@@ -922,7 +899,7 @@ void Darwin$CarbonOpenGL::initSharedContext() {
     checkStatus(rawSharedContext,"aglCreateContext");
 }
 
-void Darwin$GLCarbonDoubleBuffer::natInit() {
+void Darwin$GLCarbonPixelBuffer::natInit() {
     WindowClass wc = kPlainWindowClass;
     WindowAttributes attr = 0;
     WindowRef window;
@@ -940,23 +917,21 @@ void Darwin$GLCarbonDoubleBuffer::natInit() {
     
     r = CreateNewWindow(wc,attr,&rect,&window);
     checkStatus(r,"CreateNewWindow");
-
+        
     shared = (AGLContext) gl->rawSharedContext;
     fmt = (AGLPixelFormat) gl->rawPixelFormat;
     ctx = aglCreateContext(fmt,shared);
     checkStatus(ctx, "aglCreateContext");
     
-    b = aglSetDrawable(ctx, GetWindowPort(window));
+    b = aglSetDrawable(ctx,GetWindowPort(window));
     checkStatus(b,"aglSetDrawable");
     
     aglSetCurrentContext(ctx);
     aglUpdateContext(ctx);
-    drawableInit(OpenGL::roundToPowerOf2(width),
-                OpenGL::roundToPowerOf2(height));
+    drawableInit(width,height);
     glClear(GL_COLOR_BUFFER_BIT);
 
     aglSetCurrentContext(shared);
-
     target = rectTexture ? GL_TEXTURE_RECTANGLE_EXT : GL_TEXTURE_2D;
     glEnable(target);
     glGenTextures(1,&tex);
@@ -964,10 +939,6 @@ void Darwin$GLCarbonDoubleBuffer::natInit() {
     glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     aglSurfaceTexture (shared, target, GL_RGBA, ctx);
-    /*
-    glReadBuffer
-    glCopyTexImage2D(target, 0, GL_RGBA, 0, 0, width, height, 0);
-    */
     checkGLError();
     glDisable(target);
     
@@ -977,19 +948,19 @@ void Darwin$GLCarbonDoubleBuffer::natInit() {
     rawCTX = (RawData*) ctx;
 }
 
-void Darwin$GLCarbonDoubleBuffer::activateContext() {
+void Darwin$GLCarbonPixelBuffer::activateContext() {
     AGLContext ctx = (AGLContext) rawCTX;
     aglSetCurrentContext(ctx);
 }
 
-void Darwin$GLCarbonDoubleBuffer::natCleanup(RawData* rawWindowRef, RawData* rawCTX) {
+void Darwin$GLCarbonPixelBuffer::natCleanup(RawData* rawWindowRef, RawData* rawCTX) {
     WindowRef window = (WindowRef) rawWindowRef;
     AGLContext ctx = (AGLContext) rawCTX;
     aglDestroyContext(ctx);
     DisposeWindow(window);
 }
 
-void Darwin$GLCarbonSurface::natBlit(Darwin$GLCarbonDoubleBuffer *db, jint sx1, jint sy1, jint dx1, jint dy1, jint dx2, jint dy2) {
+void Darwin$GLCarbonSurface::natBlit(Darwin$GLCarbonPixelBuffer *db, jint sx1, jint sy1, jint dx1, jint dy1, jint dx2, jint dy2) {
     AGLContext ctx = (AGLContext) rawCTX;
     int sx2 = sx1 + (dx2-dx1);
     int sy2 = sy1 + (dy2-dy1);
@@ -1001,7 +972,7 @@ void Darwin$GLCarbonSurface::natBlit(Darwin$GLCarbonDoubleBuffer *db, jint sx1,
     if(db->rectTexture) {
         glEnable(GL_TEXTURE_RECTANGLE_EXT);
         checkGLError();
-        glBindTexture(GL_TEXTURE_RECTANGLE_EXT, (GLuint)db->textureName);
+        glBindTexture(GL_TEXTURE_RECTANGLE_EXT, db->textureName);
         checkGLError();
         glBegin(GL_QUADS); 
             glTexCoord2i (sx1, sy1   );
@@ -1025,10 +996,7 @@ void Darwin$GLCarbonSurface::natBlit(Darwin$GLCarbonDoubleBuffer *db, jint sx1,
 
         glColor4f(1.0f,1.0f,1.0f,1.0f);
         glEnable(GL_TEXTURE_2D);
-       GLuint tname;
-       glGenTextures(1, &tname);
-        glBindTexture(GL_TEXTURE_2D, tname);    
-       aglSurfaceTexture (ctx, GL_TEXTURE_2D, GL_RGBA, (AGLContext)db->rawCTX);
+        glBindTexture(GL_TEXTURE_2D, db->textureName);    
         checkGLError();
         glBegin(GL_QUADS); 
             glTexCoord2f (tx1, ty1   );