1
0
forked from 0ad/0ad

Replaces GL_QUADS by GL_TRIANGLES for drawing overlays and debug frustums.

This was SVN commit r26465.
This commit is contained in:
Vladislav Belov 2022-02-22 18:41:31 +00:00
parent a350ec2a74
commit 6a0fc31c33
2 changed files with 37 additions and 20 deletions

View File

@ -185,7 +185,7 @@ void CDebugRenderer::DrawCameraFrustum(const CCamera& camera, const CColor& colo
camera.GetViewQuad(camera.GetNearPlane(), nearPoints);
camera.GetViewQuad(camera.GetFarPlane(), farPoints);
for(int i = 0; i < 4; i++)
for (int i = 0; i < 4; ++i)
{
nearPoints[i] = camera.m_Orientation.Transform(nearPoints[i]);
farPoints[i] = camera.m_Orientation.Transform(farPoints[i]);
@ -210,50 +210,56 @@ void CDebugRenderer::DrawCameraFrustum(const CCamera& camera, const CColor& colo
ADD(nearPoints[0]);
ADD(nearPoints[1]);
ADD(nearPoints[2]);
ADD(nearPoints[0]);
ADD(nearPoints[2]);
ADD(nearPoints[3]);
// Far plane.
ADD(farPoints[0]);
ADD(farPoints[1]);
ADD(farPoints[2]);
ADD(farPoints[0]);
ADD(farPoints[2]);
ADD(farPoints[3]);
// Intermediate planes.
CVector3D intermediatePoints[4];
for(int i = 0; i < intermediates; ++i)
for (int i = 0; i < intermediates; ++i)
{
const float t = (i + 1.0f) / (intermediates + 1.0f);
for(int j = 0; j < 4; ++j)
for (int j = 0; j < 4; ++j)
intermediatePoints[j] = nearPoints[j] * t + farPoints[j] * (1.0f - t);
ADD(intermediatePoints[0]);
ADD(intermediatePoints[1]);
ADD(intermediatePoints[2]);
ADD(intermediatePoints[0]);
ADD(intermediatePoints[2]);
ADD(intermediatePoints[3]);
}
overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data());
overlayShader->AssertPointersBound();
glDrawArrays(GL_QUADS, 0, vertices.size() / 3);
glDrawArrays(GL_TRIANGLES, 0, vertices.size() / 3);
vertices.clear();
// Connection lines.
ADD(nearPoints[0]);
ADD(farPoints[0]);
ADD(nearPoints[1]);
ADD(farPoints[1]);
ADD(nearPoints[2]);
ADD(farPoints[2]);
ADD(nearPoints[3]);
ADD(farPoints[3]);
ADD(nearPoints[0]);
ADD(farPoints[0]);
for (int i = 0; i < 4; ++i)
{
const int nextI = (i + 1) % 4;
ADD(nearPoints[i]);
ADD(farPoints[nextI]);
ADD(farPoints[i]);
ADD(nearPoints[i]);
ADD(nearPoints[nextI]);
ADD(farPoints[nextI]);
}
overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data());
overlayShader->AssertPointersBound();
glDrawArrays(GL_QUAD_STRIP, 0, vertices.size() / 3);
glDrawArrays(GL_TRIANGLES, 0, vertices.size() / 3);
#undef ADD
overlayTech->EndPass();

View File

@ -646,9 +646,17 @@ void OverlayRenderer::RenderForegroundOverlays(
shader->Uniform(str_transform, g_Renderer.GetSceneRenderer().GetViewCamera().GetViewProjection());
float uvs[8] = { 0,1, 1,1, 1,0, 0,0 };
const CVector2D uvs[6] =
{
{0.0f, 1.0f},
{1.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 1.0f},
{1.0f, 0.0f},
{0.0f, 0.0f},
};
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]);
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(CVector2D), &uvs[0]);
for (size_t i = 0; i < m->sprites.size(); ++i)
{
@ -661,16 +669,19 @@ void OverlayRenderer::RenderForegroundOverlays(
shader->Uniform(str_colorMul, sprite->m_Color);
CVector3D pos[4] = {
const CVector3D position[6] =
{
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y0,
sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y0,
sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y1,
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y0,
sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y1,
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y1
};
shader->VertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X);
shader->VertexPointer(3, GL_FLOAT, sizeof(CVector3D), &position[0].X);
glDrawArrays(GL_QUADS, 0, (GLsizei)4);
glDrawArrays(GL_TRIANGLES, 0, 6);
g_Renderer.GetStats().m_DrawCalls++;
g_Renderer.GetStats().m_OverlayTris += 2;