mirror of
https://github.com/glest/glest-source.git
synced 2025-09-01 20:12:40 +02:00
- render battle end screen to texture buffer on first render so it takes less fps to render after the 1st frame
This commit is contained in:
@@ -1387,6 +1387,25 @@ Vec2i computeCenteredPos(const string &text, Font3D *font, int x, int y) {
|
||||
return textPos;
|
||||
}
|
||||
|
||||
void Renderer::renderTextBoundingBox3D(const string &text, Font3D *font, float alpha, int x, int y, int w, int h, bool centered) {
|
||||
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
||||
glEnable(GL_BLEND);
|
||||
glColor4fv(Vec4f(1.f, 1.f, 1.f, alpha).ptr());
|
||||
|
||||
Vec2f pos= Vec2f(x, y);
|
||||
//Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
if(centered == true) {
|
||||
getCentered3DPos(text, font, pos, w, h);
|
||||
}
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
textRenderer3D->render(text, pos.x, pos.y);
|
||||
textRenderer3D->end();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glPopAttrib();
|
||||
}
|
||||
|
||||
void Renderer::renderText3D(const string &text, Font3D *font, float alpha, int x, int y, bool centered) {
|
||||
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
||||
glEnable(GL_BLEND);
|
||||
@@ -1633,7 +1652,8 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
||||
|
||||
if(color != NULL) {
|
||||
if(renderText3DEnabled == true) {
|
||||
renderText3D(lines[i], label->getFont3D(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
//renderText3D(lines[i], label->getFont3D(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), (*color), x, y, w, h, label->getCentered());
|
||||
}
|
||||
else {
|
||||
renderText(lines[i], label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
@@ -1641,7 +1661,8 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
||||
}
|
||||
else {
|
||||
if(renderText3DEnabled == true) {
|
||||
renderText3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
//renderText3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), x, y, w, h, label->getCentered());
|
||||
}
|
||||
else {
|
||||
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
@@ -1841,7 +1862,9 @@ void Renderer::renderCheckBox(const GraphicCheckBox *box) {
|
||||
|
||||
//lighting
|
||||
float anim= GraphicComponent::getAnim();
|
||||
if(anim>0.5f) anim= 1.f-anim;
|
||||
if(anim > 0.5f) {
|
||||
anim = 1.f - anim;
|
||||
}
|
||||
|
||||
if(box->getLighted() && box->getEditable()) {
|
||||
const int lightSize= 0;
|
||||
@@ -5489,6 +5512,49 @@ VisibleQuadContainerCache & Renderer::getQuadCache( bool updateOnDirtyFrame,
|
||||
return quadCache;
|
||||
}
|
||||
|
||||
void Renderer::beginRenderToTexture(Texture2D **renderToTexture) {
|
||||
static bool supportFBOs = Texture2DGl().supports_FBO_RBO();
|
||||
|
||||
if(supportFBOs == true && renderToTexture != NULL) {
|
||||
Config &config= Config::getInstance();
|
||||
Texture2D::Filter textureFilter = strToTextureFilter(config.getString("Filter"));
|
||||
int maxAnisotropy = config.getInt("FilterMaxAnisotropy");
|
||||
|
||||
const Metrics &metrics = Metrics::getInstance();
|
||||
|
||||
*renderToTexture = GraphicsInterface::getInstance().getFactory()->newTexture2D();
|
||||
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
|
||||
texture->setMipmap(false);
|
||||
Pixmap2D *pixmapScreenShot = texture->getPixmap();
|
||||
pixmapScreenShot->init(metrics.getScreenW(), metrics.getScreenH(), 4);
|
||||
texture->setForceCompressionDisabled(true);
|
||||
texture->init(textureFilter,maxAnisotropy);
|
||||
texture->setup_FBO_RBO();
|
||||
|
||||
assertGl();
|
||||
|
||||
if(texture->checkFrameBufferStatus() == false) {
|
||||
//printf("******************** WARNING CANNOT Attach to FBO!\n");
|
||||
texture->end();
|
||||
delete texture;
|
||||
*renderToTexture=NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer::endRenderToTexture(Texture2D **renderToTexture) {
|
||||
static bool supportFBOs = Texture2DGl().supports_FBO_RBO();
|
||||
|
||||
if(supportFBOs == true && renderToTexture != NULL) {
|
||||
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
|
||||
if(texture != NULL) {
|
||||
texture->dettachFrameBufferFromTexture();
|
||||
}
|
||||
|
||||
assertGl();
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||
int screenPosX, int screenPosY,
|
||||
Texture2D **renderToTexture) {
|
||||
|
@@ -371,6 +371,10 @@ public:
|
||||
Vec2f getCentered3DPos(const string &text, Font3D *font, Vec2f &pos, int w, int h);
|
||||
void renderTextBoundingBox3D(const string &text, Font3D *font, const Vec4f &color, int x, int y, int w, int h, bool centered);
|
||||
void renderTextBoundingBox3D(const string &text, Font3D *font, const Vec3f &color, int x, int y, int w, int h, bool centered);
|
||||
void renderTextBoundingBox3D(const string &text, Font3D *font, float alpha, int x, int y, int w, int h, bool centered);
|
||||
|
||||
void beginRenderToTexture(Texture2D **renderToTexture);
|
||||
void endRenderToTexture(Texture2D **renderToTexture);
|
||||
|
||||
//components
|
||||
void renderLabel(GraphicLabel *label);
|
||||
|
@@ -42,6 +42,7 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
||||
mouseX = 0;
|
||||
mouseY = 0;
|
||||
mouse2d = 0;
|
||||
renderToTexture = NULL;
|
||||
|
||||
const Metrics &metrics= Metrics::getInstance();
|
||||
Lang &lang= Lang::getInstance();
|
||||
@@ -59,7 +60,14 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
||||
|
||||
BattleEnd::~BattleEnd() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
SoundRenderer::getInstance().playMusic(CoreData::getInstance().getMenuMusic());
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
delete renderToTexture;
|
||||
renderToTexture = NULL;
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
@@ -73,6 +81,29 @@ void BattleEnd::update() {
|
||||
void BattleEnd::render() {
|
||||
Renderer &renderer= Renderer::getInstance();
|
||||
|
||||
if(renderToTexture != NULL) {
|
||||
//printf("Rendering from texture!\n");
|
||||
|
||||
renderer.clearBuffers();
|
||||
renderer.reset2d();
|
||||
renderer.renderBackground(renderToTexture);
|
||||
|
||||
renderer.renderButton(&buttonExit);
|
||||
|
||||
//exit message box
|
||||
if(mainMessageBox.getEnabled()){
|
||||
renderer.renderMessageBox(&mainMessageBox);
|
||||
}
|
||||
|
||||
renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim);
|
||||
|
||||
renderer.swapBuffers();
|
||||
}
|
||||
else {
|
||||
//printf("Rendering to texture!\n");
|
||||
|
||||
renderer.beginRenderToTexture(&renderToTexture);
|
||||
|
||||
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
|
||||
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
|
||||
TextRenderer *textRenderer = NULL;
|
||||
@@ -352,10 +383,15 @@ void BattleEnd::render(){
|
||||
renderer.renderMessageBox(&mainMessageBox);
|
||||
}
|
||||
|
||||
if(renderToTexture == NULL) {
|
||||
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
|
||||
}
|
||||
|
||||
renderer.endRenderToTexture(&renderToTexture);
|
||||
|
||||
renderer.swapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
void BattleEnd::keyDown(char key){
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
@@ -33,6 +33,7 @@ private:
|
||||
int mouseY;
|
||||
int mouse2d;
|
||||
GraphicMessageBox mainMessageBox;
|
||||
Texture2D *renderToTexture;
|
||||
|
||||
void showMessageBox(const string &text, const string &header, bool toggle);
|
||||
|
||||
|
Reference in New Issue
Block a user