Re: [Mesa3d-dev] glDrawArrays(), glInterleavedArrays() and indirect rendering problem.

2005-11-08 Thread Brian Paul

Tom Flynn wrote:

Hi there,

Background:
I'm currently running an application on a machine which has no graphics 
and setting my display to another machine that has an NVidia card in it 
(and has the nvidia closed-source drivers).  The application makes 
several calls to glDrawArrays().  One section of the code uses 
glInterleavedArrays(), the rest of the app uses glVertexPointer() and 
friends.


Xorg 6.8.2 on machine with no graphics.
Nvidia 1.0-6629, Xorg 6.8.0 on machine with graphics.

The symtoms:
With the section of code that uses glInterleavedArrays() disabled...
  1) Run the app on my target machine and I just see a blank window on 
my nvidia machine.
  2) Replace glDrawArrays() with glDrawElements() (via an LD_PRELOADED 
library i made), everything I expected shows up on screen.


Now, with the section of code that uses glInterleavedArrays() enabled 
and glDrawArrays() replaced with glDrawElements()...

  3) Bunch of white triangles that don't quite look right.
  4) Replace glInterleavedArrays() with glVertexPointer(), 
glEnableClientState(), etc., everything shows up correctly.


Given this, it seems as if glDrawArrays() and glInterleavedArrays() are 
either not being sent correctly, or not being recieved correctly.  Any 
suggestions on how to narrow this down and tell which machine is 
behaving badly?


Hi Tom,

Sounds like you're exercising GLX indirect rendering.  You're using 
the GLX/DRI-enabled libGL.so from Mesa or X.org, I presume?


Under normal circumstances, all the vertex array rendering commands 
get unrolled into ordinary glBegin/glVertex/glNormal/glEnd calls. 
That's because the vertex arrays themselves only exist on the client 
side so sending the array drawing commands to the server wouldn't work.


You might have just found a simple bug in the client-side GLX code in 
libGL.  The code for glInterleavedArrays() is in 
Mesa/src/glx/x11/vertarr.c if you want to look it over.  I don't have 
time to test anything right now.


BTW, vertex arrays can be stored server-side with the 
GL_ARB_vertex_buffer_object extension.  In that case, the 
glDrawArrays/Elements calls would get sent over the wire.  We don't 
yet support this feature, though.


-Brian


---
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42 plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] glDrawArrays(), glInterleavedArrays() and indirect rendering problem.

2005-11-08 Thread Tom Flynn
On 11/8/05, Brian Paul [EMAIL PROTECTED] wrote:
Sounds like you're exercising GLX indirect rendering.
correct...
You're using the GLX/DRI-enabled libGL.so from Mesa or X.org
, I presume?
Using the libGL.so from the Fedora Core xorg-x11-Mesa-libGL-6.8.2-37 rpm to be specific :) 


You might have just found a simple bug in the client-side GLX code in libGL.The code for glInterleavedArrays() is in
Mesa/src/glx/x11/vertarr.c if you want to look it over. 
Ok, I took a quick look...the type we're using is GL_C4UB_V3F.
In there, vOffset is set to:

 vOffset = __glXTypeSize(vType) * cSize;

in the other case statements (before and after it), it looks like:

 vOffset = __glXTypeSize(cType) * cSize;

is the use of vType there a typo? (probably a copy'n paste error) or am i mis-reading things?

I'll have to take some time tomorrow to take a look at the difference between how DrawArrays and DrawElements are done.

thanks,
tom