mirror of
https://github.com/glest/glest-source.git
synced 2025-08-12 19:33:59 +02:00
fixed teamcolor bug from last code checkins dealing with threaded interpolation
This commit is contained in:
@@ -41,15 +41,6 @@ namespace Glest { namespace Game{
|
|||||||
// class MeshCallbackTeamColor
|
// class MeshCallbackTeamColor
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
class MeshCallbackTeamColor: public MeshCallback{
|
|
||||||
private:
|
|
||||||
const Texture *teamTexture;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void setTeamTexture(const Texture *teamTexture) {this->teamTexture= teamTexture;}
|
|
||||||
virtual void execute(const Mesh *mesh);
|
|
||||||
};
|
|
||||||
|
|
||||||
void MeshCallbackTeamColor::execute(const Mesh *mesh){
|
void MeshCallbackTeamColor::execute(const Mesh *mesh){
|
||||||
|
|
||||||
//team color
|
//team color
|
||||||
@@ -1687,7 +1678,7 @@ void Renderer::renderUnits(){
|
|||||||
std::vector<RenderEntity> vctEntity;
|
std::vector<RenderEntity> vctEntity;
|
||||||
|
|
||||||
for(int i=0; i<world->getFactionCount(); ++i){
|
for(int i=0; i<world->getFactionCount(); ++i){
|
||||||
meshCallbackTeamColor.setTeamTexture(world->getFaction(i)->getTexture());
|
// meshCallbackTeamColor.setTeamTexture(world->getFaction(i)->getTexture());
|
||||||
for(int j=0; j<world->getFaction(i)->getUnitCount(); ++j){
|
for(int j=0; j<world->getFaction(i)->getUnitCount(); ++j){
|
||||||
unit= world->getFaction(i)->getUnit(j);
|
unit= world->getFaction(i)->getUnit(j);
|
||||||
if(world->toRenderUnit(unit, visibleQuad)) {
|
if(world->toRenderUnit(unit, visibleQuad)) {
|
||||||
@@ -1728,7 +1719,7 @@ void Renderer::renderUnits(){
|
|||||||
unit->setVisible(true);
|
unit->setVisible(true);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit));
|
vctEntity.push_back(RenderEntity(retUnit,NULL,Vec2i(),unit,world->getFaction(i)->getTexture()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1738,7 +1729,7 @@ void Renderer::renderUnits(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
modelRenderer->begin(true, true, true, &meshCallbackTeamColor);
|
modelRenderer->begin(true, true, true, &meshCallbackTeamColor);
|
||||||
renderUnitList(vctEntity);
|
renderUnitList(vctEntity,&meshCallbackTeamColor);
|
||||||
modelRenderer->end();
|
modelRenderer->end();
|
||||||
|
|
||||||
//restore
|
//restore
|
||||||
@@ -1749,7 +1740,7 @@ void Renderer::renderUnits(){
|
|||||||
assertGl();
|
assertGl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderUnitList(std::vector<RenderEntity> &vctEntity) {
|
void Renderer::renderUnitList(std::vector<RenderEntity> &vctEntity,MeshCallbackTeamColor *meshCallbackTeamColor) {
|
||||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] vctEntity.size() = %d\n",__FILE__,__FUNCTION__,__LINE__,vctEntity.size());
|
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] vctEntity.size() = %d\n",__FILE__,__FUNCTION__,__LINE__,vctEntity.size());
|
||||||
|
|
||||||
// Run interpolation threaded if the thread is created
|
// Run interpolation threaded if the thread is created
|
||||||
@@ -1778,7 +1769,7 @@ void Renderer::renderUnitList(std::vector<RenderEntity> &vctEntity) {
|
|||||||
|
|
||||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] idx = %d\n",__FILE__,__FUNCTION__,__LINE__,idx);
|
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] idx = %d\n",__FILE__,__FUNCTION__,__LINE__,idx);
|
||||||
|
|
||||||
renderUnit(entity);
|
renderUnit(entity,meshCallbackTeamColor);
|
||||||
entityPendingLookup[idx] = true;
|
entityPendingLookup[idx] = true;
|
||||||
renderedUnitCount++;
|
renderedUnitCount++;
|
||||||
|
|
||||||
@@ -1796,9 +1787,13 @@ void Renderer::renderUnitList(std::vector<RenderEntity> &vctEntity) {
|
|||||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] vctEntity.size() = %d\n",__FILE__,__FUNCTION__,__LINE__,vctEntity.size());
|
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] vctEntity.size() = %d\n",__FILE__,__FUNCTION__,__LINE__,vctEntity.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderUnit(RenderEntity &entity) {
|
void Renderer::renderUnit(RenderEntity &entity,MeshCallbackTeamColor *meshCallbackTeamColor) {
|
||||||
Unit *unit = entity.unit;
|
Unit *unit = entity.unit;
|
||||||
if(unit != NULL) {
|
if(unit != NULL) {
|
||||||
|
if(meshCallbackTeamColor != NULL) {
|
||||||
|
meshCallbackTeamColor->setTeamTexture(entity.teamTexture);
|
||||||
|
}
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
|
@@ -28,6 +28,8 @@
|
|||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "base_thread.h"
|
#include "base_thread.h"
|
||||||
|
#include "model_renderer.h"
|
||||||
|
#include "model.h"
|
||||||
|
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
@@ -50,9 +52,24 @@ using Shared::Graphics::Model;
|
|||||||
using Shared::Graphics::ParticleSystem;
|
using Shared::Graphics::ParticleSystem;
|
||||||
using Shared::Graphics::Pixmap2D;
|
using Shared::Graphics::Pixmap2D;
|
||||||
using Shared::Graphics::Camera;
|
using Shared::Graphics::Camera;
|
||||||
|
using Shared::Graphics::MeshCallback;
|
||||||
|
using Shared::Graphics::Mesh;
|
||||||
|
|
||||||
using namespace Shared::PlatformCommon;
|
using namespace Shared::PlatformCommon;
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// class MeshCallbackTeamColor
|
||||||
|
// =====================================================
|
||||||
|
|
||||||
|
class MeshCallbackTeamColor: public MeshCallback{
|
||||||
|
private:
|
||||||
|
const Texture *teamTexture;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void setTeamTexture(const Texture *teamTexture) {this->teamTexture= teamTexture;}
|
||||||
|
virtual void execute(const Mesh *mesh);
|
||||||
|
};
|
||||||
|
|
||||||
//non shared classes
|
//non shared classes
|
||||||
class Config;
|
class Config;
|
||||||
class Game;
|
class Game;
|
||||||
@@ -102,6 +119,7 @@ protected:
|
|||||||
this->o = obj.o;
|
this->o = obj.o;
|
||||||
this->mapPos = obj.mapPos;
|
this->mapPos = obj.mapPos;
|
||||||
this->unit = obj.unit;
|
this->unit = obj.unit;
|
||||||
|
this->teamTexture = obj.teamTexture;;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -110,13 +128,15 @@ public:
|
|||||||
this->type = retObject;
|
this->type = retObject;
|
||||||
this->o = NULL;
|
this->o = NULL;
|
||||||
this->unit = NULL;
|
this->unit = NULL;
|
||||||
|
this->teamTexture = NULL;
|
||||||
setState(resNone);
|
setState(resNone);
|
||||||
}
|
}
|
||||||
RenderEntity(RenderEntityType type,Object *o, Vec2i mapPos, Unit *unit) {
|
RenderEntity(RenderEntityType type,Object *o, Vec2i mapPos, Unit *unit,const Texture2D *teamTexture=NULL) {
|
||||||
this->type = type;
|
this->type = type;
|
||||||
this->o = o;
|
this->o = o;
|
||||||
this->mapPos = mapPos;
|
this->mapPos = mapPos;
|
||||||
this->unit = unit;
|
this->unit = unit;
|
||||||
|
this->teamTexture = teamTexture;
|
||||||
setState(resNone);
|
setState(resNone);
|
||||||
}
|
}
|
||||||
RenderEntity(const RenderEntity &obj) {
|
RenderEntity(const RenderEntity &obj) {
|
||||||
@@ -131,6 +151,7 @@ public:
|
|||||||
Object *o;
|
Object *o;
|
||||||
Vec2i mapPos;
|
Vec2i mapPos;
|
||||||
Unit *unit;
|
Unit *unit;
|
||||||
|
const Texture2D *teamTexture;
|
||||||
|
|
||||||
RenderEntityState getState() {
|
RenderEntityState getState() {
|
||||||
RenderEntityState result;
|
RenderEntityState result;
|
||||||
@@ -359,8 +380,8 @@ public:
|
|||||||
void renderWater();
|
void renderWater();
|
||||||
void renderUnits();
|
void renderUnits();
|
||||||
void prepareUnitForRender(RenderEntity &entity);
|
void prepareUnitForRender(RenderEntity &entity);
|
||||||
void renderUnitList(std::vector<RenderEntity> &vctEntity);
|
void renderUnitList(std::vector<RenderEntity> &vctEntity,MeshCallbackTeamColor *meshCallbackTeamColor);
|
||||||
void renderUnit(RenderEntity &entity);
|
void renderUnit(RenderEntity &entity,MeshCallbackTeamColor *meshCallbackTeamColor);
|
||||||
|
|
||||||
void renderSelectionEffects();
|
void renderSelectionEffects();
|
||||||
void renderWaterEffects();
|
void renderWaterEffects();
|
||||||
|
58
source/shared_lib/include/graphics/model_renderer.h
Normal file
58
source/shared_lib/include/graphics/model_renderer.h
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
// ==============================================================
|
||||||
|
// This file is part of Glest Shared Library (www.glest.org)
|
||||||
|
//
|
||||||
|
// Copyright (C) 2001-2008 Martio Figueroa
|
||||||
|
//
|
||||||
|
// You can redistribute this code and/or modify it under
|
||||||
|
// the terms of the GNU General Public License as published
|
||||||
|
// by the Free Software Foundation; either version 2 of the
|
||||||
|
// License, or (at your option) any later version
|
||||||
|
// ==============================================================
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _SHARED_GRAPHICS_MODELRENDERER_H_
|
||||||
|
#define _SHARED_GRAPHICS_MODELRENDERER_H_
|
||||||
|
|
||||||
|
#include "model.h"
|
||||||
|
|
||||||
|
namespace Shared{ namespace Graphics{
|
||||||
|
|
||||||
|
class Texture;
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// class MeshCallback
|
||||||
|
//
|
||||||
|
/// This gets called before rendering mesh
|
||||||
|
// =====================================================
|
||||||
|
|
||||||
|
class MeshCallback{
|
||||||
|
public:
|
||||||
|
virtual ~MeshCallback(){};
|
||||||
|
virtual void execute(const Mesh *mesh)= 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// class ModelRenderer
|
||||||
|
// =====================================================
|
||||||
|
|
||||||
|
class ModelRenderer{
|
||||||
|
protected:
|
||||||
|
bool renderNormals;
|
||||||
|
bool renderTextures;
|
||||||
|
bool renderColors;
|
||||||
|
MeshCallback *meshCallback;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ModelRenderer() {meshCallback= NULL;}
|
||||||
|
|
||||||
|
virtual ~ModelRenderer(){};
|
||||||
|
|
||||||
|
virtual void begin(bool renderNormals, bool renderTextures, bool renderColors, MeshCallback *meshCallback= NULL)=0;
|
||||||
|
virtual void end()=0;
|
||||||
|
virtual void render(const Model *model)=0;
|
||||||
|
virtual void renderNormalsOnly(const Model *model)=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
}}//end namespace
|
||||||
|
|
||||||
|
#endif
|
Reference in New Issue
Block a user