Remove some GL code in race gui

This commit is contained in:
Benau 2021-04-21 12:17:45 +08:00
parent c58de0a91f
commit b6d58f55c4
2 changed files with 18 additions and 10 deletions

View File

@ -29,6 +29,7 @@ using namespace irr;
#include "config/user_config.hpp"
#include "font/font_drawer.hpp"
#include "graphics/camera.hpp"
#include "graphics/central_settings.hpp"
#include "graphics/2dutils.hpp"
#ifndef SERVER_ONLY
#include "graphics/glwrap.hpp"
@ -61,6 +62,8 @@ using namespace irr;
#include "utils/string_utils.hpp"
#include "utils/translation.hpp"
#include <algorithm>
/** The constructor is called before anything is attached to the scene node.
* So rendering to a texture can be done here. But world is not yet fully
* created, so only the race manager can be accessed safely.
@ -856,9 +859,9 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart,
state, gauge_width, gauge_height, offset);
if(kart->getControls().getNitro() || kart->isOnMinNitroTime())
drawMeterTexture(m_gauge_full_bright, vertices, count);
drawMeterTexture(m_gauge_full_bright, vertices, count, true);
else
drawMeterTexture(m_gauge_full, vertices, count);
drawMeterTexture(m_gauge_full, vertices, count, true);
}
// Target
@ -873,7 +876,7 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart,
unsigned int count = computeVerticesForMeter(position, threshold, vertices, vertices_count,
coin_target, gauge_width, gauge_height, offset);
drawMeterTexture(m_gauge_goal, vertices, count);
drawMeterTexture(m_gauge_goal, vertices, count, true);
}
#endif
} // drawEnergyMeter
@ -1097,7 +1100,7 @@ void RaceGUI::drawSpeedEnergyRank(const AbstractKart* kart,
#endif
} // drawSpeedEnergyRank
void RaceGUI::drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count)
void RaceGUI::drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count, bool reverse)
{
#ifndef SERVER_ONLY
//Should be greater or equal than the greatest vertices_count used by the meter functions
@ -1110,19 +1113,24 @@ void RaceGUI::drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex
vertices[i].Color = video::SColor(255, 255, 255, 255);
}
if (reverse)
std::reverse(vertices + 1, vertices + count);
video::SMaterial m;
m.setTexture(0, meter_texture);
m.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
irr_driver->getVideoDriver()->setMaterial(m);
glEnable(GL_BLEND);
glDisable(GL_CULL_FACE);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
if (CVS->isGLSL())
{
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}
draw2DVertexPrimitiveList(m.getTexture(0), vertices, count,
index, count-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN);
glDisable(GL_BLEND);
glEnable(GL_CULL_FACE);
if (CVS->isGLSL())
glDisable(GL_BLEND);
#endif
} // drawMeterTexture

View File

@ -133,7 +133,7 @@ private:
/* Helper functions for drawing meters */
void drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count);
void drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count, bool reverse = false);
unsigned int computeVerticesForMeter(core::vector2df position[], float threshold[], video::S3DVertex vertices[],
unsigned int vertices_count, float measure, int gauge_width,