From 1622b9b046dc41cdfc9cb8014f7978ca64796341 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 6 Jan 2012 19:34:47 +0000 Subject: [PATCH] - changed g3d screenshot resizing to render at desired screensize instead of scaling image. --- source/g3d_viewer/main.cpp | 62 +++++++++++++--------------------- source/g3d_viewer/renderer.cpp | 9 +++-- source/g3d_viewer/renderer.h | 4 +-- 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/source/g3d_viewer/main.cpp b/source/g3d_viewer/main.cpp index 3996365e..5fcdd24e 100644 --- a/source/g3d_viewer/main.cpp +++ b/source/g3d_viewer/main.cpp @@ -260,6 +260,7 @@ void printParameterHelp(const char *argv0, bool foundInvalidArgs) { bool autoScreenShotAndExit = false; vector autoScreenShotParams; +std::pair overrideSize(0,0); // =============================================== // class MainWindow @@ -572,28 +573,13 @@ void MainWindow::onPaint(wxPaintEvent &event) { // notice that we use GetSize() here and not GetClientSize() because // the latter doesn't return correct results for the minimized windows // (at least not under Windows) -#if defined(WIN32) -/* - //Seems like windows cannot handle this consistently + int viewportW = GetClientSize().x; + int viewportH = GetClientSize().y; - if(autoScreenShotAndExit == true) { - printf("\n\n$$$ GetSize() x = %d y = %d, Renderer::windowW = %d H = %d\n",GetSize().x,GetSize().y,Renderer::windowW,Renderer::windowH); - //renderer->reset(GetSize().x, GetSize().y-10, playerColor); - //renderer->reset(Renderer::windowW, Renderer::windowH-20, playerColor); - //this->Iconize(false); - - //this->Refresh(); - //renderer->reset(GetClientSize().x, GetClientSize().y, playerColor); - renderer->reset(Renderer::windowW, Renderer::windowH-20, playerColor); - } - else { - printf("\n\n### GetClientSize() x = %d y = %d\n",GetClientSize().x,GetClientSize().y); - renderer->reset(GetClientSize().x, GetClientSize().y, playerColor); - } -*/ - renderer->reset(GetClientSize().x, GetClientSize().y, playerColor); +#if defined(WIN32) + renderer->reset(viewportW, viewportH, playerColor); #else - renderer->reset(GetClientSize().x, GetClientSize().y, playerColor); + renderer->reset(viewportW, viewportH, playerColor); #endif renderer->transform(rotX, rotY, zoom); @@ -950,22 +936,6 @@ void MainWindow::onMenumFileToggleScreenshotTransparent(wxCommandEvent &event) { void MainWindow::saveScreenshot() { try { - std::pair overrideSize(0,0); - for(unsigned int i = 0; i < autoScreenShotParams.size(); ++i) { - if(_strnicmp(autoScreenShotParams[i].c_str(),"resize-",7) == 0) { - printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str()); - - string resize = autoScreenShotParams[i]; - resize = resize.erase(0,7); - vector values; - Tokenize(resize,values,"x"); - overrideSize.first = strToInt(values[0]); - overrideSize.second = strToInt(values[1]); - - break; - } - } - int autoSaveScreenshotIndex = -1; for(unsigned int i = 0; i < autoScreenShotParams.size(); ++i) { if(_strnicmp(autoScreenShotParams[i].c_str(),"saveas-",7) == 0) { @@ -2069,13 +2039,27 @@ bool App::OnInit() { autoScreenShotParams.clear(); Tokenize(optionsValue,autoScreenShotParams,","); - #ifdef WIN32 for(unsigned int i = 0; i < autoScreenShotParams.size(); ++i) { + +#ifdef WIN32 std::auto_ptr wstr(Ansi2WideString(autoScreenShotParams[i].c_str())); autoScreenShotParams[i] = utf8_encode(wstr.get()); - } - #endif +#endif + if(_strnicmp(autoScreenShotParams[i].c_str(),"resize-",7) == 0) { + printf("Screenshot option [%s]\n",autoScreenShotParams[i].c_str()); + + string resize = autoScreenShotParams[i]; + resize = resize.erase(0,7); + vector values; + Tokenize(resize,values,"x"); + overrideSize.first = strToInt(values[0]); + overrideSize.second = strToInt(values[1]); + + Renderer::windowW = overrideSize.first; + Renderer::windowH = overrideSize.second + 25; + } + } } } diff --git a/source/g3d_viewer/renderer.cpp b/source/g3d_viewer/renderer.cpp index 95d61d50..9f2f5e0c 100644 --- a/source/g3d_viewer/renderer.cpp +++ b/source/g3d_viewer/renderer.cpp @@ -21,6 +21,9 @@ using namespace Shared::Graphics::Gl; namespace Shared{ namespace G3dViewer{ +int Renderer::windowW= 640; +int Renderer::windowH= 480; + // =============================================== // class MeshCallbackTeamColor // =============================================== @@ -494,9 +497,9 @@ void Renderer::saveScreen(const string &path,std::pair *overrideSize) { glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - if(overrideSize != NULL && overrideSize->first > 0 && overrideSize->second > 0) { - pixmapScreenShot->Scale(GL_RGBA,overrideSize->first,overrideSize->second); - } + //if(overrideSize != NULL && overrideSize->first > 0 && overrideSize->second > 0) { + // pixmapScreenShot->Scale(GL_RGBA,overrideSize->first,overrideSize->second); + //} pixmapScreenShot->save(path); delete pixmapScreenShot; diff --git a/source/g3d_viewer/renderer.h b/source/g3d_viewer/renderer.h index 9a523bb7..e9f2d296 100644 --- a/source/g3d_viewer/renderer.h +++ b/source/g3d_viewer/renderer.h @@ -70,8 +70,8 @@ class Renderer : public RendererInterface { public: static const int windowX= 100; static const int windowY= 100; - static const int windowW= 640; - static const int windowH= 480; + static int windowW; + static int windowH; public: enum PlayerColor{