OpenGL Renderer:

- Improve accuracy of wireframe mode rendering.
- Fix regression from r4426 where wireframe rendering of GL_QUADS and GL_QUAD_STRIP would render an extra diagonal line. (Tested on Nanostray 2)
This commit is contained in:
rogerman 2012-12-10 10:50:40 +00:00
parent 27d4d5f92b
commit ad1c1e6a18
1 changed files with 12 additions and 12 deletions

View File

@ -799,15 +799,6 @@ static void BeginRenderPoly()
glCullFace(map3d_cull[cullingMask]);
}
if (!wireframe)
{
xglPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
}
else
{
xglPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
}
if (gfx3d.renderState.enableTexturing)
{
setTexture(textureFormat, texturePalette);
@ -1219,13 +1210,22 @@ static void OGLRender()
}
}
// GL_QUADS and GL_QUAD_STRIP were converted to GL_TRIANGLES, so redefine them as such.
if (polyPrimitive == GL_QUADS || polyPrimitive == GL_QUAD_STRIP)
// In wireframe mode, redefine all primitives as GL_LINE_LOOP rather than
// setting the polygon mode to GL_LINE though glPolygonMode(). Not only is
// drawing more accurate this way, but it also allows GL_QUADS and
// GL_QUAD_STRIP primitives to properly draw as wireframe without the
// extra diagonal line.
if (wireframe)
{
polyPrimitive = GL_LINE_LOOP;
}
else if (polyPrimitive == GL_QUADS || polyPrimitive == GL_QUAD_STRIP)
{
// Redefine GL_QUADS and GL_QUAD_STRIP as GL_TRIANGLES since we converted them.
polyPrimitive = GL_TRIANGLES;
}
// Upload the vertices to the framebuffer
// Upload the vertices to the framebuffer.
glDrawElements(polyPrimitive, vertIndexCount, GL_UNSIGNED_SHORT, vertIndexBuffer);
vertIndexCount = 0;
}