[Bf-committers] OpenGL optimisation
trip
bf-committers@blender.org
Sat, 19 Jun 2004 10:17:20 -0400
link fizzeled out.
On Jun 19, 2004, at 9:36 AM, Richard Berry wrote:
> A small update for OpenGL display list meshes. I've made a version
> that also accelerates wireframe meshes. You can get it at (Mac OS X
> binary only):
>
> http://wwww.warwick.ac.uk/student/R.J.Berry/blender/blender1-cvs.zip
>
> And relevant patches (against CVS) at:
>
> http://www.warwick.ac.uk/student/R.J.Berry/blender/drawobject.diff
> http://www.warwick.ac.uk/student/R.J.Berry/blender/displist.diff
> http://www.warwick.ac.uk/student/R.J.Berry/blender/BKE_displist.diff
>
>
>
> I've also got a version which is patched against 2.33a, so you can see
> the difference that removing glFinish has (change made recently in
> CVS):
>
> http://www.warwick.ac.uk/student/R.J.Berry/blender/blender1-2.33a.zip
>
>
>
> However, there is a small problem with the wireframe drawing. Because
> I couldn't find a clean way to do it, OpenGL display lists are not
> compiled for a subdivided mesh unless you have already gone through
> the "OpenGL Solid" draw mode.
>
> For example, if you open the default Blender scene of a cube (in
> wireframe mode) and subdivide it you won't see any benefit. If you
> switch to "OpenGL Solid" mode and then back to "Wireframe" a display
> list will have been compiled.
>
> I'm currently trawling my way through the OpenGL rendering code (all
> several thousand lines of it) to try and find a solution, but someone
> who knows Blender display lists could probably help.
>
>
>
> If you look at the patches, the new code for solid drawing looks like
> this:
>
> if (dl->mesh->dispList)
> glCallList(dl->mesh->dispList);
> else {
> dl->mesh->dispList = glGenLists(1);
> glNewList(dl->mesh->dispList, GL_COMPILE_AND_EXECUTE);
> displistmesh_draw_solid(dl->mesh, drawsmooth,
> dl->nors);
> glEndList();
> }
>
> and for drawing wireframes:
>
> if (dl->mesh->dispList) {
> glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
> glCallList(dl->mesh->dispList);
> glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
> } else
> displistmesh_draw_wire(dl->mesh);
>
> whereas previously just displistmesh_draw_solid or displist_mesh_wire
> would be called.
>
> The idea is to create a display list that can be used for both solid
> and wireframe drawing (and potentially shaded and textured modes as
> well) and then just switch between polygon drawing modes, so the
> display list needs vertex normals. I tried:
>
> if (dl->mesh->dispList) {
> glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
> glCallList(dl->mesh->dispList);
> glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
> else {
> if (!dl->nors)
> addnormalsDispList(ob, dlbase);
>
> dl->mesh->dispList = glGenLists(1);
> glNewList(dl->mesh->dispList, GL_COMPILE_AND_EXECUTE);
> displistmesh_draw_solid(dl->mesh, !(G.f &
> G_BACKBUFSEL), dl->nors);
> glEndList();
> }
>
> (and changing drawDispListwire so that I had access to the Object).
> This correctly creates the mesh but the normals seem incorrect as
> "OpenGL Solid" mode always draws an entirely black mesh.
>
>
>
> What I'm trying to do is seperate the drawing code into seperate
> render paths. So, for example, the same mesh display list (or vertex
> array) could be used in many different ways by just switch the drawing
> state (i.e. GL_FILL for solids, GL_LINE for wireframes, GL_LINE for
> vertex points). This would eliminate a lot of the redundancy that's in
> the current drawing code.
>
> This would also make it simple to implement accelerated shaded and
> textured drawing modes (realtime shaded mode is going to have to wait
> until vertex / fragment shaders are implemented, otherwise render
> modes such as Phong and Toon shading aren't going to be possible).
>
>
>
> Oh, and there might be a bug on Mac OS X 10.3.4 which causes wireframe
> drawing to be slow (note the above "feature" though). I ran into this
> on a PowerBook with ATI Mobility 9600.
>
> r i c k
> _______________________________________________
> Bf-committers mailing list
> Bf-committers@blender.org
> http://www.blender.org/mailman/listinfo/bf-committers
>