Hi,
On Sat, Dec 4, 2010 at 1:21 PM, Christopher Night <[email protected]>wrote:

> Hi, I'm working on a standalone OBJ loader based on the well-known one on
> the pygame wiki:
> http://www.pygame.org/wiki/OBJFileLoader
>
> My goal is to speed up load times by making the model objects picklable, so
> the OBJ file doesn't have to be read every time you start up. Here's my
> current version:
> http://christophernight.net/stuff/fasterobj-0.tgz
>
> It still needs some cleaning up, but it's got almost all the functionality
> I wanted. In addition to making things picklable, it has a small
> optimization by combining triangles and quads when possible to reduce the
> number of GL calls.
>
> There are three classes: OBJ (using fixed function), OBJ_array (using
> vertex arrays), and OBJ_vbo (using vertex buffer objects). Additionally, any
> of these can be used with or without a display list. Here's the results of
> my test on some model I had lying around:
>
>    type  list? parse save load   render
> 1. fixed False  146   13   14    0.03fps
> 2. fixed  True  124   10  950  117.80fps
> 3. array False  179    8    9    1.26fps
> 4. array  True  174    7   30  121.08fps
> 5. vbo   False  143    7    8   16.06fps
> 6. vbo    True  142    8   12  112.98fps
>
> #2 is the method in the original OBJ loader. The times listed under parse,
> save, and load are times in milliseconds to read from the OBJ file and do
> some preprocessing, pickle to a file, and unpickle from a file. The load
> step also includes generating the display list, if necessary. Obviously
> methods #1 and #3 render far too slow; they're just there for comparison.
>
> So anyway, it looks pretty good. I think that #4 or #6 would do fine for my
> purposes. However, I know that people don't like to put vertex arrays and
> VBOs inside display lists, so I want to know if there's some problem with
> this method. I understand that putting a VBO in a display list defeats the
> whole purpose of having a VBO, since you can't update it, but I imagine
> you're probably not going to be doing that with OBJ models anyway. Also,
> when I asked about this a few months ago, someone said that method #5 should
> outperform methods #1-4, and that doesn't seem to be the case. So I might be
> misusing the VBOs.
>
I completely would have expected the results in 1-4.

However, I'm quite surprised at the vbo method 5.  It should run in speed
between 2 and 4.  I also would have expected 4 and 6 to be much closer.

How many VBOs are you using?  If you switch buffer bindings a lot for each
draw (like your object has 10 different parts, each with a vertex, normal,
and texcoord VBO) then you *might* get results like that . . .

> Any other comments welcome too! If you have any OBJ files you want me to
> test, just let me know.
>
This is great, actually.  I imagine pickling could make things much faster.
Wonder why it took longer to load on 2?

> -Christopher
>
Ian

Reply via email to