From 731df7f16ecb1c73de697a0e3ecca1d653b073cd Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Mon, 21 Jun 2010 23:38:53 +0000 Subject: [PATCH] - changed rendering to be nearly the same as 3.3.4.3 --- source/glest_game/graphics/renderer.cpp | 113 +++++++++++++++++------- source/glest_game/graphics/renderer.h | 3 + 2 files changed, 82 insertions(+), 34 deletions(-) diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 67a93175..153d027b 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -1290,7 +1290,7 @@ void Renderer::renderObjects(const int renderFps, const int worldFrameCount) { glEnable(GL_COLOR_MATERIAL); glAlphaFunc(GL_GREATER, 0.5f); - //modelRenderer->begin(true, true, false); + modelRenderer->begin(true, true, false); int thisTeamIndex= world->getThisTeamIndex(); std::vector vctEntity; @@ -1308,23 +1308,30 @@ void Renderer::renderObjects(const int renderFps, const int worldFrameCount) { bool isVisible = true; if(isExplored == true && isVisible == true) { - /* - if(renderFps >= 0 && renderFps < MIN_RENDER_FPS_ALLOWED) { - int renderLag = worldFrameCount - o->getLastRenderFrame(); - if(renderLag > MIN_RENDER_LAG_ALLOWED) { - vctEntity.push_back(RenderEntity(retObject,o,mapPos,NULL)); - } - } - else { - */ - vctEntity.push_back(RenderEntity(retObject,o,mapPos,NULL)); +/* + // + //if(renderFps >= 0 && renderFps < MIN_RENDER_FPS_ALLOWED) { + // int renderLag = worldFrameCount - o->getLastRenderFrame(); + // if(renderLag > MIN_RENDER_LAG_ALLOWED) { + // vctEntity.push_back(RenderEntity(retObject,o,mapPos,NULL)); + // } //} + //else { + // + vctEntity.push_back(RenderEntity(retObject,o,mapPos,NULL)); + //} +*/ + const Model *objModel= o->getModel(); + if(objModel != NULL) { + objModel->updateInterpolationData(0.f, true); + } + renderObject(o,mapPos,baseFogColor,worldFrameCount); } } } - modelRenderer->begin(true, true, false); - renderObjectList(vctEntity,baseFogColor,renderFps, worldFrameCount); + //modelRenderer->begin(true, true, false); + //renderObjectList(vctEntity,baseFogColor,renderFps, worldFrameCount); modelRenderer->end(); //restore @@ -1373,6 +1380,16 @@ void Renderer::prepareObjectForRender(RenderEntity &entity) { void Renderer::renderObject(RenderEntity &entity,const Vec3f &baseFogColor,const int renderFps, const int worldFrameCount) { Object *o = entity.o; Vec2i &mapPos = entity.mapPos; + if(o != NULL) { + const Model *objModel= o->getModel(); + if(objModel != NULL) { + renderObject(o,mapPos,baseFogColor,worldFrameCount); + entity.setState(resRendered); + } + } +} + +void Renderer::renderObject(Object *o,Vec2i &mapPos,const Vec3f &baseFogColor,const int worldFrameCount) { if(o != NULL) { const Model *objModel= o->getModel(); if(objModel != NULL) { @@ -1404,8 +1421,6 @@ void Renderer::renderObject(RenderEntity &entity,const Vec3f &baseFogColor,const pointCount+= objModel->getVertexCount(); glPopMatrix(); - - entity.setState(resRendered); } } } @@ -1555,22 +1570,30 @@ void Renderer::renderUnits(const int renderFps, const int worldFrameCount) { enableProjectiveTexturing(); } glActiveTexture(baseTexUnit); + modelRenderer->begin(true, true, true, &meshCallbackTeamColor); std::vector vctEntity; - for(int i=0; igetFactionCount(); ++i){ + for(int i=0; igetFactionCount(); ++i) { + const Texture2D *teamTexture = world->getFaction(i)->getTexture(); for(int j=0; jgetFaction(i)->getUnitCount(); ++j){ Unit *unit = world->getFaction(i)->getUnit(j); if(world->toRenderUnit(unit, visibleQuad)) { +/* if(renderFps >= 0 && renderFps < MIN_RENDER_FPS_ALLOWED) { int unitRenderLag = worldFrameCount - unit->getLastRenderFrame(); if(unitRenderLag > MIN_RENDER_LAG_ALLOWED) { - vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit,world->getFaction(i)->getTexture())); + vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit,teamTexture)); } } else { - vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit,world->getFaction(i)->getTexture())); + vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit,teamTexture)); } +*/ + + const Model *model= unit->getCurrentModel(); + model->updateInterpolationData(unit->getAnimProgress(), unit->isAlive()); + renderUnit(unit,&meshCallbackTeamColor, teamTexture, worldFrameCount); } else { unit->setVisible(false); @@ -1578,8 +1601,8 @@ void Renderer::renderUnits(const int renderFps, const int worldFrameCount) { } } - modelRenderer->begin(true, true, true, &meshCallbackTeamColor); - renderUnitList(vctEntity,&meshCallbackTeamColor,renderFps, worldFrameCount); + //modelRenderer->begin(true, true, true, &meshCallbackTeamColor); + //renderUnitList(vctEntity,&meshCallbackTeamColor,renderFps, worldFrameCount); modelRenderer->end(); //restore @@ -1616,9 +1639,16 @@ void Renderer::renderUnitList(std::vector &vctEntity,MeshCallbackT void Renderer::renderUnit(RenderEntity &entity,MeshCallbackTeamColor *meshCallbackTeamColor,const int renderFps, const int worldFrameCount) { Unit *unit = entity.unit; + if(unit != NULL) { + renderUnit(unit,meshCallbackTeamColor, entity.teamTexture, worldFrameCount); + entity.setState(resRendered); + } +} + +void Renderer::renderUnit(Unit *unit,MeshCallbackTeamColor *meshCallbackTeamColor, const Texture2D *teamTexture, const int worldFrameCount) { if(unit != NULL) { if(meshCallbackTeamColor != NULL) { - meshCallbackTeamColor->setTeamTexture(entity.teamTexture); + meshCallbackTeamColor->setTeamTexture(teamTexture); } glMatrixMode(GL_MODELVIEW); @@ -1660,11 +1690,10 @@ void Renderer::renderUnit(RenderEntity &entity,MeshCallbackTeamColor *meshCallba // Add to the pending render unit title list renderUnitTitleList.push_back(std::pair(unit,computeScreenPosition(unit->getCurrVectorFlat())) ); } - - entity.setState(resRendered); } } + void Renderer::prepareUnitForRender(RenderEntity &entity) { if(entity.unit != NULL) { const Model *model= entity.unit->getCurrentModel(); @@ -2699,14 +2728,16 @@ void Renderer::renderUnitsFast(){ std::vector vctEntity; -// modelRenderer->begin(false, false, false); -// glInitNames(); + modelRenderer->begin(false, false, false); + glInitNames(); + for(int i=0; igetFactionCount(); ++i){ // glPushName(i); for(int j=0; jgetFaction(i)->getUnitCount(); ++j){ // glPushName(j); Unit *unit= world->getFaction(i)->getUnit(j); if(world->toRenderUnit(unit, visibleQuad)) { + Vec2i mapPos = Vec2i(i,j); /* glMatrixMode(GL_MODELVIEW); @@ -2727,18 +2758,25 @@ void Renderer::renderUnitsFast(){ glPopMatrix(); */ - vctEntity.push_back(RenderEntity(retUnitFast,NULL,Vec2i(i,j),unit)); + //vctEntity.push_back(RenderEntity(retUnitFast,NULL,mapPos,unit)); + + const Model *model= unit->getCurrentModel(); + if(model != NULL) { + model->updateInterpolationVertices(unit->getAnimProgress(), unit->isAlive()); + } + + renderUnitFast(unit, mapPos); } //glPopName(); } // glPopName(); } - glInitNames(); +// glInitNames(); - modelRenderer->begin(false, false, false); - renderUnitFastList(vctEntity); +// modelRenderer->begin(false, false, false); +// renderUnitFastList(vctEntity); modelRenderer->end(); glPopAttrib(); @@ -2755,8 +2793,15 @@ void Renderer::renderUnitFastList(std::vector &vctEntity) { void Renderer::renderUnitFast(RenderEntity &entity) { Unit *unit = entity.unit; if(unit != NULL) { - glPushName(entity.mapPos.x); - glPushName(entity.mapPos.y); + renderUnitFast(unit, entity.mapPos); + entity.setState(resRendered); + } +} + +void Renderer::renderUnitFast(Unit *unit, Vec2i &mapPos) { + if(unit != NULL) { + glPushName(mapPos.x); + glPushName(mapPos.y); glMatrixMode(GL_MODELVIEW); @@ -2778,15 +2823,15 @@ void Renderer::renderUnitFast(RenderEntity &entity) { glPopMatrix(); glPopName(); glPopName(); - - entity.setState(resRendered); } } void Renderer::prepareUnitFastForRender(RenderEntity &entity) { if(entity.unit != NULL) { const Model *model= entity.unit->getCurrentModel(); - model->updateInterpolationVertices(entity.unit->getAnimProgress(), entity.unit->isAlive()); + if(model != NULL) { + model->updateInterpolationVertices(entity.unit->getAnimProgress(), entity.unit->isAlive()); + } } entity.setState(resInterpolated); } diff --git a/source/glest_game/graphics/renderer.h b/source/glest_game/graphics/renderer.h index 48a5a410..c4a24691 100644 --- a/source/glest_game/graphics/renderer.h +++ b/source/glest_game/graphics/renderer.h @@ -334,6 +334,7 @@ public: void renderSurface(); void renderObjects(const int renderFps, const int worldFrameCount); void renderObject(RenderEntity &entity,const Vec3f &baseFogColor,const int renderFps, const int worldFrameCount); + void renderObject(Object *o,Vec2i &mapPos,const Vec3f &baseFogColor,const int worldFrameCount); void prepareObjectForRender(RenderEntity &entity); void renderObjectList(std::vector &vctEntity,const Vec3f &baseFogColor,const int renderFps, const int worldFrameCount); @@ -342,6 +343,7 @@ public: void prepareUnitForRender(RenderEntity &entity); void renderUnitList(std::vector &vctEntity,MeshCallbackTeamColor *meshCallbackTeamColor,const int renderFps, const int worldFrameCount); void renderUnit(RenderEntity &entity,MeshCallbackTeamColor *meshCallbackTeamColor,const int renderFps, const int worldFrameCount); + void renderUnit(Unit *unit,MeshCallbackTeamColor *meshCallbackTeamColor, const Texture2D *teamTexture, const int worldFrameCount); void renderSelectionEffects(); void renderWaterEffects(); @@ -399,6 +401,7 @@ private: void renderUnitsFast(); void renderUnitFastList(std::vector &vctEntity); void renderUnitFast(RenderEntity &entity); + void renderUnitFast(Unit *unit, Vec2i &mapPos); void prepareUnitFastForRender(RenderEntity &entity); //gl requirements