<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.StileMessaggioDiPostaElettronica17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 2.0cm 2.0cm 2.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="IT" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal">I’m new to this forum, but not to OpenGL and graphics.<o:p></o:p></p>
<p class="MsoNormal">I used to develop graphics (OpenGL) on Win for many years.<o:p></o:p></p>
<p class="MsoNormal">Recently I had to port my application to Linux, and there started many graphic issues.<o:p></o:p></p>
<p class="MsoNormal">Specifically, I’m using a VM Linux (CentOS 6.6) on a Pc.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When I check the OpenGL implementation in my application, this is what it returns:<o:p></o:p></p>
<p class="MsoNormal">Vendor        :     VMware, Inc.<o:p></o:p></p>
<p class="MsoNormal">Renderer    :     Gallium 0.4 on llvmpipe (LLVM 3.6, 256 bits)<o:p></o:p></p>
<p class="MsoNormal">Version       :     2.1 Mesa 11.0.7<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So, yes, on that VM Linux, it is using a software emulation (correct? I’ve read that LLVM is a software emulation).<o:p></o:p></p>
<p class="MsoNormal">The issue that I’m experiencing is about using glDrawElements in selection mode (glRenderMode(GL_SELECT)).<o:p></o:p></p>
<p class="MsoNormal">I could narrow down the issue till a very simple case, whose behavior I cannot explain.<o:p></o:p></p>
<p class="MsoNormal">In detail, this is the sample code I’m calling:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-US">GLfloat faceNodes[12];</span><span lang="EN-US" style="mso-fareast-language:IT"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">faceNodes[ 0] =  0.1; faceNodes[ 1] =  0.1; faceNodes[ 2] = 0.0; // index 0<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">faceNodes[ 3] = -0.1; faceNodes[ 4] =  0.1; faceNodes[ 5] = 0.0; // index 1<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">faceNodes[ 6] = -0.1; faceNodes[ 7] = -0.1; faceNodes[ 8] = 0.0; // index 2<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">faceNodes[ 9] =  0.1; faceNodes[10] = -0.1; faceNodes[11] = 0.0; // index 3<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">glVertexPointer(3, GL_FLOAT, 0, faceNodes);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">GLuint auxTriaIndices[6];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[0] = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[1] = 1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[2] = 2;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[3] = 2;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[4] = 3;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">auxTriaIndices[5] = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, auxTriaIndices);<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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).<o:p></o:p></p>
<p class="MsoNormal">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.<o:p></o:p></p>
<p class="MsoNormal">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).<o:p></o:p></p>
<p class="MsoNormal">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.<br>
In short, it seems to me that it works like if I called:<br>
glDrawArrays(GL_TRIANGLES, 0, 6);<o:p></o:p></p>
<p class="MsoNormal">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.<o:p></o:p></p>
<p class="MsoNormal">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.<br>
How is that possible, as I’m using glDrawElements, in which I pass a list of indices?<o:p></o:p></p>
<p class="MsoNormal">And also, whay should it work in GL_RENDER mode, but not in GL_SELECT mode?<br>
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).<o:p></o:p></p>
<p class="MsoNormal">Any idea what might be wrong?<o:p></o:p></p>
<p class="MsoNormal">My code seems correct. Or not?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Gianluca <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>