usually you can create the array in python, and then give a pointer to the C/C++/F0oLang

Generally easiest for my mind.  That leaves the memory management in python.

Or create the python buffers from your pointer.

Then create the slices in python, rather than using pointer arithmetic.

eg, new_array = array[vertIdx:]


On Mon, Jun 1, 2009 at 8:37 AM, Gordon L. Kindlmann <glk@uchicago.edu> wrote:

I've recently started using PyOpenGL as the framework for re-writing C/
C++ OpenGL wrappers around an large amount of research code in C.  Its
been a pleasure to have something that allows such literal translation
from the successful C/C++ OpenGL code to Python code; thanks for
creating this!

The main hitch I've had is in using glDrawElements.  I've looked
around for answers to this, and its clear that people people using
PyOpenGL are using it with geometry that is created on the python
side.  In my case, all the geometry information is created on the C
side, and I want to control its display from Python.

The line that's causing problems is:

  glDrawElements(glpt[lpld.type[primIdx]], vertCnt, GL_UNSIGNED_INT,
lpld.indx + vertIdx)

where lpld.indx is a ctypes-created pointer to a buffer of unsigned
ints allocated and filled in C, which causes this problem:

  Traceback (most recent call last):
    File "pgltDemo.py", line 118, in display
      pgltDraw(pgltObject, uva)
    File "pgltDemo.py", line 76, in pgltDraw
      GL_UNSIGNED_INT, lpld.indx + vertIdx)
  TypeError: unsupported operand type(s) for +: 'LP_c_ulong' and 'int'

because apparently pointer arithmetic games aren't quite so simply in
Python.  If you just replace "lpld.indx + vertIdx" with "lpld.indx",
which removes the pointer arithmetic stuff, it segfaults.  I know that
others have looked at this issue from the context of having array data
that's created via numpy:


I've tried many different iterations of things like this, and I get
either python errors or segfaults.

Getting this to work with PyOpenGL would make a huge difference in how
I can get research work done with python, so I've taken some type to
put a self-contained example online:


This includes a C library the generates some geometry to render, and a
ctypeslib-generated wrapper around the library.  pgltDemo.c contains a
"pgltDraw()" function that shows how I'm currently doing things
without (for display lists) and with vertex arrays.  pgltDemo.py
contains the same function, but the vertex array code is broken.

Hopefully someone on this list will be able to spend a little time
working with these examples, and figure out how to get my
"pgltDemo.py" to work with vertex arrays.

Thanks very much,

Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
PyOpenGL Homepage
PyOpenGL-Users mailing list