Added Log:: calls, fixed layout somewhat.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@12376 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2013-01-17 11:42:34 +00:00
parent 8bfef9cb67
commit 1b2ea5d572

View File

@ -44,6 +44,7 @@
#include "states_screens/state_manager.hpp" #include "states_screens/state_manager.hpp"
#include "tracks/track_manager.hpp" #include "tracks/track_manager.hpp"
#include "utils/constants.hpp" #include "utils/constants.hpp"
#include "utils/log.hpp"
#include "utils/profiler.hpp" #include "utils/profiler.hpp"
#include <irrlicht.h> #include <irrlicht.h>
@ -121,7 +122,7 @@ X11::Window get_toplevel_parent(X11::Display* display, X11::Window window)
if (0 == X11::XQueryTree(display, window, &root, if (0 == X11::XQueryTree(display, window, &root,
&parent, &children, &num_children)) &parent, &children, &num_children))
{ {
fprintf(stderr, "XQueryTree error\n"); Log::fatal("irr_driver", "XQueryTree error\n");
abort(); //change to whatever error handling you prefer abort(); //change to whatever error handling you prefer
} }
if (children) { //must test for null if (children) { //must test for null
@ -137,13 +138,16 @@ X11::Window get_toplevel_parent(X11::Display* display, X11::Window window)
} }
#endif #endif
// ----------------------------------------------------------------------------
void IrrDriver::updateConfigIfRelevant() void IrrDriver::updateConfigIfRelevant()
{ {
if (!UserConfigParams::m_fullscreen && UserConfigParams::m_remember_window_location) if (!UserConfigParams::m_fullscreen &&
UserConfigParams::m_remember_window_location)
{ {
#ifdef WIN32 #ifdef WIN32
const SExposedVideoData& videoData = m_device->getVideoDriver()->getExposedVideoData(); const SExposedVideoData& videoData = m_device->getVideoDriver()
->getExposedVideoData();
// this should work even if using DirectX in theory because the HWnd is // this should work even if using DirectX in theory because the HWnd is
// always third pointer in the struct, no matter which union is used // always third pointer in the struct, no matter which union is used
HWND window = (HWND)videoData.OpenGLWin32.HWnd; HWND window = (HWND)videoData.OpenGLWin32.HWnd;
@ -158,7 +162,8 @@ void IrrDriver::updateConfigIfRelevant()
// corresponding edge. // corresponding edge.
if(x<0) x = 0; if(x<0) x = 0;
if(y<0) y = 0; if(y<0) y = 0;
printf("Retrieved window location for config : %i %i\n", x, y); Log::verbose("irr_driver",
"Retrieved window location for config : %i %i\n", x, y);
if (UserConfigParams::m_window_x != x || UserConfigParams::m_window_y != y) if (UserConfigParams::m_window_x != x || UserConfigParams::m_window_y != y)
{ {
@ -169,17 +174,20 @@ void IrrDriver::updateConfigIfRelevant()
} }
else else
{ {
printf("Could not retrieve window location\n"); Log::warn("irr_driver", "Could not retrieve window location\n");
} }
#elif defined(__linux__) && !defined(ANDROID) #elif defined(__linux__) && !defined(ANDROID)
using namespace X11; using namespace X11;
const SExposedVideoData& videoData = m_device->getVideoDriver()->getExposedVideoData(); const SExposedVideoData& videoData =
m_device->getVideoDriver()->getExposedVideoData();
Display* display = (Display*)videoData.OpenGLLinux.X11Display; Display* display = (Display*)videoData.OpenGLLinux.X11Display;
XWindowAttributes xwa; XWindowAttributes xwa;
XGetWindowAttributes(display, get_toplevel_parent(display, videoData.OpenGLLinux.X11Window), &xwa); XGetWindowAttributes(display, get_toplevel_parent(display,
videoData.OpenGLLinux.X11Window), &xwa);
int wx = xwa.x; int wx = xwa.x;
int wy = xwa.y; int wy = xwa.y;
printf("Retrieved window location for config : %i %i\n", wx, wy); Log::verbose("irr_driver",
"Retrieved window location for config : %i %i\n", wx, wy);
if (UserConfigParams::m_window_x != wx || UserConfigParams::m_window_y != wy) if (UserConfigParams::m_window_x != wx || UserConfigParams::m_window_y != wy)
@ -237,18 +245,23 @@ void IrrDriver::initDevice()
// mode. So we use this to print a warning to the user. // mode. So we use this to print a warning to the user.
if(m_device->getDebugName()) if(m_device->getDebugName())
{ {
printf("!!!!! Performance warning: Irrlicht compiled with debug mode.!!!!!\n"); Log::warn("irr_driver",
printf("!!!!! This can have a significant performance impact !!!!!\n"); "!!!!! Performance warning: Irrlicht compiled with "
"debug mode.!!!!!\n");
Log::warn("irr_driver",
"!!!!! This can have a significant performance "
"impact !!!!!\n");
} }
} // end if firstTime } // end if firstTime
const core::dimension2d<u32> ssize = m_device->getVideoModeList()->getDesktopResolution(); const core::dimension2d<u32> ssize = m_device->getVideoModeList()
->getDesktopResolution();
if (UserConfigParams::m_width > (int)ssize.Width || if (UserConfigParams::m_width > (int)ssize.Width ||
UserConfigParams::m_height > (int)ssize.Height) UserConfigParams::m_height > (int)ssize.Height)
{ {
fprintf(stderr, "[IrrDriver] The window size specified in " Log::warn("irr_driver", "The window size specified in "
"user config is larger than your screen!"); "user config is larger than your screen!");
UserConfigParams::m_width = 800; UserConfigParams::m_width = 800;
UserConfigParams::m_height = 600; UserConfigParams::m_height = 600;
} }
@ -293,8 +306,8 @@ void IrrDriver::initDevice()
for (int bits=32; bits>15; bits -=8) for (int bits=32; bits>15; bits -=8)
{ {
if(UserConfigParams::logMisc()) if(UserConfigParams::logMisc())
printf("[IrrDriver] Trying to create device with " Log::verbose("irr_driver", "Trying to create device with "
"%i bits\n", bits); "%i bits\n", bits);
SIrrlichtCreationParameters params; SIrrlichtCreationParameters params;
params.DriverType = type; params.DriverType = type;
params.Stencilbuffer = false; params.Stencilbuffer = false;
@ -319,8 +332,10 @@ void IrrDriver::initDevice()
params.AntiAlias = 8; params.AntiAlias = 8;
break; break;
default: default:
fprintf(stderr, "[IrrDriver] WARNING: Invalid value for anti-alias setting : %i\n", Log::error("irr_driver",
(int)UserConfigParams::m_antialiasing); "[IrrDriver] WARNING: Invalid value for "
"anti-alias setting : %i\n",
(int)UserConfigParams::m_antialiasing);
} }
m_device = createDeviceEx(params); m_device = createDeviceEx(params);
@ -348,14 +363,15 @@ void IrrDriver::initDevice()
); );
if (m_device) if (m_device)
{ {
fprintf(stderr, "An invalid resolution was set in the config file, reverting to saner values\n"); Log::verbose("irr_driver", "An invalid resolution was set in "
"the config file, reverting to saner values\n");
} }
} }
} }
if(!m_device) if(!m_device)
{ {
fprintf(stderr, "Couldn't initialise irrlicht device. Quitting.\n"); Log::fatal("irr_driver", "Couldn't initialise irrlicht device. Quitting.\n");
exit(-1); exit(-1);
} }
@ -477,7 +493,7 @@ video::E_DRIVER_TYPE IrrDriver::getEngineDriverType( int index )
} }
// Ouput which render will be tried. // Ouput which render will be tried.
printf("[IrrDriver] Trying %s rendering.\n", rendererName.c_str()); Log::verbose("irr_driver", "Trying %s rendering.\n", rendererName.c_str());
return type; return type;
} }
@ -531,7 +547,7 @@ bool IrrDriver::moveWindow(const int x, const int y)
} }
else else
{ {
printf("[IrrDriver] WARNING: Could not set window location\n"); Log::warn("irr_driver", "Could not set window location\n");
return false; return false;
} }
#elif defined(__linux__) && !defined(ANDROID) #elif defined(__linux__) && !defined(ANDROID)
@ -574,9 +590,9 @@ void IrrDriver::applyResolutionSettings()
// garbage during switch // garbage during switch
m_video_driver->beginScene(true, true, video::SColor(255,100,101,140)); m_video_driver->beginScene(true, true, video::SColor(255,100,101,140));
m_video_driver->draw2DRectangle( SColor(255, 0, 0, 0), m_video_driver->draw2DRectangle( SColor(255, 0, 0, 0),
core::rect<s32>(0, 0, core::rect<s32>(0, 0,
UserConfigParams::m_prev_width, UserConfigParams::m_prev_width,
UserConfigParams::m_prev_height) ); UserConfigParams::m_prev_height) );
m_video_driver->endScene(); m_video_driver->endScene();
track_manager->removeAllCachedData(); track_manager->removeAllCachedData();
attachment_manager->removeTextures(); attachment_manager->removeTextures();
@ -658,7 +674,8 @@ void IrrDriver::cancelResChange()
// This will trigger calling applyResolutionSettings in update(). This is // This will trigger calling applyResolutionSettings in update(). This is
// necessary to avoid that the old screen is deleted, while it is // necessary to avoid that the old screen is deleted, while it is
// still active (i.e. sending out events which triggered the change // still active (i.e. sending out events which triggered the change
// of resolution // Setting this flag will trigger a call to applyResolutionSetting() // of resolution
// Setting this flag will trigger a call to applyResolutionSetting()
// in the next update call. This avoids the problem that changeResolution // in the next update call. This avoids the problem that changeResolution
// is actually called from the gui, i.e. the event loop, i.e. while the // is actually called from the gui, i.e. the event loop, i.e. while the
// old device is active - so we can't delete this device (which we must // old device is active - so we can't delete this device (which we must
@ -675,7 +692,8 @@ void IrrDriver::cancelResChange()
void IrrDriver::printRenderStats() void IrrDriver::printRenderStats()
{ {
io::IAttributes * attr = m_scene_manager->getParameters(); io::IAttributes * attr = m_scene_manager->getParameters();
printf("[%ls], FPS:%3d Tri:%.03fm Cull %d/%d nodes (%d,%d,%d)\n", Log::verbose("irr_driver",
"[%ls], FPS:%3d Tri:%.03fm Cull %d/%d nodes (%d,%d,%d)\n",
m_video_driver->getName(), m_video_driver->getName(),
m_video_driver->getFPS (), m_video_driver->getFPS (),
(f32) m_video_driver->getPrimitiveCountDrawn( 0 ) * ( 1.f / 1000000.f ), (f32) m_video_driver->getPrimitiveCountDrawn( 0 ) * ( 1.f / 1000000.f ),
@ -704,8 +722,9 @@ scene::IAnimatedMesh *IrrDriver::getAnimatedMesh(const std::string &filename)
/*ignoreCase*/false, /*ignoreCase*/false,
/*ignorePath*/true, io::EFAT_ZIP)) /*ignorePath*/true, io::EFAT_ZIP))
{ {
fprintf(stderr, "[IrrDriver::getMesh] Failed to open zip file <%s>\n", Log::error("irr_driver",
filename.c_str()); "getMesh: Failed to open zip file <%s>\n",
filename.c_str());
return NULL; return NULL;
} }
@ -740,7 +759,8 @@ scene::IMesh *IrrDriver::getMesh(const std::string &filename)
IAnimatedMesh* am = getAnimatedMesh(filename); IAnimatedMesh* am = getAnimatedMesh(filename);
if (am == NULL) if (am == NULL)
{ {
fprintf(stderr, "ERROR: cannot load mesh <%s>\n", filename.c_str()); Log::error("irr_driver", "Cannot load mesh <%s>\n",
filename.c_str());
return NULL; return NULL;
} }
return am->getMesh(0); return am->getMesh(0);
@ -781,7 +801,8 @@ scene::ISceneNode* IrrDriver::addWaterNode(scene::IMesh *mesh,
float wave_length) float wave_length)
{ {
mesh->setMaterialFlag(EMF_GOURAUD_SHADING, true); mesh->setMaterialFlag(EMF_GOURAUD_SHADING, true);
scene::IMesh* welded_mesh = m_scene_manager->getMeshManipulator()->createMeshWelded(mesh); scene::IMesh* welded_mesh = m_scene_manager->getMeshManipulator()
->createMeshWelded(mesh);
scene::ISceneNode* out = m_scene_manager->addWaterSurfaceSceneNode(welded_mesh, scene::ISceneNode* out = m_scene_manager->addWaterSurfaceSceneNode(welded_mesh,
wave_height, wave_speed, wave_height, wave_speed,
wave_length); wave_length);
@ -1152,8 +1173,9 @@ video::ITexture *IrrDriver::getTexture(const std::string &filename,
if (complain_if_not_found && out == NULL) if (complain_if_not_found && out == NULL)
{ {
printf("[IrrDriver] Texture '%s' not found; Put a breakpoint at line %s:%i to debug!\n", Log::error("irr_driver", "Texture '%s' not found; Put a breakpoint "
filename.c_str(), __FILE__, __LINE__); "at line %s:%i to debug!\n",
filename.c_str(), __FILE__, __LINE__);
} }
return out; return out;
@ -1242,9 +1264,9 @@ ITexture* IrrDriver::applyMask(video::ITexture* texture,
return NULL; return NULL;
} }
//printf("* Adding '%s'\n", texture->getName().getPath().c_str()); std::string base =
ITexture *t = m_video_driver->addTexture(StringUtils::getBasename(texture->getName().getPath().c_str()).c_str(), StringUtils::getBasename(texture->getName().getPath().c_str());
img, NULL); ITexture *t = m_video_driver->addTexture(base.c_str(),img, NULL);
img->drop(); img->drop();
mask->drop(); mask->drop();
return t; return t;
@ -1317,11 +1339,13 @@ void IrrDriver::displayFPS()
if (UserConfigParams::m_artist_debug_mode) if (UserConfigParams::m_artist_debug_mode)
{ {
sprintf(buffer, "FPS: %i/%i/%i - %.2f/%.2f/%.2f KTris", min, fps, max, low, kilotris, high); sprintf(buffer, "FPS: %i/%i/%i - %.2f/%.2f/%.2f KTris",
min, fps, max, low, kilotris, high);
} }
else else
{ {
sprintf(buffer, "FPS: %i/%i/%i - %i KTris", min, fps, max, (int)round(kilotris)); sprintf(buffer, "FPS: %i/%i/%i - %i KTris", min, fps, max,
(int)round(kilotris));
} }
core::stringw fpsString = buffer; core::stringw fpsString = buffer;
@ -1332,13 +1356,15 @@ void IrrDriver::displayFPS()
#ifdef DEBUG #ifdef DEBUG
void drawJoint(bool drawline, bool drawname, irr::scene::ISkinnedMesh::SJoint* joint, void drawJoint(bool drawline, bool drawname,
irr::scene::ISkinnedMesh::SJoint* joint,
ISkinnedMesh* mesh, int id) ISkinnedMesh* mesh, int id)
{ {
//if (joint->PositionKeys.size() == 0) return; //if (joint->PositionKeys.size() == 0) return;
irr::scene::ISkinnedMesh::SJoint* parent = NULL; irr::scene::ISkinnedMesh::SJoint* parent = NULL;
const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints = mesh->getAllJoints(); const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints
= mesh->getAllJoints();
for (unsigned int j=0; j<joints.size(); j++) for (unsigned int j=0; j<joints.size(); j++)
{ {
if (joints[j]->Children.linear_search(joint) != -1) if (joints[j]->Children.linear_search(joint) != -1)
@ -1414,7 +1440,8 @@ void drawJoint(bool drawline, bool drawname, irr::scene::ISkinnedMesh::SJoint* j
break; break;
} }
// This code doesn't quite work. 0.25 is used so that the bone is not way too long (not sure why I need to manually size it down) // This code doesn't quite work. 0.25 is used so that the bone is not
// way too long (not sure why I need to manually size it down)
// and the rotation of the bone is often rather off // and the rotation of the bone is often rather off
core::vector3df v(0.0f, 0.25f, 0.0f); core::vector3df v(0.0f, 0.25f, 0.0f);
//joint->GlobalMatrix.rotateVect(v); //joint->GlobalMatrix.rotateVect(v);
@ -1443,12 +1470,16 @@ void drawJoint(bool drawline, bool drawname, irr::scene::ISkinnedMesh::SJoint* j
if (drawname) if (drawname)
{ {
irr_driver->getVideoDriver()->setTransform(video::ETS_WORLD, core::IdentityMatrix); irr_driver->getVideoDriver()->setTransform(video::ETS_WORLD,
core::IdentityMatrix);
core::vector2di textpos = irr_driver->getSceneManager()->getSceneCollisionManager()->getScreenCoordinatesFrom3DPosition(jointpos); core::vector2di textpos =
irr_driver->getSceneManager()->getSceneCollisionManager()
->getScreenCoordinatesFrom3DPosition(jointpos);
GUIEngine::getSmallFont()->draw( stringw(joint->Name.c_str()), GUIEngine::getSmallFont()->draw( stringw(joint->Name.c_str()),
core::rect<s32>(textpos, core::dimension2d<s32>(500,50)), core::rect<s32>(textpos,
core::dimension2d<s32>(500,50)),
color, false, false ); color, false, false );
} }
} }
@ -1478,7 +1509,7 @@ void IrrDriver::update(float dt)
{ {
// Print a dividing line so that it's easier to see which events // Print a dividing line so that it's easier to see which events
// get received in which order in the one frame. // get received in which order in the one frame.
printf("-------------------------------------\n"); Log::debug("irr_driver", "-------------------------------------\n");
} }
World *world = World::getWorld(); World *world = World::getWorld();
@ -1546,7 +1577,8 @@ void IrrDriver::update(float dt)
{ {
std::ostringstream oss; std::ostringstream oss;
oss << "drawAll() for kart " << i << std::flush; oss << "drawAll() for kart " << i << std::flush;
PROFILER_PUSH_CPU_MARKER(oss.str().c_str(), (i+1)*60, 0x00, 0x00); PROFILER_PUSH_CPU_MARKER(oss.str().c_str(), (i+1)*60,
0x00, 0x00);
} }
#endif #endif
@ -1621,7 +1653,8 @@ void IrrDriver::update(float dt)
{ {
IMesh* mesh = debug_meshes[n]->getMesh(); IMesh* mesh = debug_meshes[n]->getMesh();
ISkinnedMesh* smesh = static_cast<ISkinnedMesh*>(mesh); ISkinnedMesh* smesh = static_cast<ISkinnedMesh*>(mesh);
const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints = smesh->getAllJoints(); const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints =
smesh->getAllJoints();
for (unsigned int j=0; j<joints.size(); j++) for (unsigned int j=0; j<joints.size(); j++)
{ {
@ -1647,7 +1680,8 @@ void IrrDriver::update(float dt)
ISkinnedMesh* smesh = static_cast<ISkinnedMesh*>(mesh); ISkinnedMesh* smesh = static_cast<ISkinnedMesh*>(mesh);
const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints = smesh->getAllJoints(); const core::array< irr::scene::ISkinnedMesh::SJoint * >& joints =
smesh->getAllJoints();
for (unsigned int j=0; j<joints.size(); j++) for (unsigned int j=0; j<joints.size(); j++)
{ {
@ -1681,19 +1715,23 @@ void IrrDriver::update(float dt)
if (World::getWorld() == NULL) trackName = "menu"; if (World::getWorld() == NULL) trackName = "menu";
#if defined(WIN32) #if defined(WIN32)
std::string path = StringUtils::insertValues("C:\\Temp\\supertuxkart %s %s.png", std::string path =
trackName, timeBuffer); StringUtils::insertValues("C:\\Temp\\supertuxkart %s %s.png",
trackName, timeBuffer);
#else #else
std::string path = StringUtils::insertValues("/tmp/supertuxkart %s %s.png", std::string path = StringUtils::insertValues("/tmp/supertuxkart %s %s.png",
trackName, timeBuffer); trackName, timeBuffer);
#endif #endif
if (irr_driver->getVideoDriver()->writeImageToFile(image, io::path(path.c_str()), 0)) if (irr_driver->getVideoDriver()
->writeImageToFile(image, io::path(path.c_str()), 0))
{ {
RaceGUIBase* base = (World::getWorld() == NULL ? NULL : World::getWorld()->getRaceGUI()); RaceGUIBase* base = !World::getWorld() ? NULL :
World::getWorld()->getRaceGUI();
if (base != NULL) if (base != NULL)
{ {
base->addMessage(core::stringw(("Screenshot saved to\n" + path).c_str()), NULL, base->addMessage(core::stringw(("Screenshot saved to\n" +
path).c_str()), NULL,
2.0f, video::SColor(255,255,255,255), true, false); 2.0f, video::SColor(255,255,255,255), true, false);
} }
} }
@ -1702,8 +1740,11 @@ void IrrDriver::update(float dt)
RaceGUIBase* base = World::getWorld()->getRaceGUI(); RaceGUIBase* base = World::getWorld()->getRaceGUI();
if (base != NULL) if (base != NULL)
{ {
base->addMessage(core::stringw(("FAILED saving screenshot to\n" + path + "\n:(").c_str()), base->addMessage(
NULL, 2.0f, video::SColor(255,255,255,255), true, false); core::stringw(("FAILED saving screenshot to\n" + path +
"\n:(").c_str()),
NULL, 2.0f, video::SColor(255,255,255,255),
true, false);
} }
} }
image->drop(); image->drop();