Merge remote-tracking branch 'origin/master' into network_improvements

This commit is contained in:
Benau 2018-02-20 00:14:29 +08:00
commit 3223d05c6c
18 changed files with 226 additions and 65 deletions

View File

@ -1,16 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<stkgui> <stkgui>
<div x="2%" y="10%" width="96%" height="70%" layout="vertical-row"> <div x="2%" y="0%" width="96%" height="95%" layout="vertical-row">
<div id="kart-screen" layout="horizontal-row" width="100%" height="60%" proportion="10" align="center"> <div id="kart-screen" layout="horizontal-row" width="100%" proportion="1" align="center">
<placeholder width="100%" layout="horizontal-row" height="100%"> <model id="model" width="100%" layout="horizontal-row" height="100%">
<!-- Content is added programmatically --> </model>
</placeholder>
</div> </div>
<label text="0 to use the original color, otherwise pick one from slider." <label text="0 to use the original color, otherwise pick one from slider."
width="100%" text_align="center" word_wrap="true" width="100%" text_align="center" word_wrap="true"
I18N="In the kart color slider dialog"/> I18N="In the kart color slider dialog"/>
<spacer height="30" width="10"/> <spacer height="30" width="10"/>
<div proportion="1" width="100%" layout="horizontal-row"> <div height="fit" width="100%" layout="horizontal-row">
<gauge id="color-slider" min_value="0" max_value="100" proportion="1"/> <gauge id="color-slider" min_value="0" max_value="100" proportion="1"/>
</div> </div>
<spacer height="30" width="10"/> <spacer height="30" width="10"/>

View File

@ -2,7 +2,7 @@
<stkgui> <stkgui>
<div x="2%" y="10%" width="96%" height="80%" layout="vertical-row" > <div x="2%" y="10%" width="96%" height="80%" layout="vertical-row" >
<label id="title" width="100%" text_align="center" text="Press a key" proportion="1" /> <label id="title" width="100%" text_align="center" text="Press fully and release..." proportion="1" I18N="When changing input configurations" word_wrap="true"/>
<spacer height="25" width="10" /> <spacer height="25" width="10" />

View File

@ -63,6 +63,7 @@ CIrrDeviceAndroid::CIrrDeviceAndroid(const SIrrlichtCreationParameters& param)
Android->onAppCmd = handleAndroidCommand; Android->onAppCmd = handleAndroidCommand;
Android->onInputEvent = handleInput; Android->onInputEvent = handleInput;
printConfig();
createKeyMap(); createKeyMap();
CursorControl = new CCursorControl(); CursorControl = new CCursorControl();
@ -117,6 +118,46 @@ CIrrDeviceAndroid::~CIrrDeviceAndroid()
Android->onInputEvent = NULL; Android->onInputEvent = NULL;
} }
void CIrrDeviceAndroid::printConfig()
{
char language[3] = {};
char country[3] = {};
AConfiguration_getLanguage(Android->config, language);
AConfiguration_getCountry(Android->config, country);
int32_t mcc = AConfiguration_getMcc(Android->config);
int32_t mnc = AConfiguration_getMnc(Android->config);
int32_t orientation = AConfiguration_getOrientation(Android->config);
int32_t touch = AConfiguration_getTouchscreen(Android->config);
int32_t density = AConfiguration_getDensity(Android->config);
int32_t keyboard = AConfiguration_getKeyboard(Android->config);
int32_t navigation = AConfiguration_getNavigation(Android->config);
int32_t keys_hidden = AConfiguration_getKeysHidden(Android->config);
int32_t nav_hidden = AConfiguration_getNavHidden(Android->config);
int32_t sdk_version = AConfiguration_getSdkVersion(Android->config);
int32_t screen_size = AConfiguration_getScreenSize(Android->config);
int32_t screen_long = AConfiguration_getScreenLong(Android->config);
int32_t ui_mode_type = AConfiguration_getUiModeType(Android->config);
int32_t ui_mode_night = AConfiguration_getUiModeNight(Android->config);
os::Printer::log("Android configuration: ", ELL_DEBUG);
os::Printer::log(" country:", country != NULL ? country : "unknown", ELL_DEBUG);
os::Printer::log(" density:", core::stringc(density).c_str(), ELL_DEBUG);
os::Printer::log(" keyboard:", core::stringc(keyboard).c_str(), ELL_DEBUG);
os::Printer::log(" keys_hidden:", core::stringc(keys_hidden).c_str(), ELL_DEBUG);
os::Printer::log(" language:", language != NULL ? language : "unknown", ELL_DEBUG);
os::Printer::log(" mcc:", core::stringc(mcc).c_str(), ELL_DEBUG);
os::Printer::log(" mnc:", core::stringc(mnc).c_str(), ELL_DEBUG);
os::Printer::log(" nav_hidden:", core::stringc(nav_hidden).c_str(), ELL_DEBUG);
os::Printer::log(" navigation:", core::stringc(navigation).c_str(), ELL_DEBUG);
os::Printer::log(" orientation:", core::stringc(orientation).c_str(), ELL_DEBUG);
os::Printer::log(" screen_long:", core::stringc(screen_long).c_str(), ELL_DEBUG);
os::Printer::log(" screen_size:", core::stringc(screen_size).c_str(), ELL_DEBUG);
os::Printer::log(" sdk_version:", core::stringc(sdk_version).c_str(), ELL_DEBUG);
os::Printer::log(" touch:", core::stringc(touch).c_str(), ELL_DEBUG);
os::Printer::log(" ui_mode_type:", core::stringc(ui_mode_type).c_str(), ELL_DEBUG);
os::Printer::log(" ui_mode_night:", core::stringc(ui_mode_night).c_str(), ELL_DEBUG);
}
void CIrrDeviceAndroid::createVideoModeList() void CIrrDeviceAndroid::createVideoModeList()
{ {
if (VideoModeList.getVideoModeCount() > 0) if (VideoModeList.getVideoModeCount() > 0)

View File

@ -128,6 +128,7 @@ namespace irr
std::map<int, EKEY_CODE> KeyMap; std::map<int, EKEY_CODE> KeyMap;
void printConfig();
void createDriver(); void createDriver();
void createKeyMap(); void createKeyMap();
void createVideoModeList(); void createVideoModeList();

View File

@ -20,6 +20,7 @@
#include "config/user_config.hpp" #include "config/user_config.hpp"
#include "modes/profile_world.hpp" #include "modes/profile_world.hpp"
#include "graphics/sp/sp_base.hpp"
#include "graphics/gl_headers.hpp" #include "graphics/gl_headers.hpp"
#include "graphics/glwrap.hpp" #include "graphics/glwrap.hpp"
#include "graphics/graphics_restrictions.hpp" #include "graphics/graphics_restrictions.hpp"
@ -254,6 +255,14 @@ void CentralVideoSettings::init()
UserConfigParams::m_max_texture_size = 256; UserConfigParams::m_max_texture_size = 256;
} }
} }
#ifndef ANDROID
if (SP::sp_apitrace)
{
Log::info("IrrDriver", "Writing GPU query strings to apitrace and"
" disable buffer storage");
hasBufferStorage = false;
}
#endif
} }
} }

View File

@ -24,6 +24,7 @@
#include "graphics/central_settings.hpp" #include "graphics/central_settings.hpp"
#include "graphics/irr_driver.hpp" #include "graphics/irr_driver.hpp"
#include "graphics/shaders.hpp" #include "graphics/shaders.hpp"
#include "graphics/sp/sp_base.hpp"
#include "utils/profiler.hpp" #include "utils/profiler.hpp"
#include "utils/cpp2011.hpp" #include "utils/cpp2011.hpp"
#include "utils/string_utils.hpp" #include "utils/string_utils.hpp"
@ -156,6 +157,17 @@ debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
} }
#endif #endif
#ifdef USE_GLES2
GL_APICALL void(*GL_APIENTRY glDebugMessageControl)(GLenum source, GLenum type,
GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
GL_APICALL void(*GL_APIENTRY glDebugMessageInsert)(GLenum source, GLenum type,
GLuint id, GLenum severity, GLsizei length, const char *message);
#define GL_DEBUG_SOURCE_APPLICATION 0x824A
#define GL_DEBUG_TYPE_MARKER 0x8268
#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
#endif
void initGL() void initGL()
{ {
if (is_gl_init) if (is_gl_init)
@ -187,10 +199,37 @@ void initGL()
if (glDebugMessageCallbackARB) if (glDebugMessageCallbackARB)
glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL); glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL);
#endif #endif
#ifndef ANDROID
if (SP::sp_apitrace && hasGLExtension("GL_KHR_debug"))
{
#ifdef USE_GLES2
glDebugMessageControl = (void(GL_APIENTRY*)(GLenum, GLenum, GLenum, GLsizei,
const GLuint*, GLboolean))eglGetProcAddress("glDebugMessageControlKHR");
glDebugMessageInsert = (void(GL_APIENTRY*)(GLenum, GLenum, GLuint, GLenum,
GLsizei, const char*))eglGetProcAddress("glDebugMessageInsertKHR");
assert(glDebugMessageControl && glDebugMessageInsert);
#endif
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
}
else
{
SP::sp_apitrace = false;
}
#endif
} }
ScopedGPUTimer::ScopedGPUTimer(GPUTimer &t) : timer(t) ScopedGPUTimer::ScopedGPUTimer(GPUTimer &t) : timer(t)
{ {
#ifndef ANDROID
if (SP::sp_apitrace)
{
std::string msg = timer.getName();
msg += " begin";
glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 100,
GL_DEBUG_SEVERITY_NOTIFICATION, -1, msg.c_str());
}
#endif
if (!UserConfigParams::m_profiler_enabled) return; if (!UserConfigParams::m_profiler_enabled) return;
if (profiler.isFrozen()) return; if (profiler.isFrozen()) return;
if (!timer.canSubmitQuery) return; if (!timer.canSubmitQuery) return;
@ -205,6 +244,15 @@ ScopedGPUTimer::ScopedGPUTimer(GPUTimer &t) : timer(t)
} }
ScopedGPUTimer::~ScopedGPUTimer() ScopedGPUTimer::~ScopedGPUTimer()
{ {
#ifndef ANDROID
if (SP::sp_apitrace)
{
std::string msg = timer.getName();
msg += " end";
glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 100,
GL_DEBUG_SEVERITY_NOTIFICATION, -1, msg.c_str());
}
#endif
if (!UserConfigParams::m_profiler_enabled) return; if (!UserConfigParams::m_profiler_enabled) return;
if (profiler.isFrozen()) return; if (profiler.isFrozen()) return;
if (!timer.canSubmitQuery) return; if (!timer.canSubmitQuery) return;
@ -214,8 +262,10 @@ ScopedGPUTimer::~ScopedGPUTimer()
#endif #endif
} }
GPUTimer::GPUTimer() : initialised(false), lastResult(0), canSubmitQuery(true) GPUTimer::GPUTimer(const char* name)
: m_name(name)
{ {
reset();
} }
unsigned GPUTimer::elapsedTimeus() unsigned GPUTimer::elapsedTimeus()

View File

@ -56,9 +56,17 @@ class GPUTimer
bool initialised; bool initialised;
unsigned lastResult; unsigned lastResult;
bool canSubmitQuery; bool canSubmitQuery;
const char* m_name;
public: public:
GPUTimer(); GPUTimer(const char* name);
unsigned elapsedTimeus(); unsigned elapsedTimeus();
const char* getName() const { return m_name; }
void reset()
{
initialised = false;
lastResult = 0;
canSubmitQuery = true;
}
}; };
class VertexUtils class VertexUtils

View File

@ -98,7 +98,33 @@ using namespace irr;
IrrDriver *irr_driver = NULL; IrrDriver *irr_driver = NULL;
#ifndef SERVER_ONLY #ifndef SERVER_ONLY
GPUTimer m_perf_query[Q_LAST]; GPUTimer* m_perf_query[Q_LAST];
static const char* m_perf_query_phase[Q_LAST] =
{
"Shadows Cascade 0",
"Shadows Cascade 1",
"Shadows Cascade 2",
"Shadows Cascade 3",
"Solid Pass",
"Env Map",
"SunLight",
"PointLights",
"SSAO",
"Light Scatter",
"Glow",
"Combine Diffuse Color",
"Skybox",
"Transparent",
"Particles",
"Depth of Field",
"Godrays",
"Bloom",
"Tonemap",
"Motion Blur",
"Lightning",
"MLAA",
"GUI",
};
#endif #endif
const int MIN_SUPPORTED_HEIGHT = 768; const int MIN_SUPPORTED_HEIGHT = 768;
@ -143,6 +169,12 @@ IrrDriver::IrrDriver()
m_recording = false; m_recording = false;
m_sun_interposer = NULL; m_sun_interposer = NULL;
#ifndef SERVER_ONLY
for (unsigned i = 0; i < Q_LAST; i++)
{
m_perf_query[i] = new GPUTimer(m_perf_query_phase[i]);
}
#endif
} // IrrDriver } // IrrDriver
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -156,12 +188,29 @@ IrrDriver::~IrrDriver()
STKTexManager::getInstance()->kill(); STKTexManager::getInstance()->kill();
delete m_wind; delete m_wind;
delete m_renderer; delete m_renderer;
#ifndef SERVER_ONLY
for (unsigned i = 0; i < Q_LAST; i++)
{
delete m_perf_query[i];
}
#endif
assert(m_device != NULL); assert(m_device != NULL);
m_device->drop(); m_device->drop();
m_device = NULL; m_device = NULL;
m_modes.clear(); m_modes.clear();
} // ~IrrDriver } // ~IrrDriver
// ----------------------------------------------------------------------------
const char* IrrDriver::getGPUQueryPhaseName(unsigned q)
{
#ifndef SERVER_ONLY
assert(q < Q_LAST);
return m_perf_query_phase[q];
#else
return "";
#endif
} // getGPUQueryPhaseName
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/** Called before a race is started, after all cameras are set up. /** Called before a race is started, after all cameras are set up.
*/ */
@ -184,7 +233,7 @@ core::array<video::IRenderTarget> &IrrDriver::getMainSetup()
GPUTimer &IrrDriver::getGPUTimer(unsigned i) GPUTimer &IrrDriver::getGPUTimer(unsigned i)
{ {
return m_perf_query[i]; return *m_perf_query[i];
} // getGPUTimer } // getGPUTimer
#endif #endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -856,6 +905,13 @@ void IrrDriver::applyResolutionSettings()
SharedGPUObjects::reset(); SharedGPUObjects::reset();
initDevice(); initDevice();
#ifndef SERVER_ONLY
for (unsigned i = 0; i < Q_LAST; i++)
{
m_perf_query[i]->reset();
}
#endif
font_manager = new FontManager(); font_manager = new FontManager();
font_manager->loadFonts(); font_manager->loadFonts();
// Re-init GUI engine // Re-init GUI engine

View File

@ -281,6 +281,7 @@ public:
void printRenderStats(); void printRenderStats();
void requestScreenshot(); void requestScreenshot();
class GPUTimer &getGPUTimer(unsigned); class GPUTimer &getGPUTimer(unsigned);
const char* getGPUQueryPhaseName(unsigned);
#ifndef SERVER_ONLY #ifndef SERVER_ONLY
std::unique_ptr<RenderTarget> createRenderTarget(const irr::core::dimension2du &dimension, std::unique_ptr<RenderTarget> createRenderTarget(const irr::core::dimension2du &dimension,

View File

@ -67,6 +67,8 @@ std::array<float, 16>* g_joint_ptr = NULL;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool sp_culling = true; bool sp_culling = true;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool sp_apitrace = false;
// ----------------------------------------------------------------------------
bool sp_debug_view = false; bool sp_debug_view = false;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool g_handle_shadow = false; bool g_handle_shadow = false;

View File

@ -93,6 +93,7 @@ extern unsigned sp_shadow_poly_count;
extern int sp_cur_shadow_cascade; extern int sp_cur_shadow_cascade;
extern bool sp_culling; extern bool sp_culling;
extern bool sp_debug_view; extern bool sp_debug_view;
extern bool sp_apitrace;
extern unsigned sp_cur_player; extern unsigned sp_cur_player;
extern unsigned sp_cur_buf_id[MAX_PLAYER_COUNT]; extern unsigned sp_cur_buf_id[MAX_PLAYER_COUNT];
extern irr::core::vector3df sp_wind_dir; extern irr::core::vector3df sp_wind_dir;

View File

@ -65,7 +65,7 @@ namespace GUIEngine
std::shared_ptr<RenderInfo> m_render_info; std::shared_ptr<RenderInfo> m_render_info;
const unsigned m_rtt_size; unsigned m_rtt_size;
public: public:
@ -85,6 +85,8 @@ namespace GUIEngine
void update(float delta); void update(float delta);
void setRTTSize(unsigned rtt_size) { m_rtt_size = rtt_size; }
virtual void elementRemoved(); virtual void elementRemoved();
/** Disables any model rotation */ /** Disables any model rotation */

View File

@ -189,6 +189,7 @@
#include "graphics/material_manager.hpp" #include "graphics/material_manager.hpp"
#include "graphics/particle_kind_manager.hpp" #include "graphics/particle_kind_manager.hpp"
#include "graphics/referee.hpp" #include "graphics/referee.hpp"
#include "graphics/sp/sp_base.hpp"
#include "guiengine/engine.hpp" #include "guiengine/engine.hpp"
#include "guiengine/event_handler.hpp" #include "guiengine/event_handler.hpp"
#include "guiengine/dialog_queue.hpp" #include "guiengine/dialog_queue.hpp"
@ -632,6 +633,9 @@ void cmdLineHelp()
" Takes precedence over trilinear or bilinear\n" " Takes precedence over trilinear or bilinear\n"
" texture filtering.\n" " texture filtering.\n"
" --shadows=n Set resolution of shadows (0 to disable).\n" " --shadows=n Set resolution of shadows (0 to disable).\n"
" --apitrace This will disable buffer storage and\n"
" writing gpu query strings to opengl, which\n"
" can be seen later in apitrace.\n"
"\n" "\n"
"You can visit SuperTuxKart's homepage at " "You can visit SuperTuxKart's homepage at "
"https://supertuxkart.net\n\n", "https://supertuxkart.net\n\n",
@ -710,6 +714,12 @@ int handleCmdLinePreliminary()
UserConfigParams::m_verbosity |= UserConfigParams::LOG_ALL; UserConfigParams::m_verbosity |= UserConfigParams::LOG_ALL;
//if(CommandLine::has("--online")) //if(CommandLine::has("--online"))
MainMenuScreen::m_enable_online=true; MainMenuScreen::m_enable_online=true;
#if !(defined(SERVER_ONLY) || defined(ANDROID))
if(CommandLine::has("--apitrace"))
{
SP::sp_apitrace = true;
}
#endif
std::string s; std::string s;
if(CommandLine::has("--stk-config", &s)) if(CommandLine::has("--stk-config", &s))

View File

@ -40,9 +40,14 @@ void override_default_params()
// Disable advanced lighting by default to make the game playable // Disable advanced lighting by default to make the game playable
UserConfigParams::m_dynamic_lights = false; UserConfigParams::m_dynamic_lights = false;
// Enable touch steering and screen keyboard // Enable touch steering and screen keyboard when touchscreen is available
UserConfigParams::m_multitouch_enabled = true; int32_t touch = AConfiguration_getTouchscreen(global_android_app->config);
UserConfigParams::m_screen_keyboard = true;
if (touch != ACONFIGURATION_TOUCHSCREEN_NOTOUCH)
{
UserConfigParams::m_multitouch_enabled = true;
UserConfigParams::m_screen_keyboard = true;
}
// It shouldn't matter, but STK is always run in fullscreen on android // It shouldn't matter, but STK is always run in fullscreen on android
UserConfigParams::m_fullscreen = true; UserConfigParams::m_fullscreen = true;
@ -62,14 +67,14 @@ void android_main(struct android_app* app)
{ {
Log::info("AndroidMain", "Loading application..."); Log::info("AndroidMain", "Loading application...");
app_dummy(); global_android_app = app;
// Initialize global Android window state variables // Initialize global Android window state variables
CIrrDeviceAndroid::onCreate(); CIrrDeviceAndroid::onCreate();
app_dummy();
override_default_params(); override_default_params();
global_android_app = app;
main(0, {}); main(0, {});
Log::info("AndroidMain", "Closing STK..."); Log::info("AndroidMain", "Closing STK...");

View File

@ -32,7 +32,7 @@ using namespace GUIEngine;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
KartColorSliderDialog::KartColorSliderDialog(PlayerProfile* pp) KartColorSliderDialog::KartColorSliderDialog(PlayerProfile* pp)
: ModalDialog(0.75f, 0.75f, MODAL_DIALOG_LOCATION_BOTTOM) : ModalDialog(0.75f, 0.75f, MODAL_DIALOG_LOCATION_CENTER)
{ {
loadFromFile("kart_color_slider.stkgui"); loadFromFile("kart_color_slider.stkgui");
m_player_profile = pp; m_player_profile = pp;
@ -45,19 +45,16 @@ KartColorSliderDialog::KartColorSliderDialog(PlayerProfile* pp)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
KartColorSliderDialog::~KartColorSliderDialog() KartColorSliderDialog::~KartColorSliderDialog()
{ {
if (m_model_view->getIrrlichtElement() != NULL)
{
m_model_view->getIrrlichtElement()->remove();
}
} // ~KartColorSliderDialog } // ~KartColorSliderDialog
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void KartColorSliderDialog::beforeAddingWidgets() void KartColorSliderDialog::beforeAddingWidgets()
{ {
Widget* kart_screen = getWidget<Widget>("kart-screen"); m_model_view = getWidget<ModelViewWidget>("model");
m_model_view = new ModelViewWidget(
irr_driver->getActualScreenSize().Height > 1280 || const core::dimension2du screen_size = irr_driver->getActualScreenSize();
irr_driver->getActualScreenSize().Width > 1280 ? 1024 : 512); bool need_hd_rtt = (screen_size.Width > 1280 || screen_size.Height > 1280);
m_model_view->setRTTSize(need_hd_rtt ? 1024 : 512);
const KartProperties* props = const KartProperties* props =
kart_properties_manager->getKart(UserConfigParams::m_default_kart); kart_properties_manager->getKart(UserConfigParams::m_default_kart);
@ -128,9 +125,6 @@ void KartColorSliderDialog::beforeAddingWidgets()
m_model_view->setRotateContinuously(35.0f); m_model_view->setRotateContinuously(35.0f);
m_model_view->update(0); m_model_view->update(0);
kart_screen->getChildren().push_back(m_model_view);
m_model_view->move(kart_screen->m_w / 2, kart_screen->m_h / 2,
kart_screen->m_w / 2, kart_screen->m_w / 2);
} // beforeAddingWidgets } // beforeAddingWidgets
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -539,7 +539,7 @@ void OptionsScreenDevice::eventCallback(Widget* widget,
binding_to_set = (PlayerAction)n; binding_to_set = (PlayerAction)n;
new PressAKeyDialog(0.4f, 0.4f); new PressAKeyDialog(0.5f, 0.4f);
if (m_config->isKeyboard()) if (m_config->isKeyboard())
{ {

View File

@ -138,16 +138,25 @@ void Log::printMessage(int level, const char *component, const char *format,
static const char *names[] = { "debug", "verbose ", "info ", static const char *names[] = { "debug", "verbose ", "info ",
"warn ", "error ", "fatal " }; "warn ", "error ", "fatal " };
const int MAX_LENGTH = 2048; const int MAX_LENGTH = 4096;
char line[MAX_LENGTH + 1]; char line[MAX_LENGTH + 1];
int index = 0; int index = 0;
if (!m_prefix.empty()) int remaining = MAX_LENGTH;
index += snprintf(line+index, MAX_LENGTH-index, "%s ", m_prefix.c_str());
index += snprintf (line + index, MAX_LENGTH - index, "[%s] %s: ", names[level], component); if (!m_prefix.empty())
index += vsnprintf(line + index, MAX_LENGTH - index, format, args); {
index += snprintf(line+index, remaining, "%s ", m_prefix.c_str());
remaining = MAX_LENGTH - index > 0 ? MAX_LENGTH - index : 0;
}
index += snprintf (line + index, remaining, "[%s] %s: ", names[level], component);
remaining = MAX_LENGTH - index > 0 ? MAX_LENGTH - index : 0;
index += vsnprintf(line + index, remaining, format, args);
remaining = MAX_LENGTH - index > 0 ? MAX_LENGTH - index : 0;
va_end(args); va_end(args);
index = snprintf (line + index, MAX_LENGTH - index, "\n");
index = index > MAX_LENGTH - 1 ? MAX_LENGTH - 1 : index;
sprintf(line + index, "\n");
// If the data is not buffered, immediately print it: // If the data is not buffered, immediately print it:
if (m_buffer_size <= 1) if (m_buffer_size <= 1)

View File

@ -35,33 +35,6 @@
#include <stack> #include <stack>
#include <sstream> #include <sstream>
static const char* GPU_Phase[Q_LAST] =
{
"Shadows Cascade 0",
"Shadows Cascade 1",
"Shadows Cascade 2",
"Shadows Cascade 3",
"Solid Pass",
"Env Map",
"SunLight",
"PointLights",
"SSAO",
"Light Scatter",
"Glow",
"Combine Diffuse Color",
"Skybox",
"Transparent",
"Particles",
"Depth of Field",
"Godrays",
"Bloom",
"Tonemap",
"Motion Blur",
"Lightning",
"MLAA",
"GUI",
};
Profiler profiler; Profiler profiler;
// Unit is in pencentage of the screen dimensions // Unit is in pencentage of the screen dimensions
@ -486,7 +459,7 @@ void Profiler::draw()
if (hovered_gpu_marker != Q_LAST) if (hovered_gpu_marker != Q_LAST)
{ {
std::ostringstream oss; std::ostringstream oss;
oss << GPU_Phase[hovered_gpu_marker] << " : " oss << irr_driver->getGPUQueryPhaseName(hovered_gpu_marker) << " : "
<< hovered_gpu_marker_elapsed << " us"; << hovered_gpu_marker_elapsed << " us";
font->draw(oss.str().c_str(), GPU_MARKERS_NAMES_POS, font->draw(oss.str().c_str(), GPU_MARKERS_NAMES_POS,
video::SColor(0xFF, 0xFF, 0x00, 0x00)); video::SColor(0xFF, 0xFF, 0x00, 0x00));
@ -590,7 +563,7 @@ void Profiler::writeToFile()
for (unsigned i = 0; i < Q_LAST; i++) for (unsigned i = 0; i < Q_LAST; i++)
{ {
f_gpu << "\"" << GPU_Phase[i] << "(" << i+1 << ")\" "; f_gpu << "\"" << irr_driver->getGPUQueryPhaseName(i) << "(" << i+1 << ")\" ";
} // for i < Q_LAST } // for i < Q_LAST
f_gpu << std::endl; f_gpu << std::endl;