[squeak-dev] OpenGL (better drivers) on Win32

Igor Stasenko siguctua at gmail.com
Sun Feb 8 16:15:44 UTC 2009


2009/2/8 Kevin <kevin at kelleysoft.com>:
>
> Background:  I'm playing around with all the 3D code/examples I can find,
> between Croquet/Cobalt, Balloon3D, a bunch of openGL sample code from books
> and the net.  In doing this I have demonstrated that the Windows XP openGL
> driver (opengl32.dll, the microsoft impl.) is buggy and slow.  In fact if
> fails completely to display a lot of simple sample opengl demo programs.
> There's an SGI implementation of OpenGL, comprising files opengl.dll,
> glu.dll, and glut.dll (latter two provide higher-level and windowing
> functions I understand).  Using those drivers my various sample programs
> work well, fast and clean.
>
> Back into squeak, doing some simple 3D demos using openGL in morphic
> windows,
> and using Balloon3D as a basis... I'm getting some extremely slooooowwww
> drawing with simple (few primitives) models.  It seems squeak on windows is
> using the default (microsoft) openGL drivers; in fact the OpenGLWin32 class
> is answering 'opengl32.dll' as the driver name.
>
> Also in OpenGL class, categories Keyword API and OpenGL API, are a bunch of
> methods with primitive calls, all of which are calling out the
> 'opengl32.dll'
> library and therefore are using the buggy and slow MS driver.  These methods
>
> all say "This method was automatically generated", so my question is By who?
> or what?
>
> I could manually edit all those calls to use 'opengl.dll' instead, and thus
> presumably get the better driver, but that's kind of a pain and would have
> to
> be done every time I switched to a different image.  I'd rather fix it once
> and be done.
>
> Is that auto-generation of primitive calls in OpenGL class being done at the
>
> VM build stage, maybe by VMMaker or something?  Is there a simple re-
> initialization I could do, maybe change the OGLWin32>>openGLLibraryName
> method to answer 'opengl.dll' and re-initialize to regenerate those OpenGL
> methods?  I don't see it.
>
it was generated a while ago by someone (don't remember who). About 2
years ago i tried to find these sources as well, withotut much success
:)

> Interestingly, the Croquet worlds seem to work pretty well; I'm guessing
> some
> of its 3D stuff is being handled in a croquet plugin instead of going
> through
> the OpenGL class.  Not sure about that yet.  I'd assumed that croquet would
> be using the same OpenGL implementation as everything else, and so fixing
> OpenGL to use the better driver would make croquet better as well.
>
> Anyway, I'm still digging at this problem, and would appreciate comments or
> pointers from anybody that's got an idea what's going on.  Thanks!
>
>
you could replace a .dll name using single swift blow:

ExternalLibraryFunction allInstancesDo: [:fn |
  (fn module = 'opengl32.dll') ifTrue: [ fn setModule: 'yourdll.dll' ] ].
this is a little dangerous, because VM is caching these pointers.
Save before doing it, and expect that your update may not work unless
you restart the VM.

Concerning the speed.. i don't think that you will gain much from
replacing a library. :)
I suspect you got slooow numbers because you rendering in software
mode, without hardware acceleration.


> --kevin
>

-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list