- changed g3d screenshot resizing to render at desired screensize instead of scaling image.

This commit is contained in:
Mark Vejvoda 2012-01-06 19:34:47 +00:00
parent d449517872
commit 1622b9b046
3 changed files with 31 additions and 44 deletions

View File

@ -260,6 +260,7 @@ void printParameterHelp(const char *argv0, bool foundInvalidArgs) {
bool autoScreenShotAndExit = false;
vector<string> autoScreenShotParams;
std::pair<int,int> 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<int,int> 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<string> 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<wchar_t> 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<string> values;
Tokenize(resize,values,"x");
overrideSize.first = strToInt(values[0]);
overrideSize.second = strToInt(values[1]);
Renderer::windowW = overrideSize.first;
Renderer::windowH = overrideSize.second + 25;
}
}
}
}

View File

@ -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<int,int> *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;

View File

@ -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{