Use current rendering modes when placing a save (fixes #446)

This commit is contained in:
Tamás Bálint Misius 2019-07-22 10:22:24 +02:00
parent 8223e06670
commit 23337862a4
No known key found for this signature in database
GPG Key ID: 5B472A12F6ECA9F2
7 changed files with 94 additions and 65 deletions

View File

@ -22,6 +22,7 @@ ThumbnailRendererTask::~ThumbnailRendererTask()
bool ThumbnailRendererTask::doWork() bool ThumbnailRendererTask::doWork()
{ {
SaveRenderer::Ref().ResetModes();
thumbnail = std::unique_ptr<VideoBuffer>(SaveRenderer::Ref().Render(Save.get(), Decorations, Fire)); thumbnail = std::unique_ptr<VideoBuffer>(SaveRenderer::Ref().Render(Save.get(), Decorations, Fire));
if (thumbnail) if (thumbnail)
{ {

View File

@ -2583,70 +2583,75 @@ Renderer::Renderer(Graphics * g, Simulation * sim):
memset(fire_b, 0, sizeof(fire_b)); memset(fire_b, 0, sizeof(fire_b));
//Set defauly display modes //Set defauly display modes
SetColourMode(COLOUR_DEFAULT); ResetModes();
AddRenderMode(RENDER_BASC);
AddRenderMode(RENDER_FIRE);
AddRenderMode(RENDER_SPRK);
//Render mode presets. Possibly load from config in future? //Render mode presets. Possibly load from config in future?
renderModePresets = new RenderPreset[11]; renderModePresets.push_back({
"Alternative Velocity Display",
renderModePresets[0].Name = "Alternative Velocity Display"; { RENDER_EFFE, RENDER_BASC },
renderModePresets[0].RenderModes.push_back(RENDER_EFFE); { DISPLAY_AIRC },
renderModePresets[0].RenderModes.push_back(RENDER_BASC); { }
renderModePresets[0].DisplayModes.push_back(DISPLAY_AIRC); });
renderModePresets.push_back({
renderModePresets[1].Name = "Velocity Display"; "Velocity Display",
renderModePresets[1].RenderModes.push_back(RENDER_EFFE); { RENDER_EFFE, RENDER_BASC },
renderModePresets[1].RenderModes.push_back(RENDER_BASC); { DISPLAY_AIRV },
renderModePresets[1].DisplayModes.push_back(DISPLAY_AIRV); { }
});
renderModePresets[2].Name = "Pressure Display"; renderModePresets.push_back({
renderModePresets[2].RenderModes.push_back(RENDER_EFFE); "Pressure Display",
renderModePresets[2].RenderModes.push_back(RENDER_BASC); { RENDER_EFFE, RENDER_BASC },
renderModePresets[2].DisplayModes.push_back(DISPLAY_AIRP); { DISPLAY_AIRP },
{ }
renderModePresets[3].Name = "Persistent Display"; });
renderModePresets[3].RenderModes.push_back(RENDER_EFFE); renderModePresets.push_back({
renderModePresets[3].RenderModes.push_back(RENDER_BASC); "Persistent Display",
renderModePresets[3].DisplayModes.push_back(DISPLAY_PERS); { RENDER_EFFE, RENDER_BASC },
{ DISPLAY_PERS },
renderModePresets[4].Name = "Fire Display"; { }
renderModePresets[4].RenderModes.push_back(RENDER_FIRE); });
renderModePresets[4].RenderModes.push_back(RENDER_SPRK); renderModePresets.push_back({
renderModePresets[4].RenderModes.push_back(RENDER_EFFE); "Fire Display",
renderModePresets[4].RenderModes.push_back(RENDER_BASC); { RENDER_FIRE, RENDER_SPRK, RENDER_EFFE, RENDER_BASC },
{ },
renderModePresets[5].Name = "Blob Display"; { }
renderModePresets[5].RenderModes.push_back(RENDER_FIRE); });
renderModePresets[5].RenderModes.push_back(RENDER_SPRK); renderModePresets.push_back({
renderModePresets[5].RenderModes.push_back(RENDER_EFFE); "Blob Display",
renderModePresets[5].RenderModes.push_back(RENDER_BLOB); { RENDER_FIRE, RENDER_SPRK, RENDER_EFFE, RENDER_BLOB },
{ },
renderModePresets[6].Name = "Heat Display"; { }
renderModePresets[6].RenderModes.push_back(RENDER_BASC); });
renderModePresets[6].DisplayModes.push_back(DISPLAY_AIRH); renderModePresets.push_back({
renderModePresets[6].ColourMode = COLOUR_HEAT; "Heat Display",
{ RENDER_BASC },
renderModePresets[7].Name = "Fancy Display"; { DISPLAY_AIRH },
renderModePresets[7].RenderModes.push_back(RENDER_FIRE); { COLOUR_HEAT }
renderModePresets[7].RenderModes.push_back(RENDER_SPRK); });
renderModePresets[7].RenderModes.push_back(RENDER_GLOW); renderModePresets.push_back({
renderModePresets[7].RenderModes.push_back(RENDER_BLUR); "Fancy Display",
renderModePresets[7].RenderModes.push_back(RENDER_EFFE); { RENDER_FIRE, RENDER_SPRK, RENDER_GLOW, RENDER_BLUR, RENDER_EFFE, RENDER_BASC },
renderModePresets[7].RenderModes.push_back(RENDER_BASC); { DISPLAY_WARP },
renderModePresets[7].DisplayModes.push_back(DISPLAY_WARP); { }
});
renderModePresets[8].Name = "Nothing Display"; renderModePresets.push_back({
renderModePresets[8].RenderModes.push_back(RENDER_BASC); "Nothing Display",
{ RENDER_BASC },
renderModePresets[9].Name = "Heat Gradient Display"; { },
renderModePresets[9].RenderModes.push_back(RENDER_BASC); { }
renderModePresets[9].ColourMode = COLOUR_GRAD; });
renderModePresets.push_back({
renderModePresets[10].Name = "Life Gradient Display"; "Heat Gradient Display",
renderModePresets[10].RenderModes.push_back(RENDER_BASC); { RENDER_BASC },
renderModePresets[10].ColourMode = COLOUR_LIFE; { },
{ COLOUR_GRAD }
});
renderModePresets.push_back({
"Life Gradient Display",
{ RENDER_BASC },
{ },
{ COLOUR_LIFE }
});
//Prepare the graphics cache //Prepare the graphics cache
graphicscache = new gcache_item[PT_NUM]; graphicscache = new gcache_item[PT_NUM];
@ -2933,6 +2938,14 @@ unsigned int Renderer::GetColourMode()
return colour_mode; return colour_mode;
} }
void Renderer::ResetModes()
{
SetColourMode(COLOUR_DEFAULT);
AddRenderMode(RENDER_BASC);
AddRenderMode(RENDER_FIRE);
AddRenderMode(RENDER_SPRK);
}
VideoBuffer Renderer::DumpFrame() VideoBuffer Renderer::DumpFrame()
{ {
#ifdef OGLR #ifdef OGLR
@ -2952,8 +2965,6 @@ VideoBuffer Renderer::DumpFrame()
Renderer::~Renderer() Renderer::~Renderer()
{ {
delete[] renderModePresets;
#if !defined(OGLR) #if !defined(OGLR)
#if defined(OGLI) #if defined(OGLI)
delete[] vid; delete[] vid;

View File

@ -47,7 +47,7 @@ public:
unsigned int colour_mode; unsigned int colour_mode;
std::vector<unsigned int> display_modes; std::vector<unsigned int> display_modes;
unsigned int display_mode; unsigned int display_mode;
RenderPreset * renderModePresets; std::vector<RenderPreset> renderModePresets;
// //
unsigned char fire_r[YRES/CELL][XRES/CELL]; unsigned char fire_r[YRES/CELL][XRES/CELL];
unsigned char fire_g[YRES/CELL][XRES/CELL]; unsigned char fire_g[YRES/CELL][XRES/CELL];
@ -154,6 +154,8 @@ public:
void SetColourMode(unsigned int mode); void SetColourMode(unsigned int mode);
unsigned int GetColourMode(); unsigned int GetColourMode();
void ResetModes();
int GetGridSize() { return gridSize; } int GetGridSize() { return gridSize; }
void SetGridSize(int value) { gridSize = value; } void SetGridSize(int value) { gridSize = value; }

View File

@ -1964,6 +1964,7 @@ void GameView::NotifyPlaceSaveChanged(GameModel * sender)
placeSaveOffset = ui::Point(0, 0); placeSaveOffset = ui::Point(0, 0);
if(sender->GetPlaceSave()) if(sender->GetPlaceSave())
{ {
SaveRenderer::Ref().CopyModes(sender->GetRenderer());
placeSaveThumb = SaveRenderer::Ref().Render(sender->GetPlaceSave()); placeSaveThumb = SaveRenderer::Ref().Render(sender->GetPlaceSave());
selectMode = PlaceSave; selectMode = PlaceSave;
selectPoint2 = mousePosition; selectPoint2 = mousePosition;

View File

@ -547,6 +547,7 @@ void PreviewView::NotifySaveChanged(PreviewModel * sender)
if(save->GetGameSave()) if(save->GetGameSave())
{ {
SaveRenderer::Ref().ResetModes();
savePreview = SaveRenderer::Ref().Render(save->GetGameSave(), false, true); savePreview = SaveRenderer::Ref().Render(save->GetGameSave(), false, true);
if(savePreview && savePreview->Buffer && !(savePreview->Width == XRES/2 && savePreview->Height == YRES/2)) if(savePreview && savePreview->Buffer && !(savePreview->Width == XRES/2 && savePreview->Height == YRES/2))

View File

@ -176,3 +176,14 @@ SaveRenderer::~SaveRenderer()
{ {
} }
void SaveRenderer::CopyModes(Renderer *source)
{
ren->SetRenderMode(source->GetRenderMode());
ren->SetDisplayMode(source->GetDisplayMode());
ren->SetColourMode(source->GetColourMode());
}
void SaveRenderer::ResetModes()
{
ren->ResetModes();
}

View File

@ -21,6 +21,8 @@ public:
SaveRenderer(); SaveRenderer();
VideoBuffer * Render(GameSave * save, bool decorations = true, bool fire = true); VideoBuffer * Render(GameSave * save, bool decorations = true, bool fire = true);
VideoBuffer * Render(unsigned char * saveData, int saveDataSize, bool decorations = true, bool fire = true); VideoBuffer * Render(unsigned char * saveData, int saveDataSize, bool decorations = true, bool fire = true);
void CopyModes(Renderer *source);
void ResetModes();
virtual ~SaveRenderer(); virtual ~SaveRenderer();
private: private: