Added help for truecolor light testing thing. Also added colors.

develop
Warmist 2013-06-22 14:14:35 +03:00
parent c273377284
commit 906864feaa
2 changed files with 63 additions and 23 deletions

@ -166,6 +166,27 @@ public:
colorizeTile(x,y); colorizeTile(x,y);
}; };
}; };
struct lightCell
{
float r,g,b;
lightCell():r(0),g(0),b(0)
{
}
lightCell(float r,float g,float b):r(r),g(g),b(b)
{
}
lightCell operator*(float val)
{
return lightCell(r*val,g*val,b*val);
}
lightCell operator+(const lightCell& other)
{
return lightCell(r+other.r,g+other.g,b+other.b);
}
};
struct renderer_test : public renderer_wrap { struct renderer_test : public renderer_wrap {
private: private:
void colorizeTile(int x,int y) void colorizeTile(int x,int y)
@ -175,34 +196,34 @@ private:
float *fg = p->fg + tile * 4 * 6; float *fg = p->fg + tile * 4 * 6;
float *bg = p->bg + tile * 4 * 6; float *bg = p->bg + tile * 4 * 6;
float *tex = p->tex + tile * 2 * 6; float *tex = p->tex + tile * 2 * 6;
float v=opacity[tile]; lightCell light=lightGrid[tile];
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
*(fg++) *= v; *(fg++) *= light.r;
*(fg++) *= v; *(fg++) *= light.g;
*(fg++) *= v; *(fg++) *= light.b;
*(fg++) = 1; *(fg++) = 1;
*(bg++) *= v; *(bg++) *= light.r;
*(bg++) *= v; *(bg++) *= light.g;
*(bg++) *= v; *(bg++) *= light.b;
*(bg++) = 1; *(bg++) = 1;
} }
} }
void reinitOpacity(int w,int h) void reinitLightGrid(int w,int h)
{ {
tthread::lock_guard<tthread::fast_mutex> guard(dataMutex); tthread::lock_guard<tthread::fast_mutex> guard(dataMutex);
opacity.resize(w*h); lightGrid.resize(w*h);
} }
void reinitOpacity() void reinitLightGrid()
{ {
reinitOpacity(df::global::gps->dimy,df::global::gps->dimx); reinitLightGrid(df::global::gps->dimy,df::global::gps->dimx);
} }
public: public:
tthread::fast_mutex dataMutex; tthread::fast_mutex dataMutex;
std::vector<float> opacity; std::vector<lightCell> lightGrid;
renderer_test(renderer* parent):renderer_wrap(parent) renderer_test(renderer* parent):renderer_wrap(parent)
{ {
reinitOpacity(); reinitLightGrid();
} }
virtual void update_tile(int32_t x, int32_t y) { virtual void update_tile(int32_t x, int32_t y) {
renderer_wrap::update_tile(x,y); renderer_wrap::update_tile(x,y);
@ -223,10 +244,10 @@ public:
}; };
virtual void grid_resize(int32_t w, int32_t h) { virtual void grid_resize(int32_t w, int32_t h) {
renderer_wrap::grid_resize(w,h); renderer_wrap::grid_resize(w,h);
reinitOpacity(w,h); reinitLightGrid(w,h);
}; };
virtual void resize(int32_t w, int32_t h) { virtual void resize(int32_t w, int32_t h) {
renderer_wrap::resize(w,h); renderer_wrap::resize(w,h);
reinitOpacity(w,h); reinitLightGrid(w,h);
} }
}; };

@ -30,6 +30,7 @@ DFhackCExport command_result plugin_init (color_ostream &out, std::vector <Plugi
commands.push_back(PluginCommand( commands.push_back(PluginCommand(
"rendermax", "switch rendering engine.", rendermax, false, "rendermax", "switch rendering engine.", rendermax, false,
" rendermax trippy\n" " rendermax trippy\n"
" rendermax truecolor red|green|blue|white\n"
" rendermax disable\n" " rendermax disable\n"
)); ));
return CR_OK; return CR_OK;
@ -56,10 +57,26 @@ static command_result rendermax(color_ostream &out, vector <string> & parameters
installNew(new renderer_trippy(df::global::enabler->renderer),MODE_TRIPPY); installNew(new renderer_trippy(df::global::enabler->renderer),MODE_TRIPPY);
return CR_OK; return CR_OK;
} }
else if(cmd=="test") else if(cmd=="truecolor")
{ {
if(current_mode!=MODE_TRUECOLOR)
{
removeOld();
installNew(new renderer_test(df::global::enabler->renderer),MODE_TRUECOLOR);
}
if(current_mode==MODE_TRUECOLOR && parameters.size()==2) if(current_mode==MODE_TRUECOLOR && parameters.size()==2)
{ {
lightCell red(1,0,0),green(0,1,0),blue(0,0,1),white(1,1,1);
lightCell cur=white;
lightCell dim(0.2,0.2,0.2);
string col=parameters[1];
if(col=="red")
cur=red;
else if(col=="green")
cur=green;
else if(col=="blue")
cur=blue;
renderer_test* r=reinterpret_cast<renderer_test*>(df::global::enabler->renderer); renderer_test* r=reinterpret_cast<renderer_test*>(df::global::enabler->renderer);
tthread::lock_guard<tthread::fast_mutex> guard(r->dataMutex); tthread::lock_guard<tthread::fast_mutex> guard(r->dataMutex);
int h=df::global::gps->dimy; int h=df::global::gps->dimy;
@ -70,21 +87,23 @@ static command_result rendermax(color_ostream &out, vector <string> & parameters
if(rad>cy)rad=cy; if(rad>cy)rad=cy;
rad/=2; rad/=2;
int radsq=rad*rad; int radsq=rad*rad;
for(size_t i=0;i<r->lightGrid.size();i++)
{
r->lightGrid[i]=dim;
}
for(int i=-rad;i<rad;i++) for(int i=-rad;i<rad;i++)
for(int j=-rad;j<rad;j++) for(int j=-rad;j<rad;j++)
{ {
if((i*i+j*j)<radsq) if((i*i+j*j)<radsq)
r->opacity[(cx+i)*h+(cy+j)]=(radsq-i*i-j*j)/(float)radsq; {
float val=(radsq-i*i-j*j)/(float)radsq;
r->lightGrid[(cx+i)*h+(cy+j)]=dim+cur*val;
} }
return CR_OK;
} }
else
{
removeOld();
installNew(new renderer_test(df::global::enabler->renderer),MODE_TRUECOLOR);
return CR_OK; return CR_OK;
} }
} }
else if(cmd=="disable") else if(cmd=="disable")
{ {