mirror of
https://github.com/glest/glest-source.git
synced 2025-09-02 04:22:32 +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;
|
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) {
|
void Renderer::renderText3D(const string &text, Font3D *font, float alpha, int x, int y, bool centered) {
|
||||||
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
@@ -1633,7 +1652,8 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
|||||||
|
|
||||||
if(color != NULL) {
|
if(color != NULL) {
|
||||||
if(renderText3DEnabled == true) {
|
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 {
|
else {
|
||||||
renderText(lines[i], label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
|
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 {
|
else {
|
||||||
if(renderText3DEnabled == true) {
|
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 {
|
else {
|
||||||
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||||
@@ -1841,7 +1862,9 @@ void Renderer::renderCheckBox(const GraphicCheckBox *box) {
|
|||||||
|
|
||||||
//lighting
|
//lighting
|
||||||
float anim= GraphicComponent::getAnim();
|
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()) {
|
if(box->getLighted() && box->getEditable()) {
|
||||||
const int lightSize= 0;
|
const int lightSize= 0;
|
||||||
@@ -5489,6 +5512,49 @@ VisibleQuadContainerCache & Renderer::getQuadCache( bool updateOnDirtyFrame,
|
|||||||
return quadCache;
|
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,
|
void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
int screenPosX, int screenPosY,
|
int screenPosX, int screenPosY,
|
||||||
Texture2D **renderToTexture) {
|
Texture2D **renderToTexture) {
|
||||||
|
@@ -371,6 +371,10 @@ public:
|
|||||||
Vec2f getCentered3DPos(const string &text, Font3D *font, Vec2f &pos, int w, int h);
|
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 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, 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
|
//components
|
||||||
void renderLabel(GraphicLabel *label);
|
void renderLabel(GraphicLabel *label);
|
||||||
|
@@ -42,6 +42,7 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
|||||||
mouseX = 0;
|
mouseX = 0;
|
||||||
mouseY = 0;
|
mouseY = 0;
|
||||||
mouse2d = 0;
|
mouse2d = 0;
|
||||||
|
renderToTexture = NULL;
|
||||||
|
|
||||||
const Metrics &metrics= Metrics::getInstance();
|
const Metrics &metrics= Metrics::getInstance();
|
||||||
Lang &lang= Lang::getInstance();
|
Lang &lang= Lang::getInstance();
|
||||||
@@ -59,7 +60,14 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
|||||||
|
|
||||||
BattleEnd::~BattleEnd() {
|
BattleEnd::~BattleEnd() {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
SoundRenderer::getInstance().playMusic(CoreData::getInstance().getMenuMusic());
|
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__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +81,29 @@ void BattleEnd::update() {
|
|||||||
void BattleEnd::render() {
|
void BattleEnd::render() {
|
||||||
Renderer &renderer= Renderer::getInstance();
|
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();
|
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
|
||||||
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
|
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
|
||||||
TextRenderer *textRenderer = NULL;
|
TextRenderer *textRenderer = NULL;
|
||||||
@@ -352,10 +383,15 @@ void BattleEnd::render(){
|
|||||||
renderer.renderMessageBox(&mainMessageBox);
|
renderer.renderMessageBox(&mainMessageBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(renderToTexture == NULL) {
|
||||||
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
|
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer.endRenderToTexture(&renderToTexture);
|
||||||
|
|
||||||
renderer.swapBuffers();
|
renderer.swapBuffers();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BattleEnd::keyDown(char key){
|
void BattleEnd::keyDown(char key){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
@@ -33,6 +33,7 @@ private:
|
|||||||
int mouseY;
|
int mouseY;
|
||||||
int mouse2d;
|
int mouse2d;
|
||||||
GraphicMessageBox mainMessageBox;
|
GraphicMessageBox mainMessageBox;
|
||||||
|
Texture2D *renderToTexture;
|
||||||
|
|
||||||
void showMessageBox(const string &text, const string &header, bool toggle);
|
void showMessageBox(const string &text, const string &header, bool toggle);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user