- try to speed up water rendering a bit, but especially pathfinder

This commit is contained in:
Mark Vejvoda 2012-05-12 00:01:05 +00:00
parent e2844938b7
commit ef39f93457
3 changed files with 33 additions and 19 deletions

View File

@ -323,9 +323,9 @@ private:
std::map<Vec2i,Vec2i> cameFrom, std::map<std::pair<Vec2i,Vec2i> ,
bool> canAddNode, Unit *& unit, int & maxNodeCount, int curFrameIndex) {
Chrono chrono;
//Chrono chrono;
//if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chrono.start();
chrono.start();
//chrono.start();
FactionState &factionState = factions[unitFactionIndex];
while(nodeLimitReached == false) {
@ -339,6 +339,24 @@ private:
pathFound = true;
break;
}
// Attempt to speed up pathfinding, only count up found path nodes
// to the # we need till we will refresh anyways
else {
//build next pointers
int currentPathNodeCount = 0;
Node *currNode= node;
while(currNode->prev != NULL) {
currentPathNodeCount++;
currNode->prev->next= currNode;
currNode= currNode->prev;
}
if(currentPathNodeCount > PathFinder::pathFindRefresh) {
pathFound = true;
break;
}
}
if(tryJPSPathfinder == true) {
closedNodes[node->pos] = true;
}
@ -401,9 +419,9 @@ private:
//!!!
//if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled == true && chrono.getMillis() > 1) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld nodeLimitReached = %d whileLoopCount = %d nodePoolCount = %d\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis(),nodeLimitReached,whileLoopCount,factionState.nodePoolCount);
if(chrono.getMillis() > 1) {
//if(chrono.getMillis() > 1) {
//printf("AStar for unit [%d - %s] took msecs: %lld nodeLimitReached = %d whileLoopCount = %d nodePoolCount = %d curFrameIndex = %d travel distance = %f\n",unit->getId(),unit->getFullName().c_str(), (long long int)chrono.getMillis(),nodeLimitReached,whileLoopCount,factionState.nodePoolCount,curFrameIndex,unit->getPos().dist(finalPos));
}
//}
}
};

View File

@ -4399,7 +4399,6 @@ void Renderer::renderWater() {
return;
}
bool closed= false;
const World *world= game->getWorld();
const Map *map= world->getMap();
@ -4419,7 +4418,7 @@ void Renderer::renderWater() {
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
if(textures3D){
if(textures3D) {
Texture3D *waterTex= world->getTileset()->getWaterTex();
if(waterTex == NULL) {
throw megaglest_runtime_error("waterTex == NULL");
@ -4444,6 +4443,10 @@ void Renderer::renderWater() {
assertGl();
int thisTeamIndex= world->getThisTeamIndex();
bool cellExplored = world->showWorldForPlayer(world->getThisFactionIndex());
bool closed= false;
Rect2i boundingRect= visibleQuad.computeBoundingRect();
Rect2i scaledRect= boundingRect/Map::cellScale;
scaledRect.clamp(0, 0, map->getSurfaceW()-1, map->getSurfaceH()-1);
@ -4453,7 +4456,6 @@ void Renderer::renderWater() {
glBegin(GL_TRIANGLE_STRIP);
for(int i=scaledRect.p[0].x; i<=scaledRect.p[1].x; ++i){
SurfaceCell *tc0= map->getSurfaceCell(i, j);
SurfaceCell *tc1= map->getSurfaceCell(i, j+1);
if(tc0 == NULL) {
@ -4463,14 +4465,11 @@ void Renderer::renderWater() {
throw megaglest_runtime_error("tc1 == NULL");
}
int thisTeamIndex= world->getThisTeamIndex();
bool cellExplored = world->showWorldForPlayer(world->getThisFactionIndex());
if(cellExplored == false) {
cellExplored = (tc0->isExplored(thisTeamIndex) || tc1->isExplored(thisTeamIndex));
}
if(tc0->getNearSubmerged() && cellExplored == true) {
if(cellExplored == true && tc0->getNearSubmerged()) {
glNormal3f(0.f, 1.f, 0.f);
closed= false;
@ -4501,8 +4500,7 @@ void Renderer::renderWater() {
}
else{
if(!closed){
if(closed == false) {
pointCount+= 2;
//vertex 1
@ -6670,11 +6668,6 @@ Vec4f Renderer::computeMoonPos(float time) {
#endif
}
Vec4f Renderer::computeWaterColor(float waterLevel, float cellHeight) {
const float waterFactor= 1.5f;
return Vec4f(1.f, 1.f, 1.f, clamp((waterLevel-cellHeight)*waterFactor, 0.f, 1.f));
}
// ==================== fast render ====================
//render units for selection purposes

View File

@ -597,7 +597,10 @@ private:
float computeMoonAngle(float time);
Vec4f computeSunPos(float time);
Vec4f computeMoonPos(float time);
Vec4f computeWaterColor(float waterLevel, float cellHeight);
inline Vec4f computeWaterColor(float waterLevel, float cellHeight) {
const float waterFactor= 1.5f;
return Vec4f(1.f, 1.f, 1.f, clamp((waterLevel-cellHeight) * waterFactor, 0.f, 1.f));
}
void checkExtension(const string &extension, const string &msg);
//selection render