Re: some weird issue related to glDrawElements

Brian Paul <[email protected]>
Newsgroups gmane.comp.video.mesa3d.user
Message-ID <[email protected]>
On 09/19/2018 06:23 AM, Gianluca Natale wrote:
> Hi,
> 
> I’m new to this forum, but not to OpenGL and graphics.
> 
> I used to develop graphics (OpenGL) on Win for many years.
> 
> Recently I had to port my application to Linux, and there started many 
> graphic issues.
> 
> Specifically, I’m using a VM Linux (CentOS 6.6) on a Pc.
> 
> When I check the OpenGL implementation in my application, this is what 
> it returns:
> 
> Vendor        :     VMware, Inc.
> 
> Renderer    :     Gallium 0.4 on llvmpipe (LLVM 3.6, 256 bits)
> 
> Version       :     2.1 Mesa 11.0.7
> 
> So, yes, on that VM Linux, it is using a software emulation (correct? 
> I’ve read that LLVM is a software emulation).

Yes, llvmpipe is software rendering.  I've tested our vmware 
hardware-accelerated driver on CentOS 7.1.  I've never tried CentOS 6.6.


> 
> The issue that I’m experiencing is about using glDrawElements in 
> selection mode (glRenderMode(GL_SELECT)).
> 
> I could narrow down the issue till a very simple case, whose behavior I 
> cannot explain.
> 
> In detail, this is the sample code I’m calling:
> 
> GLfloat faceNodes[12];
> 
> faceNodes[ 0] =  0.1; faceNodes[ 1] =  0.1; faceNodes[ 2] = 0.0; // index 0
> 
> faceNodes[ 3] = -0.1; faceNodes[ 4] =  0.1; faceNodes[ 5] = 0.0; // index 1
> 
> faceNodes[ 6] = -0.1; faceNodes[ 7] = -0.1; faceNodes[ 8] = 0.0; // index 2
> 
> faceNodes[ 9] =  0.1; faceNodes[10] = -0.1; faceNodes[11] = 0.0; // index 3
> 
> glVertexPointer(3, GL_FLOAT, 0, faceNodes);
> 
> GLuint auxTriaIndices[6];
> 
> auxTriaIndices[0] = 0;
> 
> auxTriaIndices[1] = 1;
> 
> auxTriaIndices[2] = 2;
> 
> auxTriaIndices[3] = 2;
> 
> auxTriaIndices[4] = 3;
> 
> auxTriaIndices[5] = 0;
> 
> glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, auxTriaIndices);
> 
> In GL_RENDER mode this code works fine. It renders a square made by 2 
> triangles (a top-left triangle, and a bottom-right triangle which share 
> the diagonal of the square).
> 
> But when I’m in GL_SELECT mode, only the top-left triangle is picked. No 
> OpenGL hit record triggered when I move my mouse onto the bottom-right 
> triangle.
> 
> You’ve noticed that I’m using pure OpenGL 1.1 implementation, i.e. no 
> VBO. But that should not be a problem (and in fact it renders correctly).
> 
> Furthermore, I tried to swap the indices of the 2 triangles in 
> auxTriaIndices (i.e. from (0,1,2,2,3,0) to (2,3,0,0,1,2)), but it still 
> picks the top-left triangle, and not the bottom-right.
> In short, it seems to me that it works like if I called:
> glDrawArrays(GL_TRIANGLES, 0, 6);
> 
> In fact it seems to ignore the second triangle (i.e. vertices 3,4,5 in 
> the list ‘faceNode’, as nodes 4 and 5 are undefined), and only taking 
> into count the first triangle.
> 
> As a further confirmation, I tried to add 2 additional vertices to 
> ‘faceNode’. And it now selects as the second triangle the one defined by 
> the vertices 3,4,5 in the list ‘faceNode’, regardless of the indices I 
> pass to glDrawElements.
> How is that possible, as I’m using glDrawElements, in which I pass a 
> list of indices?
> 
> And also, whay should it work in GL_RENDER mode, but not in GL_SELECT mode?
> BTW, above code works fine on Win, both using direct graphic board (an 
> nVidia graphic card) or by software emulation (Microsoft GDI, which 
> means OpenGL 1.1).
> 
> Any idea what might be wrong?

It's probably a but in llvmpipe, or more likely, the state tracker.  Few 
people use selection mode and there's little test coverage of it 
(though, the OpenGL select.c conformance test passes w/ llvmpipe - I 
just tried it).


> 
> My code seems correct. Or not?

Do you have a complete program I could run/test?  Ideally GLUT-based?

-Brian
_______________________________________________
mesa-users mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.