Hi,
After failing with the latest subversion sources, I was finally
successful in compiling a MacOS browser plugin based on the VMM38b4
sources. However, I can't get OpenGL to work. I've traced the
problem to sqMacOpenGL.c. The call to GetWindowGreatestAreaDevice()
fails with an error code of -5600 ("Invalid Window Pointer"). I
assume that this is because getSTWindow() doesn't work when Squeak is
running in a browser plugin.
I hacked it by avoiding all the GDH stuff if we are in a browser,
like so:
#ifdef BROWSERPLUGIN
swAttrib[2] = 32;
#else
#ifdef INTERNAL
#if TARGET_API_MAC_CARBON
DPRINTF(5, (fp, "Getting GDH (Carbon): %d\n", getSTWindow(), flags));
stat = GetWindowGreatestAreaDevice(getSTWindow
(),kWindowContentRgn,&tempGDH,&ignore);
if (stat) DPRINTF(1, (fp, "ERROR: failed call to
GetWindowGreatestAreaDevice (code: %d)\n", stat, flags));
#else
DPRINTF(5, (fp, "Getting GDH (non-Carbon)\n", flags));
tempGDH = getDominateDevice(getSTWindow(),&ignore);
#endif
if (tempGDH == nil) {
DPRINTF(1, (fp, "ERROR: tempGDH is nil (whatever that means)\n",
flags));
return -1;
}
swAttrib[2] = (*(*tempGDH)->gdPMap)->pixelSize;
#else
swAttrib[2] = (*(*GetMainDevice())->gdPMap)->pixelSize;
#endif
if(swAttrib[2] < 16) swAttrib[2] = 16;
#endif
Obviously, this is crap, but I don't know the right thing to do.
Anyway, this allows me to successfully create an OpenGL context
("OpenGL newIn: aRect"). Adding an external FFI plugin to the
browser plugin directory lets me make OpenGL calls. But something is
still wrong: it seems like the OpenGL buffers are never swapped
(although DPRINTF assures me that they are: "### Swapping renderer
buffers").
I've had enough of this for tonight; I need some sleep. But in the
meantime, I'll take any advice I can get (eg: "stop working on that,
the latest sources will do everything you need RSN").
Thanks,
Josh