Python from C/SDL

Gib Bogle bogle at
Sat Sep 7 20:40:55 EDT 2002


Thanks very much for such a detailed response.  My programming skills
are a bit out of date (little OO experience, no C++, no Python) so what
is required here might be a bit of a stretch.  I have sent a message to
Warren Delano (pymol author) to see if he is interested in giving some
assistance.  If not I'll probably put this on the back burner until I
have the time to teach myself the basics of Python.  I have been aware
of it for a couple of years now, and if I was 20 years younger ...


"Mike C. Fletcher" wrote:
> I'll just deal with the OpenGL stuff.  Basically, PyOpenGL-based apps
> should be able to work like this:
> c draw():
>         context = new MyContext;
>         context.set_current();
>         err = Py*_Call*( size );
>         python:
>                 def render( dimensions ):
>                         do_your_rendering_here()
>                         return
> c:
>         swap_buffers();
>         context.unset_current();
> So, you'd likely need to find, somewhere in pymol, a function to call
> which is _after_ the Python context setup and set_current() which you
> can call.  Depending on the architecture of pymol, that's likely to
> require at least sub-classing, and possibly some re-writing, as most
> rendering libs go out of their way to be sure they're using the "right"
> context before any attempt to render, and most apps assume they'll be
> using a context they set up.  You'll likely need to pass size of the
> window from your code, as some renderers assume they know the current
> size of the rendering context (which they won't if they aren't getting
> their resize events).
> For example, in OpenGLContext, you'd subclass a Context and override
> setCurrent and unsetCurrent to do nothing (or more professionally, you'd
> create C "extending" functions that set the appropriate context for your
> app, which would allow the Python system to have its own contexts
> alongside yours if you wished).  In other frameworks those calls aren't
> actually split out into easily overridable methods (it's only required
> if you're targetting multiple GUI libs), so you might have to re-write
> anywhere you see "set current" methods called.    Would suggest
> contacting the creator of PyMol for suggestions where to apply your lever.
> For a "full" job of creating a PyOpenGL embedded system, you'd also
> provide initialisation/creation functions to allow Python code to create
> a context within your app (e.g. setting display modes).
> There are similar questions asked once in a while, but not particularly
> with pymol AFAIK.  "How do I embed PyOpenGL apps" is the basic template.
>   Suppose I should create a tutorial for it, but I've never done it
> directly myself (though conceptually every context in OpenGLContext is
> "embedded" in the GUI library it uses, since those are all C libs, it's
> just that I do the "calling into Python" from the libs own Python wrappers).
> HTH,
> Mike
> BTW: out of town in a few minutes, so won't be available to clarify
> anything 'til Monday, sorry.
> Chris Gonnerman wrote:
> > ----- Original Message -----
> > From: "Gib Bogle" <bogle at>
> >
> >
> >>Hi,
> >>
> >>I am a complete beginner with Python.  My interest in it is focussed on
> >>a great piece of open-source software called pymol, a system for
> >>visualization of molecules that uses Python and OpenGL.  I'd like to get
> >>access to pymol's graphical functions from my own program, which is
> >>built from C, SDL and OpenGL.
> >
> ...
> >>I will not want to use the GUI at all.  SDL would
> >>create the surface(s), and handle the buffer swapping.  My goal is to be
> >>able to send a request to the pymol API asking for a frustum view to be
> >>rendered on the provided surface.
> >>
> >>Sorry if my question is one that gets asked and answered frequently.  If
> >>there is a place where this has been dealt with please direct me.
> >
> >
> > Never heard this one before...
> >
> > Good luck!
> >
> >
> > Chris Gonnerman -- chris.gonnerman at
> >
> >
> >
> --
> _______________________________________
>    Mike C. Fletcher
>    Designer, VR Plumber, Coder

Gib Bogle              bogle at
1/44 Arthur St         Tel: (64-9) 525-6878
Ellerslie, N.Z.        Fax: (64-9) 525-6878

More information about the Python-list mailing list