From af6c121a22e58f0f694b0a860e3a1003fcbb33ed Mon Sep 17 00:00:00 2001 From: Flakebi Date: Wed, 4 Jun 2014 15:10:20 +0200 Subject: [PATCH] Run whitespaces.py --- src/config/player_manager.cpp | 4 +- src/config/player_manager.hpp | 10 +- src/config/player_profile.cpp | 8 +- src/config/player_profile.hpp | 8 +- src/graphics/camera.cpp | 2 +- src/graphics/glwrap.cpp | 1760 ++++++++--------- src/graphics/glwrap.hpp | 464 ++--- src/graphics/irr_driver.cpp | 6 +- src/graphics/material.cpp | 2 +- src/graphics/render.cpp | 54 +- src/graphics/stkmesh.cpp | 436 ++-- src/graphics/stkmeshscenenode.cpp | 2 +- src/io/file_manager.cpp | 8 +- src/karts/controller/skidding_ai.cpp | 8 +- src/main.cpp | 2 +- src/modes/profile_world.cpp | 8 +- src/network/protocols/request_connection.cpp | 6 +- src/network/protocols/show_public_address.cpp | 2 +- src/network/protocols/start_game_protocol.cpp | 6 +- src/online/online_player_profile.cpp | 16 +- src/online/online_player_profile.hpp | 4 +- src/online/request_manager.cpp | 6 +- .../dialogs/change_password_dialog.cpp | 6 +- .../dialogs/user_info_dialog.cpp | 2 +- src/states_screens/dialogs/vote_dialog.cpp | 6 +- src/states_screens/edit_track_screen.cpp | 6 +- src/states_screens/online_screen.cpp | 6 +- src/states_screens/user_screen.cpp | 18 +- src/states_screens/user_screen.hpp | 6 +- src/tracks/model_definition_loader.cpp | 2 +- src/tracks/track.cpp | 2 +- src/tracks/track_object.cpp | 6 +- src/utils/debug.cpp | 6 +- src/utils/leak_check.cpp | 2 +- 34 files changed, 1445 insertions(+), 1445 deletions(-) diff --git a/src/config/player_manager.cpp b/src/config/player_manager.cpp index c3a4e5bc7..0455fab3c 100644 --- a/src/config/player_manager.cpp +++ b/src/config/player_manager.cpp @@ -268,7 +268,7 @@ void PlayerManager::save() if(m_current_player && UserConfigParams::m_remember_user) { - players_file << L" getName() << L"\"/>\n"; } @@ -468,7 +468,7 @@ PlayerProfile *PlayerManager::getPlayer(const irr::core::stringw &name) } // getPlayer // ---------------------------------------------------------------------------- /** Sets the current player. This is the player that is used for story mode - * and achievements. + * and achievements. * \param Player profile to be the current player. */ void PlayerManager::setCurrentPlayer(PlayerProfile *player) diff --git a/src/config/player_manager.hpp b/src/config/player_manager.hpp index 8f950917c..5ebbf68c0 100644 --- a/src/config/player_manager.hpp +++ b/src/config/player_manager.hpp @@ -31,7 +31,7 @@ class AchievementsStatus; -namespace Online +namespace Online { class CurrentUser; class HTTPRequest; @@ -42,10 +42,10 @@ class PlayerProfile; /** A special class that manages all local player accounts. It reads all player * accounts from the players.xml file in the user config directory. For each - * player an instance of PlayerProfile is created, which keeps track of + * player an instance of PlayerProfile is created, which keeps track of * story mode progress, achievements and other data. It also keeps track of * the currently logged in player. - * It includes several handy static functions which avoid long call + * It includes several handy static functions which avoid long call * sequences, e.g.: * PlayerManager::getCurrentOnlineId() * which is just: @@ -116,9 +116,9 @@ public: // ------------------------------------------------------------------------ /** Returns the current player. */ - static PlayerProfile* getCurrentPlayer() + static PlayerProfile* getCurrentPlayer() { - return get()->m_current_player; + return get()->m_current_player; } // getCurrentPlayer // ------------------------------------------------------------------------ diff --git a/src/config/player_profile.cpp b/src/config/player_profile.cpp index 5cacd2829..fe7d47077 100644 --- a/src/config/player_profile.cpp +++ b/src/config/player_profile.cpp @@ -61,7 +61,7 @@ PlayerProfile::PlayerProfile(const core::stringw& name, bool is_guest) * as soon as the network thread is started) to avoid the player having to * wait for the login to finish , which needs the main player data (i.e. * the default player, and saved session data). So the constructor only - * reads this data, the rest of the player data is handled in + * reads this data, the rest of the player data is handled in * loadRemainingData later in the initialisation process. * \param node The XML node representing this player. */ @@ -156,7 +156,7 @@ void PlayerProfile::addIcon() // followed by .png or .jpg. std::ostringstream out; out << m_unique_id <<"."<copyFile(source, + if(file_manager->copyFile(source, file_manager->getUserConfigFile(out.str())) ) { m_icon_filename = out.str(); @@ -172,7 +172,7 @@ void PlayerProfile::addIcon() * file is undefined, it returns a "?" mark texture. Note, getAsset does * not return a reference, but only a temporary string. So we must return a * copy of the string (not a reference to). - */ + */ const std::string PlayerProfile::getIconFilename() const { // If the icon file is undefined or does not exist, return the "?" icon @@ -200,7 +200,7 @@ void PlayerProfile::save(UTFWriter &out) out << L" unique-id=\"" << m_unique_id << L"\" saved-session=\"" << m_saved_session << L"\"\n"; - out << L" saved-user=\"" << m_saved_user_id + out << L" saved-user=\"" << m_saved_user_id << L"\" saved-token=\"" << m_saved_token << L"\"\n"; out << L" last-online-name=\"" << m_last_online_name << L"\" last-was-online=\"" << m_last_was_online<< L"\">\n"; diff --git a/src/config/player_profile.hpp b/src/config/player_profile.hpp index 2b6a62c72..a4c5ab3c7 100644 --- a/src/config/player_profile.hpp +++ b/src/config/player_profile.hpp @@ -32,7 +32,7 @@ using namespace irr; class AchievementsStatus; namespace Online { - class CurrentUser; + class CurrentUser; class HTTPRequest; class OnlineProfile; class XMLRequest; @@ -167,9 +167,9 @@ public: } // isGuestAccount // ------------------------------------------------------------------------ /** Returns the last used online name. */ - const core::stringw& getLastOnlineName() const + const core::stringw& getLastOnlineName() const { - return m_last_online_name; + return m_last_online_name; } // getLastOnlineName // ------------------------------------------------------------------------ /** Sets the last used online name. */ @@ -250,7 +250,7 @@ public: // ------------------------------------------------------------------------ /** If a session was saved, return the id of the saved user. */ int getSavedUserId() const - { + { assert(m_saved_session); return m_saved_user_id; } // getSavedUserId diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index 8f4e7f6d2..70a57c36f 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -346,7 +346,7 @@ void Camera::smoothMoveCamera(float dt) if ((m_kart->getSpeed() > 5 ) || (m_kart->getSpeed() < 0 )) { - current_position += ((wanted_position - current_position) * dt + current_position += ((wanted_position - current_position) * dt * (m_kart->getSpeed()>0 ? m_kart->getSpeed()/3 + 1.0f : -1.5f * m_kart->getSpeed() + 2.0f)); } diff --git a/src/graphics/glwrap.cpp b/src/graphics/glwrap.cpp index 8f200a98f..c8c744164 100644 --- a/src/graphics/glwrap.cpp +++ b/src/graphics/glwrap.cpp @@ -1,880 +1,880 @@ -#include "graphics/glwrap.hpp" -#include "irr_driver.hpp" -#include -#include -#include "config/user_config.hpp" -#include "utils/profiler.hpp" - -#ifdef _IRR_WINDOWS_API_ -#define IRR_OGL_LOAD_EXTENSION(X) wglGetProcAddress(reinterpret_cast(X)) -PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks; -PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback; -PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback; -PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback; -PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings; -PFNGLBINDBUFFERBASEPROC glBindBufferBase; -PFNGLGENBUFFERSPROC glGenBuffers; -PFNGLBINDBUFFERPROC glBindBuffer; -PFNGLBUFFERDATAPROC glBufferData; -PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; -PFNGLCREATESHADERPROC glCreateShader; -PFNGLCOMPILESHADERPROC glCompileShader; -PFNGLSHADERSOURCEPROC glShaderSource; -PFNGLCREATEPROGRAMPROC glCreateProgram; -PFNGLATTACHSHADERPROC glAttachShader; -PFNGLLINKPROGRAMPROC glLinkProgram; -PFNGLUSEPROGRAMPROC glUseProgram; -PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; -PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; -PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; -PFNGLUNIFORM1FPROC glUniform1f; -PFNGLUNIFORM3FPROC glUniform3f; -PFNGLDELETESHADERPROC glDeleteShader; -PFNGLGETSHADERIVPROC glGetShaderiv; -PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; -PFNGLACTIVETEXTUREPROC glActiveTexture; -PFNGLUNIFORM2FPROC glUniform2f; -PFNGLUNIFORM1IPROC glUniform1i; -PFNGLUNIFORM3IPROC glUniform3i; -PFNGLUNIFORM4IPROC glUniform4i; -PFNGLUNIFORM1FVPROC glUniform1fv; -PFNGLUNIFORM4FVPROC glUniform4fv; -PFNGLGETPROGRAMIVPROC glGetProgramiv; -PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; -PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; -PFNGLBLENDEQUATIONPROC glBlendEquation; -PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; -PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; -PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; -PFNGLDELETEBUFFERSPROC glDeleteBuffers; -PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; -PFNGLBINDVERTEXARRAYPROC glBindVertexArray; -PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; -PFNGLTEXBUFFERPROC glTexBuffer; -PFNGLBUFFERSUBDATAPROC glBufferSubData; -PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; -PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB; -PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; -PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; -PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; -PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; -PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; -PFNGLTEXIMAGE3DPROC glTexImage3D; -PFNGLGENERATEMIPMAPPROC glGenerateMipmap; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; -PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; -PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; -PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; -PFNGLBLENDCOLORPROC glBlendColor; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; -PFNGLTEXSTORAGE1DPROC glTexStorage1D; -PFNGLTEXSTORAGE2DPROC glTexStorage2D; -PFNGLTEXSTORAGE3DPROC glTexStorage3D; -#endif - -static bool is_gl_init = false; - -#ifdef DEBUG -#ifdef WIN32 -#define ARB_DEBUG_OUTPUT -#endif -#endif - -#ifdef ARB_DEBUG_OUTPUT -static void -#ifdef WIN32 -CALLBACK -#endif -debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, - const GLchar* msg, const void *userparam) -{ - switch(source) - { - case GL_DEBUG_SOURCE_API_ARB: - Log::warn("GLWrap", "OpenGL debug callback - API"); - break; - case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: - Log::warn("GLWrap", "OpenGL debug callback - WINDOW_SYSTEM"); - break; - case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: - Log::warn("GLWrap", "OpenGL debug callback - SHADER_COMPILER"); - break; - case GL_DEBUG_SOURCE_THIRD_PARTY_ARB: - Log::warn("GLWrap", "OpenGL debug callback - THIRD_PARTY"); - break; - case GL_DEBUG_SOURCE_APPLICATION_ARB: - Log::warn("GLWrap", "OpenGL debug callback - APPLICATION"); - break; - case GL_DEBUG_SOURCE_OTHER_ARB: - Log::warn("GLWrap", "OpenGL debug callback - OTHER"); - break; - } - - switch(type) - { - case GL_DEBUG_TYPE_ERROR_ARB: - Log::warn("GLWrap", " Error type : ERROR"); - break; - case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: - Log::warn("GLWrap", " Error type : DEPRECATED_BEHAVIOR"); - break; - case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: - Log::warn("GLWrap", " Error type : UNDEFINED_BEHAVIOR"); - break; - case GL_DEBUG_TYPE_PORTABILITY_ARB: - Log::warn("GLWrap", " Error type : PORTABILITY"); - break; - case GL_DEBUG_TYPE_PERFORMANCE_ARB: - Log::warn("GLWrap", " Error type : PERFORMANCE"); - break; - case GL_DEBUG_TYPE_OTHER_ARB: - Log::warn("GLWrap", " Error type : OTHER"); - break; - } - - switch(severity) - { - case GL_DEBUG_SEVERITY_HIGH_ARB: - Log::warn("GLWrap", " Severity : HIGH"); - break; - case GL_DEBUG_SEVERITY_MEDIUM_ARB: - Log::warn("GLWrap", " Severity : MEDIUM"); - break; - case GL_DEBUG_SEVERITY_LOW_ARB: - Log::warn("GLWrap", " Severity : LOW"); - break; - } - - if (msg) - Log::warn("GLWrap", " Message : %s", msg); -} -#endif - -void initGL() -{ - if (is_gl_init) - return; - is_gl_init = true; -#ifdef _IRR_WINDOWS_API_ - glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)IRR_OGL_LOAD_EXTENSION("glGenTransformFeedbacks"); - glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBindTransformFeedback"); - glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glDrawTransformFeedback"); - glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBeginTransformFeedback"); - glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glEndTransformFeedback"); - glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)IRR_OGL_LOAD_EXTENSION("glBindBufferBase"); - glGenBuffers = (PFNGLGENBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenBuffers"); - glBindBuffer = (PFNGLBINDBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindBuffer"); - glBufferData = (PFNGLBUFFERDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferData"); - glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribPointer"); - glCreateShader = (PFNGLCREATESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCreateShader"); - glCompileShader = (PFNGLCOMPILESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCompileShader"); - glShaderSource = (PFNGLSHADERSOURCEPROC)IRR_OGL_LOAD_EXTENSION("glShaderSource"); - glCreateProgram = (PFNGLCREATEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glCreateProgram"); - glAttachShader = (PFNGLATTACHSHADERPROC)IRR_OGL_LOAD_EXTENSION("glAttachShader"); - glLinkProgram = (PFNGLLINKPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glLinkProgram"); - glUseProgram = (PFNGLUSEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glUseProgram"); - glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glEnableVertexAttribArray"); - glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformLocation"); - glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniformMatrix4fv"); - glUniform1f = (PFNGLUNIFORM1FPROC)IRR_OGL_LOAD_EXTENSION("glUniform1f"); - glUniform3f = (PFNGLUNIFORM3FPROC)IRR_OGL_LOAD_EXTENSION("glUniform3f"); - glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glDisableVertexAttribArray"); - glDeleteShader = (PFNGLDELETESHADERPROC)IRR_OGL_LOAD_EXTENSION("glDeleteShader"); - glGetShaderiv = (PFNGLGETSHADERIVPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderiv"); - glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderInfoLog"); - glActiveTexture = (PFNGLACTIVETEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glActiveTexture"); - glUniform2f = (PFNGLUNIFORM2FPROC)IRR_OGL_LOAD_EXTENSION("glUniform2f"); - glUniform4i = (PFNGLUNIFORM4IPROC)IRR_OGL_LOAD_EXTENSION("glUniform4i"); - glUniform3i = (PFNGLUNIFORM3IPROC)IRR_OGL_LOAD_EXTENSION("glUniform3i"); - glUniform1i = (PFNGLUNIFORM1IPROC)IRR_OGL_LOAD_EXTENSION("glUniform1i"); - glGetProgramiv = (PFNGLGETPROGRAMIVPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramiv"); - glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramInfoLog"); - glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)IRR_OGL_LOAD_EXTENSION("glTransformFeedbackVaryings"); - glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetAttribLocation"); - glBlendEquation = (PFNGLBLENDEQUATIONPROC)IRR_OGL_LOAD_EXTENSION("glBlendEquation"); - glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribDivisor"); - glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawArraysInstanced"); - glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsInstanced"); - glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteBuffers"); - glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glGenVertexArrays"); - glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)IRR_OGL_LOAD_EXTENSION("glBindVertexArray"); - glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteVertexArrays"); - glTexBuffer = (PFNGLTEXBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glTexBuffer"); - glUniform1fv = (PFNGLUNIFORM1FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform1fv"); - glUniform4fv = (PFNGLUNIFORM4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform4fv"); - glBufferSubData = (PFNGLBUFFERSUBDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferSubData"); - glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribIPointer"); - glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenFramebuffers"); - glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers"); - glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindFramebuffer"); - glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D"); - glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture"); - glTexImage3D = (PFNGLTEXIMAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexImage3D"); - glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)IRR_OGL_LOAD_EXTENSION("glGenerateMipmap"); - glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus"); - glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)IRR_OGL_LOAD_EXTENSION("glTexImage2DMultisample"); - glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBlitFramebuffer"); - glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformBlockIndex"); - glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)IRR_OGL_LOAD_EXTENSION("glUniformBlockBinding"); - glBlendColor = (PFNGLBLENDCOLORPROC)IRR_OGL_LOAD_EXTENSION("glBlendColor"); - glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D"); - glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)IRR_OGL_LOAD_EXTENSION("glGetCompressedTexImage"); - glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage1D"); - glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage2D"); - glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage3D"); -#ifdef DEBUG - glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)IRR_OGL_LOAD_EXTENSION("glDebugMessageCallbackARB"); -#endif -#endif -#ifdef ARB_DEBUG_OUTPUT - if (glDebugMessageCallbackARB) - glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL); -#endif -} - -// Mostly from shader tutorial -GLuint LoadShader(const char * file, unsigned type) -{ - GLuint Id = glCreateShader(type); - char versionString[20]; - sprintf(versionString, "#version %d\n", irr_driver->getGLSLVersion()); - std::string Code = versionString; - std::ifstream Stream(file, std::ios::in); - Code += "//" + std::string(file) + "\n"; - if (UserConfigParams::m_ubo_disabled) - Code += "#define UBO_DISABLED\n"; - if (irr_driver->hasVSLayerExtension()) - Code += "#define VSLayer\n"; - if (Stream.is_open()) - { - std::string Line = ""; - while (getline(Stream, Line)) - Code += "\n" + Line; - Stream.close(); - } - GLint Result = GL_FALSE; - int InfoLogLength; - Log::info("GLWrap", "Compiling shader : %s", file); - char const * SourcePointer = Code.c_str(); - int length = strlen(SourcePointer); - glShaderSource(Id, 1, &SourcePointer, &length); - glCompileShader(Id); - - glGetShaderiv(Id, GL_COMPILE_STATUS, &Result); - if (Result == GL_FALSE) - { - Log::error("GLWrap", "Error in shader %s", file); - glGetShaderiv(Id, GL_INFO_LOG_LENGTH, &InfoLogLength); - char *ErrorMessage = new char[InfoLogLength]; - glGetShaderInfoLog(Id, InfoLogLength, NULL, ErrorMessage); - Log::error("GLWrap", ErrorMessage); - delete[] ErrorMessage; - } - - glGetError(); - - return Id; -} - -GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount) -{ - GLuint Program = glCreateProgram(); - loadAndAttach(Program, GL_VERTEX_SHADER, vertex_file_path); - glTransformFeedbackVaryings(Program, varyingscount, varyings, GL_INTERLEAVED_ATTRIBS); - glLinkProgram(Program); - - GLint Result = GL_FALSE; - int InfoLogLength; - glGetProgramiv(Program, GL_LINK_STATUS, &Result); - if (Result == GL_FALSE) - { - glGetProgramiv(Program, GL_INFO_LOG_LENGTH, &InfoLogLength); - char *ErrorMessage = new char[InfoLogLength]; - glGetProgramInfoLog(Program, InfoLogLength, NULL, ErrorMessage); - printf(ErrorMessage); - delete[] ErrorMessage; - } - - glGetError(); - - return Program; -} - -GLuint getTextureGLuint(irr::video::ITexture *tex) -{ - return static_cast(tex)->getOpenGLTextureName(); -} - -GLuint getDepthTexture(irr::video::ITexture *tex) -{ - assert(tex->isRenderTarget()); - return static_cast(tex)->DepthBufferTexture; -} - -std::set AlreadyTransformedTexture; -void resetTextureTable() -{ - AlreadyTransformedTexture.clear(); -} - -void compressTexture(irr::video::ITexture *tex, bool srgb, bool premul_alpha) -{ - if (AlreadyTransformedTexture.find(tex) != AlreadyTransformedTexture.end()) - return; - AlreadyTransformedTexture.insert(tex); - - glBindTexture(GL_TEXTURE_2D, getTextureGLuint(tex)); - - std::string cached_file; - if (UserConfigParams::m_texture_compression) - { - // Try to retrieve the compressed texture in cache - std::string tex_name = irr_driver->getTextureName(tex); - if (!tex_name.empty()) { - cached_file = file_manager->getTextureCacheLocation(tex_name) + ".gltz"; - if (!file_manager->fileIsNewer(tex_name, cached_file)) { - if (loadCompressedTexture(cached_file)) - return; - } - } - } - - size_t w = tex->getSize().Width, h = tex->getSize().Height; - unsigned char *data = new unsigned char[w * h * 4]; - memcpy(data, tex->lock(), w * h * 4); - tex->unlock(); - unsigned internalFormat, Format; - if (tex->hasAlpha()) - Format = GL_BGRA; - else - Format = GL_BGR; - - if (premul_alpha) - { - for (unsigned i = 0; i < w * h; i++) - { - float alpha = data[4 * i + 3]; - if (alpha > 0.) - alpha = pow(alpha / 255.f, 1.f / 2.2f); - data[4 * i ] = (unsigned char)(data[4 * i ] * alpha); - data[4 * i + 1] = (unsigned char)(data[4 * i + 1] * alpha); - data[4 * i + 2] = (unsigned char)(data[4 * i + 2] * alpha); - } - } - - if (!UserConfigParams::m_texture_compression) - { - if (srgb) - internalFormat = (tex->hasAlpha()) ? GL_SRGB_ALPHA : GL_SRGB; - else - internalFormat = (tex->hasAlpha()) ? GL_RGBA : GL_RGB; - } - else - { - if (srgb) - internalFormat = (tex->hasAlpha()) ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT : GL_COMPRESSED_SRGB_S3TC_DXT1_EXT; - else - internalFormat = (tex->hasAlpha()) ? GL_COMPRESSED_RGBA_S3TC_DXT5_EXT : GL_COMPRESSED_RGB_S3TC_DXT1_EXT; - } - glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, w, h, 0, Format, GL_UNSIGNED_BYTE, (GLvoid *)data); - glGenerateMipmap(GL_TEXTURE_2D); - delete[] data; - - if (UserConfigParams::m_texture_compression && !cached_file.empty()) - { - // Save the compressed texture in the cache for later use. - saveCompressedTexture(cached_file); - } -} - -//----------------------------------------------------------------------------- -/** Try to load a compressed texture from the given file name. - * Data in the specified file need to have a specific format. See the - * saveCompressedTexture() function for a description of the format. - * \return true if the loading succeeded, false otherwise. - * \see saveCompressedTexture - */ -bool loadCompressedTexture(const std::string& compressed_tex) -{ - std::ifstream ifs(compressed_tex.c_str(), std::ios::in | std::ios::binary); - if (!ifs.is_open()) - return false; - - int internal_format; - int w, h; - int size = -1; - ifs.read((char*)&internal_format, sizeof(int)); - ifs.read((char*)&w, sizeof(int)); - ifs.read((char*)&h, sizeof(int)); - ifs.read((char*)&size, sizeof(int)); - - if (ifs.fail() || size == -1) - return false; - - char *data = new char[size]; - ifs.read(data, size); - if (!ifs.fail()) - { - glCompressedTexImage2D(GL_TEXTURE_2D, 0, internal_format, - w, h, 0, size, (GLvoid*)data); - glGenerateMipmap(GL_TEXTURE_2D); - delete[] data; - ifs.close(); - return true; - } - delete[] data; - return false; -} - -//----------------------------------------------------------------------------- -/** Try to save the last texture sent to glTexImage2D in a file of the given - * file name. This function should only be used for textures sent to - * glTexImage2D with a compressed internal format as argument.
- * \note The following format is used to save the compressed texture:
- *
- * The first four elements are integers and the last one is stored - * on \c size bytes. - * \see loadCompressedTexture - */ -void saveCompressedTexture(const std::string& compressed_tex) -{ - int internal_format, width, height, size, compressionSuccessful; - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, (GLint *)&internal_format); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, (GLint *)&width); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, (GLint *)&height); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, (GLint *)&compressionSuccessful); - if (!compressionSuccessful) - return; - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, (GLint *)&size); - - char *data = new char[size]; - glGetCompressedTexImage(GL_TEXTURE_2D, 0, (GLvoid*)data); - std::ofstream ofs(compressed_tex.c_str(), std::ios::out | std::ios::binary); - if (ofs.is_open()) - { - ofs.write((char*)&internal_format, sizeof(int)); - ofs.write((char*)&width, sizeof(int)); - ofs.write((char*)&height, sizeof(int)); - ofs.write((char*)&size, sizeof(int)); - ofs.write(data, size); - ofs.close(); - } - delete[] data; -} - -void setTexture(unsigned TextureUnit, GLuint TextureId, GLenum MagFilter, GLenum MinFilter, bool allowAF) -{ - glActiveTexture(GL_TEXTURE0 + TextureUnit); - glBindTexture(GL_TEXTURE_2D, TextureId); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MagFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MinFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - - int aniso = UserConfigParams::m_anisotropic; - if (aniso == 0) aniso = 1; - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, allowAF ? (float)aniso : 1.0f); - - glGetError(); -} - -ScopedGPUTimer::ScopedGPUTimer(GPUTimer &timer) -{ - if (!UserConfigParams::m_profiler_enabled) return; - if (profiler.isFrozen()) return; - -#ifdef GL_TIME_ELAPSED - irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); - if (!timer.initialised) - { - gl_driver->extGlGenQueries(1, &timer.query); - timer.initialised = true; - } - gl_driver->extGlBeginQuery(GL_TIME_ELAPSED, timer.query); -#endif -} -ScopedGPUTimer::~ScopedGPUTimer() -{ - if (!UserConfigParams::m_profiler_enabled) return; - if (profiler.isFrozen()) return; - -#ifdef GL_TIME_ELAPSED - irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); - gl_driver->extGlEndQuery(GL_TIME_ELAPSED); -#endif -} - -GPUTimer::GPUTimer() : initialised(false) -{ -} - -unsigned GPUTimer::elapsedTimeus() -{ - if (!initialised) - return 0; - GLuint result; - irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); - gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT, &result); - return result / 1000; -} - -FrameBuffer::FrameBuffer() {} - -FrameBuffer::FrameBuffer(const std::vector &RTTs, size_t w, size_t h, bool layered) : - DepthTexture(0), RenderTargets(RTTs), width(w), height(h) -{ - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - if (layered) - { - for (unsigned i = 0; i < RTTs.size(); i++) - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, RTTs[i], 0); - } - else - { - for (unsigned i = 0; i < RTTs.size(); i++) - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, RTTs[i], 0); - } - GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); - assert(result == GL_FRAMEBUFFER_COMPLETE_EXT); -} - -FrameBuffer::FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, size_t h, bool layered) : - DepthTexture(DS), RenderTargets(RTTs), width(w), height(h) -{ - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - if (layered) - { - for (unsigned i = 0; i < RTTs.size(); i++) - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, RTTs[i], 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, DS, 0); - } - else - { - for (unsigned i = 0; i < RTTs.size(); i++) - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, RTTs[i], 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, DS, 0); - } - GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); - assert(result == GL_FRAMEBUFFER_COMPLETE_EXT); -} - -FrameBuffer::~FrameBuffer() -{ - glDeleteFramebuffers(1, &fbo); -} - -void FrameBuffer::Bind() -{ - glBindFramebuffer(GL_FRAMEBUFFER, fbo); - glViewport(0, 0, width, height); - irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver*)irr_driver->getDevice()->getVideoDriver(); - GLenum bufs[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 }; - gl_driver->extGlDrawBuffers(RenderTargets.size(), bufs); -} - -void FrameBuffer::Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask, GLenum filter) -{ - glBindFramebuffer(GL_READ_FRAMEBUFFER, Src.fbo); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, Dst.fbo); - glBlitFramebuffer(0, 0, Src.width, Src.height, 0, 0, Dst.width, Dst.height, mask, filter); - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); -} - -void FrameBuffer::BlitToDefault(size_t x0, size_t y0, size_t x1, size_t y1) -{ - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - glBlitFramebuffer(0, 0, width, height, x0, y0, x1, y1, GL_COLOR_BUFFER_BIT, GL_NEAREST); - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); -} - - -void draw3DLine(const core::vector3df& start, - const core::vector3df& end, irr::video::SColor color) -{ - if (!irr_driver->isGLSL()) { - irr_driver->getVideoDriver()->draw3DLine(start, end, color); - return; - } - - float vertex[6] = { - start.X, start.Y, start.Z, - end.X, end.Y, end.Z - }; - - glBindVertexArray(UtilShader::ColoredLine::vao); - glBindBuffer(GL_ARRAY_BUFFER, UtilShader::ColoredLine::vbo); - glBufferSubData(GL_ARRAY_BUFFER, 0, 6 * sizeof(float), vertex); - - glUseProgram(UtilShader::ColoredLine::Program); - UtilShader::ColoredLine::setUniforms(color); - glDrawArrays(GL_LINES, 0, 2); - - glGetError(); -} - -static void drawTexColoredQuad(const video::ITexture *texture, const video::SColor *col, float width, float height, - float center_pos_x, float center_pos_y, float tex_center_pos_x, float tex_center_pos_y, - float tex_width, float tex_height) -{ - unsigned colors[] = { - col[0].getRed(), col[0].getGreen(), col[0].getBlue(), col[0].getAlpha(), - col[1].getRed(), col[1].getGreen(), col[1].getBlue(), col[1].getAlpha(), - col[2].getRed(), col[2].getGreen(), col[2].getBlue(), col[2].getAlpha(), - col[3].getRed(), col[3].getGreen(), col[3].getBlue(), col[3].getAlpha(), - }; - - glBindBuffer(GL_ARRAY_BUFFER, UIShader::ColoredTextureRectShader::colorvbo); - glBufferSubData(GL_ARRAY_BUFFER, 0, 16 * sizeof(unsigned), colors); - - glUseProgram(UIShader::ColoredTextureRectShader::Program); - glBindVertexArray(UIShader::ColoredTextureRectShader::vao); - - setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); - UIShader::TextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height, 0); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - glBindVertexArray(0); - glBindBuffer(GL_ARRAY_BUFFER, 0); - - glGetError(); -} - -void drawTexQuad(const video::ITexture *texture, float width, float height, - float center_pos_x, float center_pos_y, float tex_center_pos_x, float tex_center_pos_y, - float tex_width, float tex_height) -{ - glUseProgram(UIShader::TextureRectShader::Program); - glBindVertexArray(UIShader::TextureRectShader::vao); - - setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); - UIShader::TextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height, 0); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - glBindVertexArray(0); - glBindBuffer(GL_ARRAY_BUFFER, 0); - - glGetError(); -} - -static void -getSize(const video::ITexture* texture, const core::rect& destRect, - const core::rect& sourceRect, - float &width, float &height, - float ¢er_pos_x, float ¢er_pos_y, - float &tex_width, float &tex_height, - float &tex_center_pos_x, float &tex_center_pos_y - ) -{ - core::dimension2d frame_size = - irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); - const int screen_w = frame_size.Width; - const int screen_h = frame_size.Height; - center_pos_x = float(destRect.UpperLeftCorner.X + destRect.LowerRightCorner.X); - center_pos_x /= screen_w; - center_pos_x -= 1.; - center_pos_y = float(destRect.UpperLeftCorner.Y + destRect.LowerRightCorner.Y); - center_pos_y /= screen_h; - center_pos_y = float(1.f - center_pos_y); - width = float(destRect.LowerRightCorner.X - destRect.UpperLeftCorner.X); - width /= screen_w; - height = float(destRect.LowerRightCorner.Y - destRect.UpperLeftCorner.Y); - height /= screen_h; - - const core::dimension2d& ss = texture->getOriginalSize(); - tex_center_pos_x = float(sourceRect.UpperLeftCorner.X + sourceRect.LowerRightCorner.X); - tex_center_pos_x /= ss.Width * 2.f; - tex_center_pos_y = float(sourceRect.UpperLeftCorner.Y + sourceRect.LowerRightCorner.Y); - tex_center_pos_y /= ss.Height * 2.f; - tex_width = float(sourceRect.LowerRightCorner.X - sourceRect.UpperLeftCorner.X); - tex_width /= ss.Width * 2.f; - tex_height = float(sourceRect.LowerRightCorner.Y - sourceRect.UpperLeftCorner.Y); - tex_height /= ss.Height * 2.f; - - if (texture->isRenderTarget()) - { - tex_height = -tex_height; - } - - const f32 invW = 1.f / static_cast(ss.Width); - const f32 invH = 1.f / static_cast(ss.Height); - const core::rect tcoords( - sourceRect.UpperLeftCorner.X * invW, - sourceRect.UpperLeftCorner.Y * invH, - sourceRect.LowerRightCorner.X * invW, - sourceRect.LowerRightCorner.Y *invH); -} - -void draw2DImage(const video::ITexture* texture, const core::rect& destRect, - const core::rect& sourceRect, const core::rect* clipRect, - const video::SColor &colors, bool useAlphaChannelOfTexture) -{ - if (!irr_driver->isGLSL()) { - video::SColor duplicatedArray[4] = { - colors, colors, colors, colors - }; - draw2DImage(texture, destRect, sourceRect, clipRect, duplicatedArray, useAlphaChannelOfTexture); - return; - } - - float width, height, - center_pos_x, center_pos_y, - tex_width, tex_height, - tex_center_pos_x, tex_center_pos_y; - - getSize(texture, destRect, sourceRect, width, height, center_pos_x, center_pos_y, - tex_width, tex_height, tex_center_pos_x, tex_center_pos_y); - - if (useAlphaChannelOfTexture) - { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - else - { - glDisable(GL_BLEND); - } - if (clipRect) - { - if (!clipRect->isValid()) - return; - - glEnable(GL_SCISSOR_TEST); - const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); - glScissor(clipRect->UpperLeftCorner.X, renderTargetSize.Height - clipRect->LowerRightCorner.Y, - clipRect->getWidth(), clipRect->getHeight()); - } - - glUseProgram(UIShader::UniformColoredTextureRectShader::Program); - glBindVertexArray(UIShader::UniformColoredTextureRectShader::vao); - - setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); - UIShader::UniformColoredTextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height,colors, 0); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - glBindVertexArray(0); - glBindBuffer(GL_ARRAY_BUFFER, 0); - if (clipRect) - glDisable(GL_SCISSOR_TEST); - glUseProgram(0); - - glGetError(); -} - -void draw2DImage(const video::ITexture* texture, const core::rect& destRect, - const core::rect& sourceRect, const core::rect* clipRect, - const video::SColor* const colors, bool useAlphaChannelOfTexture) -{ - if (!irr_driver->isGLSL()) - { - irr_driver->getVideoDriver()->draw2DImage(texture, destRect, sourceRect, clipRect, colors, useAlphaChannelOfTexture); - return; - } - - float width, height, - center_pos_x, center_pos_y, - tex_width, tex_height, - tex_center_pos_x, tex_center_pos_y; - - getSize(texture, destRect, sourceRect, width, height, center_pos_x, center_pos_y, - tex_width, tex_height, tex_center_pos_x, tex_center_pos_y); - - if (useAlphaChannelOfTexture) - { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - else - { - glDisable(GL_BLEND); - } - if (clipRect) - { - if (!clipRect->isValid()) - return; - - glEnable(GL_SCISSOR_TEST); - const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); - glScissor(clipRect->UpperLeftCorner.X, renderTargetSize.Height - clipRect->LowerRightCorner.Y, - clipRect->getWidth(), clipRect->getHeight()); - } - if (colors) - drawTexColoredQuad(texture, colors, width, height, center_pos_x, center_pos_y, - tex_center_pos_x, tex_center_pos_y, tex_width, tex_height); - else - drawTexQuad(texture, width, height, center_pos_x, center_pos_y, - tex_center_pos_x, tex_center_pos_y, tex_width, tex_height); - if (clipRect) - glDisable(GL_SCISSOR_TEST); - glUseProgram(0); - - glGetError(); -} - -void GL32_draw2DRectangle(video::SColor color, const core::rect& position, - const core::rect* clip) -{ - - if (!irr_driver->isGLSL()) - { - irr_driver->getVideoDriver()->draw2DRectangle(color, position, clip); - return; - } - - core::dimension2d frame_size = - irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); - const int screen_w = frame_size.Width; - const int screen_h = frame_size.Height; - float center_pos_x = float(position.UpperLeftCorner.X + position.LowerRightCorner.X); - center_pos_x /= screen_w; - center_pos_x -= 1; - float center_pos_y = float(position.UpperLeftCorner.Y + position.LowerRightCorner.Y); - center_pos_y /= screen_h; - center_pos_y = 1 - center_pos_y; - float width = float(position.LowerRightCorner.X - position.UpperLeftCorner.X); - width /= screen_w; - float height = float(position.LowerRightCorner.Y - position.UpperLeftCorner.Y); - height /= screen_h; - - if (color.getAlpha() < 255) - { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - else - { - glDisable(GL_BLEND); - } - - if (clip) - { - if (!clip->isValid()) - return; - - glEnable(GL_SCISSOR_TEST); - const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); - glScissor(clip->UpperLeftCorner.X, renderTargetSize.Height - clip->LowerRightCorner.Y, - clip->getWidth(), clip->getHeight()); - } - - glUseProgram(UIShader::ColoredRectShader::Program); - glBindVertexArray(UIShader::ColoredRectShader::vao); - UIShader::ColoredRectShader::setUniforms(center_pos_x, center_pos_y, width, height, color); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - if (clip) - glDisable(GL_SCISSOR_TEST); - glUseProgram(0); - - glGetError(); -} +#include "graphics/glwrap.hpp" +#include "irr_driver.hpp" +#include +#include +#include "config/user_config.hpp" +#include "utils/profiler.hpp" + +#ifdef _IRR_WINDOWS_API_ +#define IRR_OGL_LOAD_EXTENSION(X) wglGetProcAddress(reinterpret_cast(X)) +PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks; +PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback; +PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback; +PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback; +PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings; +PFNGLBINDBUFFERBASEPROC glBindBufferBase; +PFNGLGENBUFFERSPROC glGenBuffers; +PFNGLBINDBUFFERPROC glBindBuffer; +PFNGLBUFFERDATAPROC glBufferData; +PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; +PFNGLCREATESHADERPROC glCreateShader; +PFNGLCOMPILESHADERPROC glCompileShader; +PFNGLSHADERSOURCEPROC glShaderSource; +PFNGLCREATEPROGRAMPROC glCreateProgram; +PFNGLATTACHSHADERPROC glAttachShader; +PFNGLLINKPROGRAMPROC glLinkProgram; +PFNGLUSEPROGRAMPROC glUseProgram; +PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; +PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; +PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; +PFNGLUNIFORM1FPROC glUniform1f; +PFNGLUNIFORM3FPROC glUniform3f; +PFNGLDELETESHADERPROC glDeleteShader; +PFNGLGETSHADERIVPROC glGetShaderiv; +PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; +PFNGLACTIVETEXTUREPROC glActiveTexture; +PFNGLUNIFORM2FPROC glUniform2f; +PFNGLUNIFORM1IPROC glUniform1i; +PFNGLUNIFORM3IPROC glUniform3i; +PFNGLUNIFORM4IPROC glUniform4i; +PFNGLUNIFORM1FVPROC glUniform1fv; +PFNGLUNIFORM4FVPROC glUniform4fv; +PFNGLGETPROGRAMIVPROC glGetProgramiv; +PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; +PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; +PFNGLBLENDEQUATIONPROC glBlendEquation; +PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; +PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; +PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; +PFNGLDELETEBUFFERSPROC glDeleteBuffers; +PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; +PFNGLBINDVERTEXARRAYPROC glBindVertexArray; +PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; +PFNGLTEXBUFFERPROC glTexBuffer; +PFNGLBUFFERSUBDATAPROC glBufferSubData; +PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; +PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB; +PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; +PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; +PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; +PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; +PFNGLTEXIMAGE3DPROC glTexImage3D; +PFNGLGENERATEMIPMAPPROC glGenerateMipmap; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; +PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; +PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; +PFNGLBLENDCOLORPROC glBlendColor; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; +PFNGLTEXSTORAGE1DPROC glTexStorage1D; +PFNGLTEXSTORAGE2DPROC glTexStorage2D; +PFNGLTEXSTORAGE3DPROC glTexStorage3D; +#endif + +static bool is_gl_init = false; + +#ifdef DEBUG +#ifdef WIN32 +#define ARB_DEBUG_OUTPUT +#endif +#endif + +#ifdef ARB_DEBUG_OUTPUT +static void +#ifdef WIN32 +CALLBACK +#endif +debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, + const GLchar* msg, const void *userparam) +{ + switch(source) + { + case GL_DEBUG_SOURCE_API_ARB: + Log::warn("GLWrap", "OpenGL debug callback - API"); + break; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: + Log::warn("GLWrap", "OpenGL debug callback - WINDOW_SYSTEM"); + break; + case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: + Log::warn("GLWrap", "OpenGL debug callback - SHADER_COMPILER"); + break; + case GL_DEBUG_SOURCE_THIRD_PARTY_ARB: + Log::warn("GLWrap", "OpenGL debug callback - THIRD_PARTY"); + break; + case GL_DEBUG_SOURCE_APPLICATION_ARB: + Log::warn("GLWrap", "OpenGL debug callback - APPLICATION"); + break; + case GL_DEBUG_SOURCE_OTHER_ARB: + Log::warn("GLWrap", "OpenGL debug callback - OTHER"); + break; + } + + switch(type) + { + case GL_DEBUG_TYPE_ERROR_ARB: + Log::warn("GLWrap", " Error type : ERROR"); + break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: + Log::warn("GLWrap", " Error type : DEPRECATED_BEHAVIOR"); + break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: + Log::warn("GLWrap", " Error type : UNDEFINED_BEHAVIOR"); + break; + case GL_DEBUG_TYPE_PORTABILITY_ARB: + Log::warn("GLWrap", " Error type : PORTABILITY"); + break; + case GL_DEBUG_TYPE_PERFORMANCE_ARB: + Log::warn("GLWrap", " Error type : PERFORMANCE"); + break; + case GL_DEBUG_TYPE_OTHER_ARB: + Log::warn("GLWrap", " Error type : OTHER"); + break; + } + + switch(severity) + { + case GL_DEBUG_SEVERITY_HIGH_ARB: + Log::warn("GLWrap", " Severity : HIGH"); + break; + case GL_DEBUG_SEVERITY_MEDIUM_ARB: + Log::warn("GLWrap", " Severity : MEDIUM"); + break; + case GL_DEBUG_SEVERITY_LOW_ARB: + Log::warn("GLWrap", " Severity : LOW"); + break; + } + + if (msg) + Log::warn("GLWrap", " Message : %s", msg); +} +#endif + +void initGL() +{ + if (is_gl_init) + return; + is_gl_init = true; +#ifdef _IRR_WINDOWS_API_ + glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)IRR_OGL_LOAD_EXTENSION("glGenTransformFeedbacks"); + glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBindTransformFeedback"); + glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glDrawTransformFeedback"); + glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glBeginTransformFeedback"); + glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)IRR_OGL_LOAD_EXTENSION("glEndTransformFeedback"); + glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)IRR_OGL_LOAD_EXTENSION("glBindBufferBase"); + glGenBuffers = (PFNGLGENBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenBuffers"); + glBindBuffer = (PFNGLBINDBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindBuffer"); + glBufferData = (PFNGLBUFFERDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferData"); + glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribPointer"); + glCreateShader = (PFNGLCREATESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCreateShader"); + glCompileShader = (PFNGLCOMPILESHADERPROC)IRR_OGL_LOAD_EXTENSION("glCompileShader"); + glShaderSource = (PFNGLSHADERSOURCEPROC)IRR_OGL_LOAD_EXTENSION("glShaderSource"); + glCreateProgram = (PFNGLCREATEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glCreateProgram"); + glAttachShader = (PFNGLATTACHSHADERPROC)IRR_OGL_LOAD_EXTENSION("glAttachShader"); + glLinkProgram = (PFNGLLINKPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glLinkProgram"); + glUseProgram = (PFNGLUSEPROGRAMPROC)IRR_OGL_LOAD_EXTENSION("glUseProgram"); + glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glEnableVertexAttribArray"); + glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformLocation"); + glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniformMatrix4fv"); + glUniform1f = (PFNGLUNIFORM1FPROC)IRR_OGL_LOAD_EXTENSION("glUniform1f"); + glUniform3f = (PFNGLUNIFORM3FPROC)IRR_OGL_LOAD_EXTENSION("glUniform3f"); + glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)IRR_OGL_LOAD_EXTENSION("glDisableVertexAttribArray"); + glDeleteShader = (PFNGLDELETESHADERPROC)IRR_OGL_LOAD_EXTENSION("glDeleteShader"); + glGetShaderiv = (PFNGLGETSHADERIVPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderiv"); + glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetShaderInfoLog"); + glActiveTexture = (PFNGLACTIVETEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glActiveTexture"); + glUniform2f = (PFNGLUNIFORM2FPROC)IRR_OGL_LOAD_EXTENSION("glUniform2f"); + glUniform4i = (PFNGLUNIFORM4IPROC)IRR_OGL_LOAD_EXTENSION("glUniform4i"); + glUniform3i = (PFNGLUNIFORM3IPROC)IRR_OGL_LOAD_EXTENSION("glUniform3i"); + glUniform1i = (PFNGLUNIFORM1IPROC)IRR_OGL_LOAD_EXTENSION("glUniform1i"); + glGetProgramiv = (PFNGLGETPROGRAMIVPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramiv"); + glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)IRR_OGL_LOAD_EXTENSION("glGetProgramInfoLog"); + glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)IRR_OGL_LOAD_EXTENSION("glTransformFeedbackVaryings"); + glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)IRR_OGL_LOAD_EXTENSION("glGetAttribLocation"); + glBlendEquation = (PFNGLBLENDEQUATIONPROC)IRR_OGL_LOAD_EXTENSION("glBlendEquation"); + glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribDivisor"); + glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawArraysInstanced"); + glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawElementsInstanced"); + glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteBuffers"); + glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glGenVertexArrays"); + glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)IRR_OGL_LOAD_EXTENSION("glBindVertexArray"); + glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteVertexArrays"); + glTexBuffer = (PFNGLTEXBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glTexBuffer"); + glUniform1fv = (PFNGLUNIFORM1FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform1fv"); + glUniform4fv = (PFNGLUNIFORM4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniform4fv"); + glBufferSubData = (PFNGLBUFFERSUBDATAPROC)IRR_OGL_LOAD_EXTENSION("glBufferSubData"); + glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribIPointer"); + glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glGenFramebuffers"); + glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers"); + glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBindFramebuffer"); + glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D"); + glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)IRR_OGL_LOAD_EXTENSION("glFramebufferTexture"); + glTexImage3D = (PFNGLTEXIMAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexImage3D"); + glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)IRR_OGL_LOAD_EXTENSION("glGenerateMipmap"); + glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus"); + glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)IRR_OGL_LOAD_EXTENSION("glTexImage2DMultisample"); + glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)IRR_OGL_LOAD_EXTENSION("glBlitFramebuffer"); + glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)IRR_OGL_LOAD_EXTENSION("glGetUniformBlockIndex"); + glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)IRR_OGL_LOAD_EXTENSION("glUniformBlockBinding"); + glBlendColor = (PFNGLBLENDCOLORPROC)IRR_OGL_LOAD_EXTENSION("glBlendColor"); + glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D"); + glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)IRR_OGL_LOAD_EXTENSION("glGetCompressedTexImage"); + glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage1D"); + glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage2D"); + glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)IRR_OGL_LOAD_EXTENSION("glTexStorage3D"); +#ifdef DEBUG + glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)IRR_OGL_LOAD_EXTENSION("glDebugMessageCallbackARB"); +#endif +#endif +#ifdef ARB_DEBUG_OUTPUT + if (glDebugMessageCallbackARB) + glDebugMessageCallbackARB((GLDEBUGPROCARB)debugCallback, NULL); +#endif +} + +// Mostly from shader tutorial +GLuint LoadShader(const char * file, unsigned type) +{ + GLuint Id = glCreateShader(type); + char versionString[20]; + sprintf(versionString, "#version %d\n", irr_driver->getGLSLVersion()); + std::string Code = versionString; + std::ifstream Stream(file, std::ios::in); + Code += "//" + std::string(file) + "\n"; + if (UserConfigParams::m_ubo_disabled) + Code += "#define UBO_DISABLED\n"; + if (irr_driver->hasVSLayerExtension()) + Code += "#define VSLayer\n"; + if (Stream.is_open()) + { + std::string Line = ""; + while (getline(Stream, Line)) + Code += "\n" + Line; + Stream.close(); + } + GLint Result = GL_FALSE; + int InfoLogLength; + Log::info("GLWrap", "Compiling shader : %s", file); + char const * SourcePointer = Code.c_str(); + int length = strlen(SourcePointer); + glShaderSource(Id, 1, &SourcePointer, &length); + glCompileShader(Id); + + glGetShaderiv(Id, GL_COMPILE_STATUS, &Result); + if (Result == GL_FALSE) + { + Log::error("GLWrap", "Error in shader %s", file); + glGetShaderiv(Id, GL_INFO_LOG_LENGTH, &InfoLogLength); + char *ErrorMessage = new char[InfoLogLength]; + glGetShaderInfoLog(Id, InfoLogLength, NULL, ErrorMessage); + Log::error("GLWrap", ErrorMessage); + delete[] ErrorMessage; + } + + glGetError(); + + return Id; +} + +GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount) +{ + GLuint Program = glCreateProgram(); + loadAndAttach(Program, GL_VERTEX_SHADER, vertex_file_path); + glTransformFeedbackVaryings(Program, varyingscount, varyings, GL_INTERLEAVED_ATTRIBS); + glLinkProgram(Program); + + GLint Result = GL_FALSE; + int InfoLogLength; + glGetProgramiv(Program, GL_LINK_STATUS, &Result); + if (Result == GL_FALSE) + { + glGetProgramiv(Program, GL_INFO_LOG_LENGTH, &InfoLogLength); + char *ErrorMessage = new char[InfoLogLength]; + glGetProgramInfoLog(Program, InfoLogLength, NULL, ErrorMessage); + printf(ErrorMessage); + delete[] ErrorMessage; + } + + glGetError(); + + return Program; +} + +GLuint getTextureGLuint(irr::video::ITexture *tex) +{ + return static_cast(tex)->getOpenGLTextureName(); +} + +GLuint getDepthTexture(irr::video::ITexture *tex) +{ + assert(tex->isRenderTarget()); + return static_cast(tex)->DepthBufferTexture; +} + +std::set AlreadyTransformedTexture; +void resetTextureTable() +{ + AlreadyTransformedTexture.clear(); +} + +void compressTexture(irr::video::ITexture *tex, bool srgb, bool premul_alpha) +{ + if (AlreadyTransformedTexture.find(tex) != AlreadyTransformedTexture.end()) + return; + AlreadyTransformedTexture.insert(tex); + + glBindTexture(GL_TEXTURE_2D, getTextureGLuint(tex)); + + std::string cached_file; + if (UserConfigParams::m_texture_compression) + { + // Try to retrieve the compressed texture in cache + std::string tex_name = irr_driver->getTextureName(tex); + if (!tex_name.empty()) { + cached_file = file_manager->getTextureCacheLocation(tex_name) + ".gltz"; + if (!file_manager->fileIsNewer(tex_name, cached_file)) { + if (loadCompressedTexture(cached_file)) + return; + } + } + } + + size_t w = tex->getSize().Width, h = tex->getSize().Height; + unsigned char *data = new unsigned char[w * h * 4]; + memcpy(data, tex->lock(), w * h * 4); + tex->unlock(); + unsigned internalFormat, Format; + if (tex->hasAlpha()) + Format = GL_BGRA; + else + Format = GL_BGR; + + if (premul_alpha) + { + for (unsigned i = 0; i < w * h; i++) + { + float alpha = data[4 * i + 3]; + if (alpha > 0.) + alpha = pow(alpha / 255.f, 1.f / 2.2f); + data[4 * i ] = (unsigned char)(data[4 * i ] * alpha); + data[4 * i + 1] = (unsigned char)(data[4 * i + 1] * alpha); + data[4 * i + 2] = (unsigned char)(data[4 * i + 2] * alpha); + } + } + + if (!UserConfigParams::m_texture_compression) + { + if (srgb) + internalFormat = (tex->hasAlpha()) ? GL_SRGB_ALPHA : GL_SRGB; + else + internalFormat = (tex->hasAlpha()) ? GL_RGBA : GL_RGB; + } + else + { + if (srgb) + internalFormat = (tex->hasAlpha()) ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT : GL_COMPRESSED_SRGB_S3TC_DXT1_EXT; + else + internalFormat = (tex->hasAlpha()) ? GL_COMPRESSED_RGBA_S3TC_DXT5_EXT : GL_COMPRESSED_RGB_S3TC_DXT1_EXT; + } + glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, w, h, 0, Format, GL_UNSIGNED_BYTE, (GLvoid *)data); + glGenerateMipmap(GL_TEXTURE_2D); + delete[] data; + + if (UserConfigParams::m_texture_compression && !cached_file.empty()) + { + // Save the compressed texture in the cache for later use. + saveCompressedTexture(cached_file); + } +} + +//----------------------------------------------------------------------------- +/** Try to load a compressed texture from the given file name. + * Data in the specified file need to have a specific format. See the + * saveCompressedTexture() function for a description of the format. + * \return true if the loading succeeded, false otherwise. + * \see saveCompressedTexture + */ +bool loadCompressedTexture(const std::string& compressed_tex) +{ + std::ifstream ifs(compressed_tex.c_str(), std::ios::in | std::ios::binary); + if (!ifs.is_open()) + return false; + + int internal_format; + int w, h; + int size = -1; + ifs.read((char*)&internal_format, sizeof(int)); + ifs.read((char*)&w, sizeof(int)); + ifs.read((char*)&h, sizeof(int)); + ifs.read((char*)&size, sizeof(int)); + + if (ifs.fail() || size == -1) + return false; + + char *data = new char[size]; + ifs.read(data, size); + if (!ifs.fail()) + { + glCompressedTexImage2D(GL_TEXTURE_2D, 0, internal_format, + w, h, 0, size, (GLvoid*)data); + glGenerateMipmap(GL_TEXTURE_2D); + delete[] data; + ifs.close(); + return true; + } + delete[] data; + return false; +} + +//----------------------------------------------------------------------------- +/** Try to save the last texture sent to glTexImage2D in a file of the given + * file name. This function should only be used for textures sent to + * glTexImage2D with a compressed internal format as argument.
+ * \note The following format is used to save the compressed texture:
+ *
+ * The first four elements are integers and the last one is stored + * on \c size bytes. + * \see loadCompressedTexture + */ +void saveCompressedTexture(const std::string& compressed_tex) +{ + int internal_format, width, height, size, compressionSuccessful; + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, (GLint *)&internal_format); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, (GLint *)&width); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, (GLint *)&height); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, (GLint *)&compressionSuccessful); + if (!compressionSuccessful) + return; + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, (GLint *)&size); + + char *data = new char[size]; + glGetCompressedTexImage(GL_TEXTURE_2D, 0, (GLvoid*)data); + std::ofstream ofs(compressed_tex.c_str(), std::ios::out | std::ios::binary); + if (ofs.is_open()) + { + ofs.write((char*)&internal_format, sizeof(int)); + ofs.write((char*)&width, sizeof(int)); + ofs.write((char*)&height, sizeof(int)); + ofs.write((char*)&size, sizeof(int)); + ofs.write(data, size); + ofs.close(); + } + delete[] data; +} + +void setTexture(unsigned TextureUnit, GLuint TextureId, GLenum MagFilter, GLenum MinFilter, bool allowAF) +{ + glActiveTexture(GL_TEXTURE0 + TextureUnit); + glBindTexture(GL_TEXTURE_2D, TextureId); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MagFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MinFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + int aniso = UserConfigParams::m_anisotropic; + if (aniso == 0) aniso = 1; + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, allowAF ? (float)aniso : 1.0f); + + glGetError(); +} + +ScopedGPUTimer::ScopedGPUTimer(GPUTimer &timer) +{ + if (!UserConfigParams::m_profiler_enabled) return; + if (profiler.isFrozen()) return; + +#ifdef GL_TIME_ELAPSED + irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); + if (!timer.initialised) + { + gl_driver->extGlGenQueries(1, &timer.query); + timer.initialised = true; + } + gl_driver->extGlBeginQuery(GL_TIME_ELAPSED, timer.query); +#endif +} +ScopedGPUTimer::~ScopedGPUTimer() +{ + if (!UserConfigParams::m_profiler_enabled) return; + if (profiler.isFrozen()) return; + +#ifdef GL_TIME_ELAPSED + irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); + gl_driver->extGlEndQuery(GL_TIME_ELAPSED); +#endif +} + +GPUTimer::GPUTimer() : initialised(false) +{ +} + +unsigned GPUTimer::elapsedTimeus() +{ + if (!initialised) + return 0; + GLuint result; + irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver *)irr_driver->getDevice()->getVideoDriver(); + gl_driver->extGlGetQueryObjectuiv(query, GL_QUERY_RESULT, &result); + return result / 1000; +} + +FrameBuffer::FrameBuffer() {} + +FrameBuffer::FrameBuffer(const std::vector &RTTs, size_t w, size_t h, bool layered) : + DepthTexture(0), RenderTargets(RTTs), width(w), height(h) +{ + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + if (layered) + { + for (unsigned i = 0; i < RTTs.size(); i++) + glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, RTTs[i], 0); + } + else + { + for (unsigned i = 0; i < RTTs.size(); i++) + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, RTTs[i], 0); + } + GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); + assert(result == GL_FRAMEBUFFER_COMPLETE_EXT); +} + +FrameBuffer::FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, size_t h, bool layered) : + DepthTexture(DS), RenderTargets(RTTs), width(w), height(h) +{ + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + if (layered) + { + for (unsigned i = 0; i < RTTs.size(); i++) + glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, RTTs[i], 0); + glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, DS, 0); + } + else + { + for (unsigned i = 0; i < RTTs.size(); i++) + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, RTTs[i], 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, DS, 0); + } + GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); + assert(result == GL_FRAMEBUFFER_COMPLETE_EXT); +} + +FrameBuffer::~FrameBuffer() +{ + glDeleteFramebuffers(1, &fbo); +} + +void FrameBuffer::Bind() +{ + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + glViewport(0, 0, width, height); + irr::video::COpenGLDriver *gl_driver = (irr::video::COpenGLDriver*)irr_driver->getDevice()->getVideoDriver(); + GLenum bufs[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 }; + gl_driver->extGlDrawBuffers(RenderTargets.size(), bufs); +} + +void FrameBuffer::Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask, GLenum filter) +{ + glBindFramebuffer(GL_READ_FRAMEBUFFER, Src.fbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, Dst.fbo); + glBlitFramebuffer(0, 0, Src.width, Src.height, 0, 0, Dst.width, Dst.height, mask, filter); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); +} + +void FrameBuffer::BlitToDefault(size_t x0, size_t y0, size_t x1, size_t y1) +{ + glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBlitFramebuffer(0, 0, width, height, x0, y0, x1, y1, GL_COLOR_BUFFER_BIT, GL_NEAREST); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); +} + + +void draw3DLine(const core::vector3df& start, + const core::vector3df& end, irr::video::SColor color) +{ + if (!irr_driver->isGLSL()) { + irr_driver->getVideoDriver()->draw3DLine(start, end, color); + return; + } + + float vertex[6] = { + start.X, start.Y, start.Z, + end.X, end.Y, end.Z + }; + + glBindVertexArray(UtilShader::ColoredLine::vao); + glBindBuffer(GL_ARRAY_BUFFER, UtilShader::ColoredLine::vbo); + glBufferSubData(GL_ARRAY_BUFFER, 0, 6 * sizeof(float), vertex); + + glUseProgram(UtilShader::ColoredLine::Program); + UtilShader::ColoredLine::setUniforms(color); + glDrawArrays(GL_LINES, 0, 2); + + glGetError(); +} + +static void drawTexColoredQuad(const video::ITexture *texture, const video::SColor *col, float width, float height, + float center_pos_x, float center_pos_y, float tex_center_pos_x, float tex_center_pos_y, + float tex_width, float tex_height) +{ + unsigned colors[] = { + col[0].getRed(), col[0].getGreen(), col[0].getBlue(), col[0].getAlpha(), + col[1].getRed(), col[1].getGreen(), col[1].getBlue(), col[1].getAlpha(), + col[2].getRed(), col[2].getGreen(), col[2].getBlue(), col[2].getAlpha(), + col[3].getRed(), col[3].getGreen(), col[3].getBlue(), col[3].getAlpha(), + }; + + glBindBuffer(GL_ARRAY_BUFFER, UIShader::ColoredTextureRectShader::colorvbo); + glBufferSubData(GL_ARRAY_BUFFER, 0, 16 * sizeof(unsigned), colors); + + glUseProgram(UIShader::ColoredTextureRectShader::Program); + glBindVertexArray(UIShader::ColoredTextureRectShader::vao); + + setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); + UIShader::TextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height, 0); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glGetError(); +} + +void drawTexQuad(const video::ITexture *texture, float width, float height, + float center_pos_x, float center_pos_y, float tex_center_pos_x, float tex_center_pos_y, + float tex_width, float tex_height) +{ + glUseProgram(UIShader::TextureRectShader::Program); + glBindVertexArray(UIShader::TextureRectShader::vao); + + setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); + UIShader::TextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height, 0); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glGetError(); +} + +static void +getSize(const video::ITexture* texture, const core::rect& destRect, + const core::rect& sourceRect, + float &width, float &height, + float ¢er_pos_x, float ¢er_pos_y, + float &tex_width, float &tex_height, + float &tex_center_pos_x, float &tex_center_pos_y + ) +{ + core::dimension2d frame_size = + irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); + const int screen_w = frame_size.Width; + const int screen_h = frame_size.Height; + center_pos_x = float(destRect.UpperLeftCorner.X + destRect.LowerRightCorner.X); + center_pos_x /= screen_w; + center_pos_x -= 1.; + center_pos_y = float(destRect.UpperLeftCorner.Y + destRect.LowerRightCorner.Y); + center_pos_y /= screen_h; + center_pos_y = float(1.f - center_pos_y); + width = float(destRect.LowerRightCorner.X - destRect.UpperLeftCorner.X); + width /= screen_w; + height = float(destRect.LowerRightCorner.Y - destRect.UpperLeftCorner.Y); + height /= screen_h; + + const core::dimension2d& ss = texture->getOriginalSize(); + tex_center_pos_x = float(sourceRect.UpperLeftCorner.X + sourceRect.LowerRightCorner.X); + tex_center_pos_x /= ss.Width * 2.f; + tex_center_pos_y = float(sourceRect.UpperLeftCorner.Y + sourceRect.LowerRightCorner.Y); + tex_center_pos_y /= ss.Height * 2.f; + tex_width = float(sourceRect.LowerRightCorner.X - sourceRect.UpperLeftCorner.X); + tex_width /= ss.Width * 2.f; + tex_height = float(sourceRect.LowerRightCorner.Y - sourceRect.UpperLeftCorner.Y); + tex_height /= ss.Height * 2.f; + + if (texture->isRenderTarget()) + { + tex_height = -tex_height; + } + + const f32 invW = 1.f / static_cast(ss.Width); + const f32 invH = 1.f / static_cast(ss.Height); + const core::rect tcoords( + sourceRect.UpperLeftCorner.X * invW, + sourceRect.UpperLeftCorner.Y * invH, + sourceRect.LowerRightCorner.X * invW, + sourceRect.LowerRightCorner.Y *invH); +} + +void draw2DImage(const video::ITexture* texture, const core::rect& destRect, + const core::rect& sourceRect, const core::rect* clipRect, + const video::SColor &colors, bool useAlphaChannelOfTexture) +{ + if (!irr_driver->isGLSL()) { + video::SColor duplicatedArray[4] = { + colors, colors, colors, colors + }; + draw2DImage(texture, destRect, sourceRect, clipRect, duplicatedArray, useAlphaChannelOfTexture); + return; + } + + float width, height, + center_pos_x, center_pos_y, + tex_width, tex_height, + tex_center_pos_x, tex_center_pos_y; + + getSize(texture, destRect, sourceRect, width, height, center_pos_x, center_pos_y, + tex_width, tex_height, tex_center_pos_x, tex_center_pos_y); + + if (useAlphaChannelOfTexture) + { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + else + { + glDisable(GL_BLEND); + } + if (clipRect) + { + if (!clipRect->isValid()) + return; + + glEnable(GL_SCISSOR_TEST); + const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); + glScissor(clipRect->UpperLeftCorner.X, renderTargetSize.Height - clipRect->LowerRightCorner.Y, + clipRect->getWidth(), clipRect->getHeight()); + } + + glUseProgram(UIShader::UniformColoredTextureRectShader::Program); + glBindVertexArray(UIShader::UniformColoredTextureRectShader::vao); + + setTexture(0, static_cast(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); + UIShader::UniformColoredTextureRectShader::setUniforms(center_pos_x, center_pos_y, width, height, tex_center_pos_x, tex_center_pos_y, tex_width, tex_height,colors, 0); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + if (clipRect) + glDisable(GL_SCISSOR_TEST); + glUseProgram(0); + + glGetError(); +} + +void draw2DImage(const video::ITexture* texture, const core::rect& destRect, + const core::rect& sourceRect, const core::rect* clipRect, + const video::SColor* const colors, bool useAlphaChannelOfTexture) +{ + if (!irr_driver->isGLSL()) + { + irr_driver->getVideoDriver()->draw2DImage(texture, destRect, sourceRect, clipRect, colors, useAlphaChannelOfTexture); + return; + } + + float width, height, + center_pos_x, center_pos_y, + tex_width, tex_height, + tex_center_pos_x, tex_center_pos_y; + + getSize(texture, destRect, sourceRect, width, height, center_pos_x, center_pos_y, + tex_width, tex_height, tex_center_pos_x, tex_center_pos_y); + + if (useAlphaChannelOfTexture) + { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + else + { + glDisable(GL_BLEND); + } + if (clipRect) + { + if (!clipRect->isValid()) + return; + + glEnable(GL_SCISSOR_TEST); + const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); + glScissor(clipRect->UpperLeftCorner.X, renderTargetSize.Height - clipRect->LowerRightCorner.Y, + clipRect->getWidth(), clipRect->getHeight()); + } + if (colors) + drawTexColoredQuad(texture, colors, width, height, center_pos_x, center_pos_y, + tex_center_pos_x, tex_center_pos_y, tex_width, tex_height); + else + drawTexQuad(texture, width, height, center_pos_x, center_pos_y, + tex_center_pos_x, tex_center_pos_y, tex_width, tex_height); + if (clipRect) + glDisable(GL_SCISSOR_TEST); + glUseProgram(0); + + glGetError(); +} + +void GL32_draw2DRectangle(video::SColor color, const core::rect& position, + const core::rect* clip) +{ + + if (!irr_driver->isGLSL()) + { + irr_driver->getVideoDriver()->draw2DRectangle(color, position, clip); + return; + } + + core::dimension2d frame_size = + irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); + const int screen_w = frame_size.Width; + const int screen_h = frame_size.Height; + float center_pos_x = float(position.UpperLeftCorner.X + position.LowerRightCorner.X); + center_pos_x /= screen_w; + center_pos_x -= 1; + float center_pos_y = float(position.UpperLeftCorner.Y + position.LowerRightCorner.Y); + center_pos_y /= screen_h; + center_pos_y = 1 - center_pos_y; + float width = float(position.LowerRightCorner.X - position.UpperLeftCorner.X); + width /= screen_w; + float height = float(position.LowerRightCorner.Y - position.UpperLeftCorner.Y); + height /= screen_h; + + if (color.getAlpha() < 255) + { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + else + { + glDisable(GL_BLEND); + } + + if (clip) + { + if (!clip->isValid()) + return; + + glEnable(GL_SCISSOR_TEST); + const core::dimension2d& renderTargetSize = irr_driver->getVideoDriver()->getCurrentRenderTargetSize(); + glScissor(clip->UpperLeftCorner.X, renderTargetSize.Height - clip->LowerRightCorner.Y, + clip->getWidth(), clip->getHeight()); + } + + glUseProgram(UIShader::ColoredRectShader::Program); + glBindVertexArray(UIShader::ColoredRectShader::vao); + UIShader::ColoredRectShader::setUniforms(center_pos_x, center_pos_y, width, height, color); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + if (clip) + glDisable(GL_SCISSOR_TEST); + glUseProgram(0); + + glGetError(); +} diff --git a/src/graphics/glwrap.hpp b/src/graphics/glwrap.hpp index bc9a94b6e..15fab9191 100644 --- a/src/graphics/glwrap.hpp +++ b/src/graphics/glwrap.hpp @@ -1,232 +1,232 @@ -#ifndef GLWRAP_HEADER_H -#define GLWRAP_HEADER_H - -#if defined(__APPLE__) -# include -# include -# define OGL32CTX -# ifdef GL_ARB_instanced_arrays -# define glVertexAttribDivisor glVertexAttribDivisorARB -# endif -# ifndef GL_TEXTURE_SWIZZLE_RGBA -# define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -# endif -#elif defined(ANDROID) -# include -#elif defined(WIN32) -# define _WINSOCKAPI_ -// has to be included before gl.h because of WINGDIAPI and APIENTRY definitions -# include -# include -#else -#define GL_GLEXT_PROTOTYPES -#define DEBUG_OUTPUT_DECLARED -# include -#endif - -#include -#include "utils/log.hpp" - -// already includes glext.h, which defines useful GL constants. -// COpenGLDriver has already loaded the extension GL functions we use (e.g glBeginQuery) -#include "../../lib/irrlicht/source/Irrlicht/COpenGLDriver.h" -#ifdef WIN32 -extern PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks; -extern PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback; -extern PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback; -extern PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback; -extern PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback; -extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings; -extern PFNGLBINDBUFFERBASEPROC glBindBufferBase; -extern PFNGLGENBUFFERSPROC glGenBuffers; -extern PFNGLBINDBUFFERPROC glBindBuffer; -extern PFNGLBUFFERDATAPROC glBufferData; -extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; -extern PFNGLCREATESHADERPROC glCreateShader; -extern PFNGLCOMPILESHADERPROC glCompileShader; -extern PFNGLSHADERSOURCEPROC glShaderSource; -extern PFNGLCREATEPROGRAMPROC glCreateProgram; -extern PFNGLATTACHSHADERPROC glAttachShader; -extern PFNGLLINKPROGRAMPROC glLinkProgram; -extern PFNGLUSEPROGRAMPROC glUseProgram; -extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; -extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; -extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; -extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; -extern PFNGLUNIFORM1FPROC glUniform1f; -extern PFNGLUNIFORM3FPROC glUniform3f; -extern PFNGLUNIFORM1FVPROC glUniform1fv; -extern PFNGLUNIFORM4FVPROC glUniform4fv; -extern PFNGLDELETESHADERPROC glDeleteShader; -extern PFNGLGETSHADERIVPROC glGetShaderiv; -extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; -extern PFNGLACTIVETEXTUREPROC glActiveTexture; -extern PFNGLUNIFORM2FPROC glUniform2f; -extern PFNGLUNIFORM1IPROC glUniform1i; -extern PFNGLUNIFORM3IPROC glUniform3i; -extern PFNGLUNIFORM4IPROC glUniform4i; -extern PFNGLGETPROGRAMIVPROC glGetProgramiv; -extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; -extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; -extern PFNGLBLENDEQUATIONPROC glBlendEquation; -extern PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; -extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; -extern PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; -extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; -extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; -extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; -extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; -extern PFNGLTEXBUFFERPROC glTexBuffer; -extern PFNGLBUFFERSUBDATAPROC glBufferSubData; -extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; -extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; -extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; -extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; -extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; -extern PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; -extern PFNGLTEXIMAGE3DPROC glTexImage3D; -extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap; -extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; -extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; -extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; -extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; -extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; -extern PFNGLBLENDCOLORPROC glBlendColor; -extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D; -extern PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; -extern PFNGLTEXSTORAGE1DPROC glTexStorage1D; -extern PFNGLTEXSTORAGE2DPROC glTexStorage2D; -extern PFNGLTEXSTORAGE3DPROC glTexStorage3D; -#ifdef DEBUG -extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB; -#endif -#endif - - -void initGL(); -GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount); -void setTexture(unsigned TextureUnit, GLuint TextureId, GLenum MagFilter, GLenum MinFilter, bool allowAF = false); -GLuint LoadShader(const char * file, unsigned type); - -template -void loadAndAttach(GLint ProgramID) -{ - return; -} - -template -void loadAndAttach(GLint ProgramID, GLint ShaderType, const char *filepath, Types ... args) -{ - GLint ShaderID = LoadShader(filepath, ShaderType); - glAttachShader(ProgramID, ShaderID); - glDeleteShader(ShaderID); - loadAndAttach(ProgramID, args...); -} - -template -void printFileList() -{ - return; -} - -template -void printFileList(GLint ShaderType, const char *filepath, Types ... args) -{ - Log::error("GLWrapp", filepath); - printFileList(args...); -} - -template -GLint LoadProgram(Types ... args) -{ - GLint ProgramID = glCreateProgram(); - loadAndAttach(ProgramID, args...); - glLinkProgram(ProgramID); - - GLint Result = GL_FALSE; - int InfoLogLength; - glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); - if (Result == GL_FALSE) { - Log::error("GLWrapp", "Error when linking these shaders :"); - printFileList(args...); - glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); - char *ErrorMessage = new char[InfoLogLength]; - glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ErrorMessage); - Log::error("GLWrapp", ErrorMessage); - delete[] ErrorMessage; - } - - GLenum glErr = glGetError(); - if (glErr != GL_NO_ERROR) - { - Log::warn("IrrDriver", "GLWrap : OpenGL error %i\n", glErr); - } - - return ProgramID; -} - -class GPUTimer; - -class ScopedGPUTimer -{ -public: - ScopedGPUTimer(GPUTimer &); - ~ScopedGPUTimer(); -}; - -class GPUTimer -{ - friend class ScopedGPUTimer; - GLuint query; - bool initialised; -public: - GPUTimer(); - unsigned elapsedTimeus(); -}; - -class FrameBuffer -{ -private: - GLuint fbo; - std::vector RenderTargets; - GLuint DepthTexture; - size_t width, height; -public: - FrameBuffer(); - FrameBuffer(const std::vector &RTTs, size_t w, size_t h, bool layered = false); - FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, size_t h, bool layered = false); - ~FrameBuffer(); - void Bind(); - std::vector &getRTT() { return RenderTargets; } - GLuint &getDepthTexture() { assert(DepthTexture); return DepthTexture; } - size_t getWidth() const { return width; } - size_t getHeight() const { return height; } - static void Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); - void BlitToDefault(size_t, size_t, size_t, size_t); -}; - -// core::rect needs these includes -#include -#include "utils/vec3.hpp" - -GLuint getTextureGLuint(irr::video::ITexture *tex); -GLuint getDepthTexture(irr::video::ITexture *tex); -void resetTextureTable(); -void compressTexture(irr::video::ITexture *tex, bool srgb, bool premul_alpha = false); -bool loadCompressedTexture(const std::string& compressed_tex); -void saveCompressedTexture(const std::string& compressed_tex); - -void draw3DLine(const core::vector3df& start, - const core::vector3df& end, irr::video::SColor color); - -void draw2DImage(const irr::video::ITexture* texture, const irr::core::rect& destRect, - const irr::core::rect& sourceRect, const irr::core::rect* clipRect, - const irr::video::SColor &color, bool useAlphaChannelOfTexture); - -void draw2DImage(const irr::video::ITexture* texture, const irr::core::rect& destRect, - const irr::core::rect& sourceRect, const irr::core::rect* clipRect, - const irr::video::SColor* const colors, bool useAlphaChannelOfTexture); - -void GL32_draw2DRectangle(irr::video::SColor color, const irr::core::rect& position, - const irr::core::rect* clip = 0); -#endif +#ifndef GLWRAP_HEADER_H +#define GLWRAP_HEADER_H + +#if defined(__APPLE__) +# include +# include +# define OGL32CTX +# ifdef GL_ARB_instanced_arrays +# define glVertexAttribDivisor glVertexAttribDivisorARB +# endif +# ifndef GL_TEXTURE_SWIZZLE_RGBA +# define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +# endif +#elif defined(ANDROID) +# include +#elif defined(WIN32) +# define _WINSOCKAPI_ +// has to be included before gl.h because of WINGDIAPI and APIENTRY definitions +# include +# include +#else +#define GL_GLEXT_PROTOTYPES +#define DEBUG_OUTPUT_DECLARED +# include +#endif + +#include +#include "utils/log.hpp" + +// already includes glext.h, which defines useful GL constants. +// COpenGLDriver has already loaded the extension GL functions we use (e.g glBeginQuery) +#include "../../lib/irrlicht/source/Irrlicht/COpenGLDriver.h" +#ifdef WIN32 +extern PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks; +extern PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback; +extern PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback; +extern PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback; +extern PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback; +extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings; +extern PFNGLBINDBUFFERBASEPROC glBindBufferBase; +extern PFNGLGENBUFFERSPROC glGenBuffers; +extern PFNGLBINDBUFFERPROC glBindBuffer; +extern PFNGLBUFFERDATAPROC glBufferData; +extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; +extern PFNGLCREATESHADERPROC glCreateShader; +extern PFNGLCOMPILESHADERPROC glCompileShader; +extern PFNGLSHADERSOURCEPROC glShaderSource; +extern PFNGLCREATEPROGRAMPROC glCreateProgram; +extern PFNGLATTACHSHADERPROC glAttachShader; +extern PFNGLLINKPROGRAMPROC glLinkProgram; +extern PFNGLUSEPROGRAMPROC glUseProgram; +extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; +extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; +extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; +extern PFNGLUNIFORM1FPROC glUniform1f; +extern PFNGLUNIFORM3FPROC glUniform3f; +extern PFNGLUNIFORM1FVPROC glUniform1fv; +extern PFNGLUNIFORM4FVPROC glUniform4fv; +extern PFNGLDELETESHADERPROC glDeleteShader; +extern PFNGLGETSHADERIVPROC glGetShaderiv; +extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; +extern PFNGLACTIVETEXTUREPROC glActiveTexture; +extern PFNGLUNIFORM2FPROC glUniform2f; +extern PFNGLUNIFORM1IPROC glUniform1i; +extern PFNGLUNIFORM3IPROC glUniform3i; +extern PFNGLUNIFORM4IPROC glUniform4i; +extern PFNGLGETPROGRAMIVPROC glGetProgramiv; +extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; +extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; +extern PFNGLBLENDEQUATIONPROC glBlendEquation; +extern PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; +extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; +extern PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; +extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; +extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; +extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; +extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; +extern PFNGLTEXBUFFERPROC glTexBuffer; +extern PFNGLBUFFERSUBDATAPROC glBufferSubData; +extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; +extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; +extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; +extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; +extern PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture; +extern PFNGLTEXIMAGE3DPROC glTexImage3D; +extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap; +extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; +extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; +extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; +extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding; +extern PFNGLBLENDCOLORPROC glBlendColor; +extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D; +extern PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage; +extern PFNGLTEXSTORAGE1DPROC glTexStorage1D; +extern PFNGLTEXSTORAGE2DPROC glTexStorage2D; +extern PFNGLTEXSTORAGE3DPROC glTexStorage3D; +#ifdef DEBUG +extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB; +#endif +#endif + + +void initGL(); +GLuint LoadTFBProgram(const char * vertex_file_path, const char **varyings, unsigned varyingscount); +void setTexture(unsigned TextureUnit, GLuint TextureId, GLenum MagFilter, GLenum MinFilter, bool allowAF = false); +GLuint LoadShader(const char * file, unsigned type); + +template +void loadAndAttach(GLint ProgramID) +{ + return; +} + +template +void loadAndAttach(GLint ProgramID, GLint ShaderType, const char *filepath, Types ... args) +{ + GLint ShaderID = LoadShader(filepath, ShaderType); + glAttachShader(ProgramID, ShaderID); + glDeleteShader(ShaderID); + loadAndAttach(ProgramID, args...); +} + +template +void printFileList() +{ + return; +} + +template +void printFileList(GLint ShaderType, const char *filepath, Types ... args) +{ + Log::error("GLWrapp", filepath); + printFileList(args...); +} + +template +GLint LoadProgram(Types ... args) +{ + GLint ProgramID = glCreateProgram(); + loadAndAttach(ProgramID, args...); + glLinkProgram(ProgramID); + + GLint Result = GL_FALSE; + int InfoLogLength; + glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); + if (Result == GL_FALSE) { + Log::error("GLWrapp", "Error when linking these shaders :"); + printFileList(args...); + glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); + char *ErrorMessage = new char[InfoLogLength]; + glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ErrorMessage); + Log::error("GLWrapp", ErrorMessage); + delete[] ErrorMessage; + } + + GLenum glErr = glGetError(); + if (glErr != GL_NO_ERROR) + { + Log::warn("IrrDriver", "GLWrap : OpenGL error %i\n", glErr); + } + + return ProgramID; +} + +class GPUTimer; + +class ScopedGPUTimer +{ +public: + ScopedGPUTimer(GPUTimer &); + ~ScopedGPUTimer(); +}; + +class GPUTimer +{ + friend class ScopedGPUTimer; + GLuint query; + bool initialised; +public: + GPUTimer(); + unsigned elapsedTimeus(); +}; + +class FrameBuffer +{ +private: + GLuint fbo; + std::vector RenderTargets; + GLuint DepthTexture; + size_t width, height; +public: + FrameBuffer(); + FrameBuffer(const std::vector &RTTs, size_t w, size_t h, bool layered = false); + FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, size_t h, bool layered = false); + ~FrameBuffer(); + void Bind(); + std::vector &getRTT() { return RenderTargets; } + GLuint &getDepthTexture() { assert(DepthTexture); return DepthTexture; } + size_t getWidth() const { return width; } + size_t getHeight() const { return height; } + static void Blit(const FrameBuffer &Src, FrameBuffer &Dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST); + void BlitToDefault(size_t, size_t, size_t, size_t); +}; + +// core::rect needs these includes +#include +#include "utils/vec3.hpp" + +GLuint getTextureGLuint(irr::video::ITexture *tex); +GLuint getDepthTexture(irr::video::ITexture *tex); +void resetTextureTable(); +void compressTexture(irr::video::ITexture *tex, bool srgb, bool premul_alpha = false); +bool loadCompressedTexture(const std::string& compressed_tex); +void saveCompressedTexture(const std::string& compressed_tex); + +void draw3DLine(const core::vector3df& start, + const core::vector3df& end, irr::video::SColor color); + +void draw2DImage(const irr::video::ITexture* texture, const irr::core::rect& destRect, + const irr::core::rect& sourceRect, const irr::core::rect* clipRect, + const irr::video::SColor &color, bool useAlphaChannelOfTexture); + +void draw2DImage(const irr::video::ITexture* texture, const irr::core::rect& destRect, + const irr::core::rect& sourceRect, const irr::core::rect* clipRect, + const irr::video::SColor* const colors, bool useAlphaChannelOfTexture); + +void GL32_draw2DRectangle(irr::video::SColor color, const irr::core::rect& position, + const irr::core::rect* clip = 0); +#endif diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index ff381584f..ba2626437 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1260,8 +1260,8 @@ void IrrDriver::unsetTextureErrorMessage() // ---------------------------------------------------------------------------- /** Retrieve all textures in the specified directory, generate a smaller -* version for each of them and save them in the cache. Smaller textures are -* generated only if they do not already exist or if their original version +* version for each of them and save them in the cache. Smaller textures are +* generated only if they do not already exist or if their original version * is newer than the cached one. * \param dir Directory from where textures will be retrieved. * Must end with '/'. @@ -2393,7 +2393,7 @@ GLuint IrrDriver::getRenderTargetTexture(TypeRTT which) // ---------------------------------------------------------------------------- -FrameBuffer& IrrDriver::getFBO(TypeFBO which) +FrameBuffer& IrrDriver::getFBO(TypeFBO which) { return m_rtts->getFBO(which); } diff --git a/src/graphics/material.cpp b/src/graphics/material.cpp index 48c019f54..ad2be7b1a 100644 --- a/src/graphics/material.cpp +++ b/src/graphics/material.cpp @@ -811,7 +811,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m // ITexture* tex = irr_driver->getTexture("cloud_mask.png"); // m->setTexture(1, tex); // - // + // // m->MaterialType = irr_driver->getShader(ES_SKYBOX); //} diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index f060e2924..a44f76dca 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -124,7 +124,7 @@ void IrrDriver::renderGLSL(float dt) RaceGUIBase *rg = world->getRaceGUI(); if (rg) rg->update(dt); - irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); + irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); for(unsigned int cam = 0; cam < Camera::getNumCameras(); cam++) { @@ -465,7 +465,7 @@ void IrrDriver::computeSunVisibility() // Is the lens flare enabled & visible? Check last frame's query. const bool hasflare = World::getWorld()->getTrack()->hasLensFlare(); const bool hasgodrays = World::getWorld()->getTrack()->hasGodRays(); - irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); + irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); if (UserConfigParams::m_light_shaft && hasgodrays)//hasflare || hasgodrays) { GLuint res = 0; @@ -829,10 +829,10 @@ void IrrDriver::renderGlow(std::vector& glows) glStencilFunc(GL_ALWAYS, 1, ~0); glEnable(GL_STENCIL_TEST); - glEnable(GL_DEPTH_TEST); - glDisable(GL_ALPHA_TEST); - glDepthMask(GL_FALSE); - glDisable(GL_BLEND); + glEnable(GL_DEPTH_TEST); + glDisable(GL_ALPHA_TEST); + glDepthMask(GL_FALSE); + glDisable(GL_BLEND); for (u32 i = 0; i < glowcount; i++) { @@ -860,11 +860,11 @@ void IrrDriver::renderGlow(std::vector& glows) FrameBuffer::Blit(irr_driver->getFBO(FBO_HALF1), irr_driver->getFBO(FBO_QUARTER1), GL_COLOR_BUFFER_BIT, GL_LINEAR); - glEnable(GL_BLEND); - glBlendEquation(GL_FUNC_ADD); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glStencilFunc(GL_EQUAL, 0, ~0); - glEnable(GL_STENCIL_TEST); + glEnable(GL_BLEND); + glBlendEquation(GL_FUNC_ADD); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glStencilFunc(GL_EQUAL, 0, ~0); + glEnable(GL_STENCIL_TEST); m_rtts->getFBO(FBO_COLORS).Bind(); m_post_processing->renderGlow(m_rtts->getRenderTarget(RTT_QUARTER1)); glDisable(GL_STENCIL_TEST); @@ -1480,16 +1480,16 @@ void IrrDriver::renderSkybox(const scene::ICameraSceneNode *camera) if (!SkyboxCubeMap) generateSkyboxCubemap(); glBindVertexArray(MeshShader::SkyboxShader::cubevao); - glDisable(GL_CULL_FACE); - assert(SkyboxTextures.size() == 6); + glDisable(GL_CULL_FACE); + assert(SkyboxTextures.size() == 6); - core::matrix4 translate; - translate.setTranslation(camera->getAbsolutePosition()); + core::matrix4 translate; + translate.setTranslation(camera->getAbsolutePosition()); - // Draw the sky box between the near and far clip plane - const f32 viewDistance = (camera->getNearValue() + camera->getFarValue()) * 0.5f; - core::matrix4 scale; - scale.setScale(core::vector3df(viewDistance, viewDistance, viewDistance)); + // Draw the sky box between the near and far clip plane + const f32 viewDistance = (camera->getNearValue() + camera->getFarValue()) * 0.5f; + core::matrix4 scale; + scale.setScale(core::vector3df(viewDistance, viewDistance, viewDistance)); core::matrix4 transform = translate * scale; core::matrix4 invtransform; transform.getInverse(invtransform); @@ -1499,7 +1499,7 @@ void IrrDriver::renderSkybox(const scene::ICameraSceneNode *camera) glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glUseProgram(MeshShader::SkyboxShader::Program); - MeshShader::SkyboxShader::setUniforms(transform, + MeshShader::SkyboxShader::setUniforms(transform, core::vector2df(float(UserConfigParams::m_width), float(UserConfigParams::m_height)), 0); @@ -1516,15 +1516,15 @@ void IrrDriver::renderDisplacement() irr_driver->getFBO(FBO_DISPLACE).Bind(); glClear(GL_COLOR_BUFFER_BIT); - DisplaceProvider * const cb = (DisplaceProvider *)irr_driver->getCallback(ES_DISPLACE); - cb->update(); + DisplaceProvider * const cb = (DisplaceProvider *)irr_driver->getCallback(ES_DISPLACE); + cb->update(); const int displacingcount = m_displacing.size(); - irr_driver->setPhase(DISPLACEMENT_PASS); - glEnable(GL_DEPTH_TEST); - glDisable(GL_ALPHA_TEST); - glDepthMask(GL_FALSE); - glDisable(GL_BLEND); + irr_driver->setPhase(DISPLACEMENT_PASS); + glEnable(GL_DEPTH_TEST); + glDisable(GL_ALPHA_TEST); + glDepthMask(GL_FALSE); + glDisable(GL_BLEND); glClear(GL_STENCIL_BUFFER_BIT); glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 0xFF); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index a18d95134..bfd3dfc17 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -60,129 +60,129 @@ GLuint createVAO(GLuint vbo, GLuint idx, GLuint attrib_position, GLuint attrib_t { if (attrib_position == -1) return 0; - GLuint vao; - glGenVertexArrays(1, &vao); - glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, vbo); - glEnableVertexAttribArray(attrib_position); - if ((GLint)attrib_texcoord != -1) - glEnableVertexAttribArray(attrib_texcoord); - if ((GLint)attrib_second_texcoord != -1) - glEnableVertexAttribArray(attrib_second_texcoord); - if ((GLint)attrib_normal != -1) - glEnableVertexAttribArray(attrib_normal); - if ((GLint)attrib_tangent != -1) - glEnableVertexAttribArray(attrib_tangent); - if ((GLint)attrib_bitangent != -1) - glEnableVertexAttribArray(attrib_bitangent); - if ((GLint)attrib_color != -1) - glEnableVertexAttribArray(attrib_color); - glVertexAttribPointer(attrib_position, 3, GL_FLOAT, GL_FALSE, stride, 0); - if ((GLint)attrib_texcoord != -1) - glVertexAttribPointer(attrib_texcoord, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 28); - if ((GLint)attrib_second_texcoord != -1) - { - if (stride < 44) - Log::error("material", "Second texcoords not present in VBO"); - glVertexAttribPointer(attrib_second_texcoord, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 36); - } - if ((GLint)attrib_normal != -1) - glVertexAttribPointer(attrib_normal, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 12); - if ((GLint)attrib_tangent != -1) - { - if (stride < 48) - Log::error("material", "Tangents not present in VBO"); - glVertexAttribPointer(attrib_tangent, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)36); - } - - if ((GLint)attrib_bitangent != -1) - { - if (stride < 60) - Log::error("material", "Bitangents not present in VBO"); - glVertexAttribPointer(attrib_bitangent, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)48); - } - if ((GLint)attrib_color != -1) - glVertexAttribPointer(attrib_color, 4, GL_UNSIGNED_BYTE, GL_TRUE, stride, (GLvoid*)24); - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idx); - return vao; + GLuint vao; + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glEnableVertexAttribArray(attrib_position); + if ((GLint)attrib_texcoord != -1) + glEnableVertexAttribArray(attrib_texcoord); + if ((GLint)attrib_second_texcoord != -1) + glEnableVertexAttribArray(attrib_second_texcoord); + if ((GLint)attrib_normal != -1) + glEnableVertexAttribArray(attrib_normal); + if ((GLint)attrib_tangent != -1) + glEnableVertexAttribArray(attrib_tangent); + if ((GLint)attrib_bitangent != -1) + glEnableVertexAttribArray(attrib_bitangent); + if ((GLint)attrib_color != -1) + glEnableVertexAttribArray(attrib_color); + glVertexAttribPointer(attrib_position, 3, GL_FLOAT, GL_FALSE, stride, 0); + if ((GLint)attrib_texcoord != -1) + glVertexAttribPointer(attrib_texcoord, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 28); + if ((GLint)attrib_second_texcoord != -1) + { + if (stride < 44) + Log::error("material", "Second texcoords not present in VBO"); + glVertexAttribPointer(attrib_second_texcoord, 2, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 36); + } + if ((GLint)attrib_normal != -1) + glVertexAttribPointer(attrib_normal, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*) 12); + if ((GLint)attrib_tangent != -1) + { + if (stride < 48) + Log::error("material", "Tangents not present in VBO"); + glVertexAttribPointer(attrib_tangent, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)36); + } + + if ((GLint)attrib_bitangent != -1) + { + if (stride < 60) + Log::error("material", "Bitangents not present in VBO"); + glVertexAttribPointer(attrib_bitangent, 3, GL_FLOAT, GL_FALSE, stride, (GLvoid*)48); + } + if ((GLint)attrib_color != -1) + glVertexAttribPointer(attrib_color, 4, GL_UNSIGNED_BYTE, GL_TRUE, stride, (GLvoid*)24); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idx); + return vao; } GLMesh allocateMeshBuffer(scene::IMeshBuffer* mb) { - GLMesh result = {}; - if (!mb) - return result; - glBindVertexArray(0); - glGenBuffers(1, &(result.vertex_buffer)); - glGenBuffers(1, &(result.index_buffer)); + GLMesh result = {}; + if (!mb) + return result; + glBindVertexArray(0); + glGenBuffers(1, &(result.vertex_buffer)); + glGenBuffers(1, &(result.index_buffer)); - glBindBuffer(GL_ARRAY_BUFFER, result.vertex_buffer); - const void* vertices = mb->getVertices(); - const u32 vertexCount = mb->getVertexCount(); - const irr::video::E_VERTEX_TYPE vType = mb->getVertexType(); - result.Stride = getVertexPitchFromType(vType); - const c8* vbuf = static_cast(vertices); - glBufferData(GL_ARRAY_BUFFER, vertexCount * result.Stride, vbuf, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, result.vertex_buffer); + const void* vertices = mb->getVertices(); + const u32 vertexCount = mb->getVertexCount(); + const irr::video::E_VERTEX_TYPE vType = mb->getVertexType(); + result.Stride = getVertexPitchFromType(vType); + const c8* vbuf = static_cast(vertices); + glBufferData(GL_ARRAY_BUFFER, vertexCount * result.Stride, vbuf, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, result.index_buffer); - const void* indices = mb->getIndices(); - u32 indexCount = mb->getIndexCount(); - GLenum indexSize; - switch (mb->getIndexType()) - { - case irr::video::EIT_16BIT: - { - indexSize = sizeof(u16); - result.IndexType = GL_UNSIGNED_SHORT; - break; - } - case irr::video::EIT_32BIT: - { - indexSize = sizeof(u32); - result.IndexType = GL_UNSIGNED_INT; - break; - } - default: - { - assert(0 && "Wrong index size"); - } - } - glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, result.index_buffer); + const void* indices = mb->getIndices(); + u32 indexCount = mb->getIndexCount(); + GLenum indexSize; + switch (mb->getIndexType()) + { + case irr::video::EIT_16BIT: + { + indexSize = sizeof(u16); + result.IndexType = GL_UNSIGNED_SHORT; + break; + } + case irr::video::EIT_32BIT: + { + indexSize = sizeof(u32); + result.IndexType = GL_UNSIGNED_INT; + break; + } + default: + { + assert(0 && "Wrong index size"); + } + } + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - result.IndexCount = mb->getIndexCount(); - switch (mb->getPrimitiveType()) - { - case scene::EPT_POINTS: - result.PrimitiveType = GL_POINTS; - break; - case scene::EPT_TRIANGLE_STRIP: - result.PrimitiveType = GL_TRIANGLE_STRIP; - break; - case scene::EPT_TRIANGLE_FAN: - result.PrimitiveType = GL_TRIANGLE_FAN; - break; - case scene::EPT_LINES: - result.PrimitiveType = GL_LINES; + result.IndexCount = mb->getIndexCount(); + switch (mb->getPrimitiveType()) + { + case scene::EPT_POINTS: + result.PrimitiveType = GL_POINTS; break; - case scene::EPT_TRIANGLES: - result.PrimitiveType = GL_TRIANGLES; - break; - case scene::EPT_POINT_SPRITES: - case scene::EPT_LINE_LOOP: - case scene::EPT_POLYGON: - case scene::EPT_LINE_STRIP: - case scene::EPT_QUAD_STRIP: - case scene::EPT_QUADS: - assert(0 && "Unsupported primitive type"); - } - for (unsigned i = 0; i < 6; i++) + case scene::EPT_TRIANGLE_STRIP: + result.PrimitiveType = GL_TRIANGLE_STRIP; + break; + case scene::EPT_TRIANGLE_FAN: + result.PrimitiveType = GL_TRIANGLE_FAN; + break; + case scene::EPT_LINES: + result.PrimitiveType = GL_LINES; + break; + case scene::EPT_TRIANGLES: + result.PrimitiveType = GL_TRIANGLES; + break; + case scene::EPT_POINT_SPRITES: + case scene::EPT_LINE_LOOP: + case scene::EPT_POLYGON: + case scene::EPT_LINE_STRIP: + case scene::EPT_QUAD_STRIP: + case scene::EPT_QUADS: + assert(0 && "Unsupported primitive type"); + } + for (unsigned i = 0; i < 6; i++) result.textures[i] = mb->getMaterial().getTexture(i); result.TextureMatrix = 0; - return result; + return result; } @@ -215,18 +215,18 @@ core::vector3df getWind() void drawGrassPass1(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, const core::matrix4 &TransposeInverseModelView, core::vector3df windDir) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::GrassPass1Shader::setUniforms(ModelViewProjectionMatrix, TransposeInverseModelView, windDir, 0); + MeshShader::GrassPass1Shader::setUniforms(ModelViewProjectionMatrix, TransposeInverseModelView, windDir, 0); assert(mesh.vao_first_pass); - glBindVertexArray(mesh.vao_first_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_first_pass); + glDrawElements(ptype, count, itype, 0); } void drawSphereMap(const GLMesh &mesh, const core::matrix4 &ModelMatrix, const core::matrix4 &InverseModelMatrix) @@ -367,28 +367,28 @@ static video::ITexture *CausticTex = 0; void drawGrassPass2(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, core::vector3df windDir) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(MeshShader::GrassPass2Shader::TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - if (irr_driver->getLightViz()) - { - GLint swizzleMask[] = {GL_ONE, GL_ONE, GL_ONE, GL_ALPHA}; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else - { - GLint swizzleMask[] = {GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA}; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } + if (irr_driver->getLightViz()) + { + GLint swizzleMask[] = {GL_ONE, GL_ONE, GL_ONE, GL_ALPHA}; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } + else + { + GLint swizzleMask[] = {GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA}; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } MeshShader::GrassPass2Shader::setUniforms(ModelViewProjectionMatrix, windDir); assert(mesh.vao_second_pass); - glBindVertexArray(mesh.vao_second_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_second_pass); + glDrawElements(ptype, count, itype, 0); } void drawUntexturedObject(const GLMesh &mesh, const core::matrix4 &ModelMatrix) @@ -408,55 +408,55 @@ void drawUntexturedObject(const GLMesh &mesh, const core::matrix4 &ModelMatrix) void drawObjectRimLimit(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TransposeInverseModelView, const core::matrix4 &TextureMatrix) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(MeshShader::ObjectRimLimitShader::TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - if (irr_driver->getLightViz()) - { - GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else - { - GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } + if (irr_driver->getLightViz()) + { + GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } + else + { + GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } MeshShader::ObjectRimLimitShader::setUniforms(ModelViewProjectionMatrix, TransposeInverseModelView, TextureMatrix); assert(mesh.vao_second_pass); - glBindVertexArray(mesh.vao_second_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_second_pass); + glDrawElements(ptype, count, itype, 0); } void drawObjectUnlit(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(MeshShader::ObjectUnlitShader::TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - if (irr_driver->getLightViz()) - { - GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else - { - GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } + if (irr_driver->getLightViz()) + { + GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } + else + { + GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } MeshShader::ObjectUnlitShader::setUniforms(ModelViewProjectionMatrix); assert(mesh.vao_second_pass); - glBindVertexArray(mesh.vao_second_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_second_pass); + glDrawElements(ptype, count, itype, 0); } void drawDetailledObjectPass2(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix) @@ -491,36 +491,36 @@ void drawDetailledObjectPass2(const GLMesh &mesh, const core::matrix4 &ModelView void drawObjectPass2(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(MeshShader::ObjectPass2Shader::TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - if (irr_driver->getLightViz()) - { - GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else - { - GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } + if (irr_driver->getLightViz()) + { + GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } + else + { + GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; + glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); + } MeshShader::ObjectPass2Shader::setUniforms(ModelViewProjectionMatrix, TextureMatrix); assert(mesh.vao_second_pass); - glBindVertexArray(mesh.vao_second_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_second_pass); + glDrawElements(ptype, count, itype, 0); } void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix) { irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); @@ -528,8 +528,8 @@ void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewPro MeshShader::TransparentShader::setUniforms(ModelViewProjectionMatrix, TextureMatrix, 0); assert(mesh.vao_first_pass); - glBindVertexArray(mesh.vao_first_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_first_pass); + glDrawElements(ptype, count, itype, 0); } void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix) @@ -567,21 +567,21 @@ void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelView void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix) { irr_driver->IncreaseObjectCount(); - const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; - float transparency = 1.; + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + float transparency = 1.; - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::BubbleShader::setUniforms(ModelViewProjectionMatrix, 0, time, transparency); + MeshShader::BubbleShader::setUniforms(ModelViewProjectionMatrix, 0, time, transparency); assert(mesh.vao_first_pass); - glBindVertexArray(mesh.vao_first_pass); - glDrawElements(ptype, count, itype, 0); + glBindVertexArray(mesh.vao_first_pass); + glDrawElements(ptype, count, itype, 0); } void drawShadowRef(const GLMesh &mesh, const core::matrix4 &ModelMatrix) @@ -616,39 +616,39 @@ void drawShadow(const GLMesh &mesh, const core::matrix4 &ModelMatrix) bool isObject(video::E_MATERIAL_TYPE type) { - if (type == irr_driver->getShader(ES_OBJECTPASS)) - return true; - if (type == irr_driver->getShader(ES_OBJECTPASS_REF)) - return true; - if (type == irr_driver->getShader(ES_OBJECTPASS_RIMLIT)) - return true; - if (type == irr_driver->getShader(ES_NORMAL_MAP)) - return true; - if (type == irr_driver->getShader(ES_SPHERE_MAP)) - return true; - if (type == irr_driver->getShader(ES_SPLATTING)) - return true; - if (type == irr_driver->getShader(ES_GRASS)) - return true; - if (type == irr_driver->getShader(ES_GRASS_REF)) - return true; - if (type == irr_driver->getShader(ES_BUBBLES)) - return true; - if (type == irr_driver->getShader(ES_OBJECT_UNLIT)) - return true; - if (type == video::EMT_TRANSPARENT_ALPHA_CHANNEL) - return true; - if (type == video::EMT_ONETEXTURE_BLEND) - return true; - if (type == video::EMT_TRANSPARENT_ADD_COLOR) - return true; + if (type == irr_driver->getShader(ES_OBJECTPASS)) + return true; + if (type == irr_driver->getShader(ES_OBJECTPASS_REF)) + return true; + if (type == irr_driver->getShader(ES_OBJECTPASS_RIMLIT)) + return true; + if (type == irr_driver->getShader(ES_NORMAL_MAP)) + return true; + if (type == irr_driver->getShader(ES_SPHERE_MAP)) + return true; + if (type == irr_driver->getShader(ES_SPLATTING)) + return true; + if (type == irr_driver->getShader(ES_GRASS)) + return true; + if (type == irr_driver->getShader(ES_GRASS_REF)) + return true; + if (type == irr_driver->getShader(ES_BUBBLES)) + return true; + if (type == irr_driver->getShader(ES_OBJECT_UNLIT)) + return true; + if (type == video::EMT_TRANSPARENT_ALPHA_CHANNEL) + return true; + if (type == video::EMT_ONETEXTURE_BLEND) + return true; + if (type == video::EMT_TRANSPARENT_ADD_COLOR) + return true; if (type == video::EMT_SOLID) return true; if (type == video::EMT_LIGHTMAP_LIGHTING) return true; if (type == video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF) return true; - return false; + return false; } void initvaostate(GLMesh &mesh, GeometricMaterial GeoMat, ShadedMaterial ShadedMat) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index c3215b2ce..0ecf8586d 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -168,7 +168,7 @@ void STKMeshSceneNode::drawDisplace(const GLMesh &mesh) core::vector2df(cb->getDirX(), cb->getDirY()), core::vector2df(cb->getDir2X(), cb->getDir2Y()), core::vector2df(float(UserConfigParams::m_width), - float(UserConfigParams::m_height)), + float(UserConfigParams::m_height)), 0, 1, 2); assert(mesh.vao_displace_pass); diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index a4a013eb1..b5d203ef9 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -859,7 +859,7 @@ void FileManager::checkAndCreateScreenshotDir() } // checkAndCreateScreenshotDir // ---------------------------------------------------------------------------- -/** Creates the directories for cached textures. This will set +/** Creates the directories for cached textures. This will set * m_cached_textures_dir with the appropriate path. */ void FileManager::checkAndCreateCachedTexturesDir() @@ -1032,12 +1032,12 @@ void FileManager::redirectOutput() } // redirectOutput //----------------------------------------------------------------------------- -/** Returns the theoretical location of the cached version of a texture +/** Returns the theoretical location of the cached version of a texture * depending of the current config. (This function also works for directories: * in this case the returned directory will be the cache location for all * textures that you will find in the specified directory. The specified * directory must end with '/') -* \note The returned location is where the cached data should be read or +* \note The returned location is where the cached data should be read or * written but the file itseft does not necessarity exist. However, the * directory structure is automatically created if it does not exist. */ @@ -1246,7 +1246,7 @@ bool FileManager::copyFile(const std::string &source, const std::string &dest) if(!f_source) return false; FILE *f_dest = fopen(dest.c_str(), "wb"); - if(!f_dest) + if(!f_dest) { fclose(f_source); return false; diff --git a/src/karts/controller/skidding_ai.cpp b/src/karts/controller/skidding_ai.cpp index ee36e1745..2c0c7e4c4 100644 --- a/src/karts/controller/skidding_ai.cpp +++ b/src/karts/controller/skidding_ai.cpp @@ -1260,8 +1260,8 @@ void SkiddingAI::handleItems(const float dt) // slower. Also, if the kart behind is closer and not slower than // this kart. bool fire_backwards = !m_kart_ahead || - (m_kart_behind && - (m_distance_behind < m_distance_ahead || + (m_kart_behind && + (m_distance_behind < m_distance_ahead || kart_ahead_is_slow ) && !kart_behind_is_slow ); @@ -1271,7 +1271,7 @@ void SkiddingAI::handleItems(const float dt) // the kart anyway, or that this might force the kart ahead to // use its nitro/zipper (and then we will shoot since then the // kart is faster). - if ((fire_backwards && kart_behind_is_slow) || + if ((fire_backwards && kart_behind_is_slow) || (!fire_backwards && kart_ahead_is_slow) ) break; @@ -1750,7 +1750,7 @@ void SkiddingAI::checkCrashes(const Vec3& pos ) // Ignore karts ahead that are faster than this kart. if(m_kart->getVelocityLC().getZ() < other_kart->getVelocityLC().getZ()) continue; - Vec3 other_kart_xyz = other_kart->getXYZ() + Vec3 other_kart_xyz = other_kart->getXYZ() + other_kart->getVelocity()*(i*dt); float kart_distance = (step_coord - other_kart_xyz).length_2d(); diff --git a/src/main.cpp b/src/main.cpp index b7a4ab04c..8d4ccff74 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -361,7 +361,7 @@ void gamepadVisualisation() } // gamepadVisualisation // ============================================================================ -/** Sets the hat mesh name depending on the current christmas mode +/** Sets the hat mesh name depending on the current christmas mode * m_xmas_mode (0: use current date, 1: always on, 2: always off). */ void handleXmasMode() diff --git a/src/modes/profile_world.cpp b/src/modes/profile_world.cpp index 596878b2e..2cee57e68 100644 --- a/src/modes/profile_world.cpp +++ b/src/modes/profile_world.cpp @@ -235,9 +235,9 @@ void ProfileWorld::enterRaceOverState() min_t = std::min(min_t, kart->getFinishTime()); av_t += kart->getFinishTime(); std::ostringstream ss; - ss << kart->getIdent() << " " + ss << kart->getIdent() << " " << kart->getController()->getControllerName() << " "; - ss << 1+(int)i << " " << kart->getPosition() << " " + ss << 1+(int)i << " " << kart->getPosition() << " " << kart->getFinishTime() << " "; all_groups.insert(kart->getController()->getControllerName()); @@ -269,7 +269,7 @@ void ProfileWorld::enterRaceOverState() std::ostringstream ss; Log::verbose("profile", ""); - ss << "name" << std::setw(max_len-4) << " " + ss << "name" << std::setw(max_len-4) << " " << "Strt End Time AvSp Top Skid Resc Rsc Brake Expl Exp Itm Ban SNitLNit Bub Off"; Log::verbose("profile", ss.str().c_str()); for(std::set::iterator it = all_groups.begin(); @@ -301,7 +301,7 @@ void ProfileWorld::enterRaceOverState() ? race_manager->getNumLaps() : 1); distance *= m_track->getTrackLength(); - Log::verbose("profile", + Log::verbose("profile", "%s %4.2f %3.2f %6.2f %4.2f %3d %5d %4.2f %3d %3d %3d %3d %3d %3d %5d", ss.str().c_str(), distance/kart->getFinishTime(), kart->getTopSpeed(), diff --git a/src/network/protocols/request_connection.cpp b/src/network/protocols/request_connection.cpp index dd2d7ed03..49449e517 100644 --- a/src/network/protocols/request_connection.cpp +++ b/src/network/protocols/request_connection.cpp @@ -28,7 +28,7 @@ using namespace Online; /** Constructor. Stores the server id. * \param server_id Id of the server. */ -RequestConnection::RequestConnection(uint32_t server_id) +RequestConnection::RequestConnection(uint32_t server_id) : Protocol(NULL, PROTOCOL_SILENT) { m_server_id = server_id; @@ -72,7 +72,7 @@ void RequestConnection::asynchronousUpdate() case NONE: { m_request = new ServerJoinRequest(); - PlayerManager::setUserDetails(m_request, "request-connection", + PlayerManager::setUserDetails(m_request, "request-connection", "address-management.php"); m_request->addParameter("server_id",m_server_id); m_request->queue(); @@ -95,7 +95,7 @@ void RequestConnection::asynchronousUpdate() } else { - Log::error("RequestConnection", + Log::error("RequestConnection", "Fail to make a request to connecto to server %d", m_server_id); } diff --git a/src/network/protocols/show_public_address.cpp b/src/network/protocols/show_public_address.cpp index 132cac537..8694e9ab6 100644 --- a/src/network/protocols/show_public_address.cpp +++ b/src/network/protocols/show_public_address.cpp @@ -43,7 +43,7 @@ void ShowPublicAddress::asynchronousUpdate() { TransportAddress addr = NetworkManager::getInstance()->getPublicAddress(); m_request = new Online::XMLRequest(); - PlayerManager::setUserDetails(m_request, "set", + PlayerManager::setUserDetails(m_request, "set", "address-management.php"); m_request->addParameter("address",addr.ip); m_request->addParameter("port",addr.port); diff --git a/src/network/protocols/start_game_protocol.cpp b/src/network/protocols/start_game_protocol.cpp index 9418faf0d..8671dd7a9 100644 --- a/src/network/protocols/start_game_protocol.cpp +++ b/src/network/protocols/start_game_protocol.cpp @@ -18,7 +18,7 @@ #include "utils/log.hpp" #include "utils/time.hpp" -StartGameProtocol::StartGameProtocol(GameSetup* game_setup) +StartGameProtocol::StartGameProtocol(GameSetup* game_setup) : Protocol(NULL, PROTOCOL_START_GAME) { m_game_setup = game_setup; @@ -105,7 +105,7 @@ void StartGameProtocol::update() // have to add self first for (unsigned int i = 0; i < players.size(); i++) { - bool is_me = (players[i]->user_profile == + bool is_me = (players[i]->user_profile == PlayerManager::getCurrentOnlineProfile()); if (is_me) { @@ -134,7 +134,7 @@ void StartGameProtocol::update() } for (unsigned int i = 0; i < players.size(); i++) { - bool is_me = (players[i]->user_profile == + bool is_me = (players[i]->user_profile == PlayerManager::getCurrentOnlineProfile()); NetworkPlayerProfile* profile = players[i]; RemoteKartInfo rki(profile->race_id, profile->kart_name, diff --git a/src/online/online_player_profile.cpp b/src/online/online_player_profile.cpp index 5e7d83b46..5ace93313 100644 --- a/src/online/online_player_profile.cpp +++ b/src/online/online_player_profile.cpp @@ -116,7 +116,7 @@ namespace Online { // If the player changes the online account, there can be a // logout stil happening. - assert(m_online_state == OS_SIGNED_OUT || + assert(m_online_state == OS_SIGNED_OUT || m_online_state == OS_SIGNING_OUT ); SignInRequest * request = new SignInRequest(false); // We can't use setUserDetail here, since there is no token yet @@ -125,7 +125,7 @@ namespace Online request->addParameter("username",username); request->addParameter("password",password); request->addParameter("save-session", - UserConfigParams::m_remember_user ? "true" + UserConfigParams::m_remember_user ? "true" : "false"); request->queue(); m_online_state = OS_SIGNING_IN; @@ -150,7 +150,7 @@ namespace Online { PlayerProfile *player = PlayerManager::get()->getPlayer(i); if(player!=current && - player->hasSavedSession() && + player->hasSavedSession() && player->getLastOnlineName() == current->getLastOnlineName()) { player->clearSession(); @@ -209,7 +209,7 @@ namespace Online // ------------------------------------------------------------------------ /** Requests a sign out from the server. If the user should be remembered, - * a 'client-quit' request is sent (which will log the user out, but + * a 'client-quit' request is sent (which will log the user out, but * remember the token), otherwise a 'disconnect' is sent. */ void OnlinePlayerProfile::requestSignOut() @@ -237,8 +237,8 @@ namespace Online : XMLRequest(true,/*priority*/RequestManager::HTTP_MAX_PRIORITY) { m_player = player; - m_player->setUserDetails(this, - UserConfigParams::m_remember_user ? "client-quit" + m_player->setUserDetails(this, + UserConfigParams::m_remember_user ? "client-quit" :"disconnect"); } // SignOutRequest }; // SignOutRequest @@ -250,7 +250,7 @@ namespace Online } // requestSignOut // ------------------------------------------------------------------------ - /** Callback once the logout event has been processed. + /** Callback once the logout event has been processed. * \param success If the request was successful. * \param input */ @@ -436,7 +436,7 @@ namespace Online // ------------------------------------------------------------------------ /** \return the online id, or 0 if the user is not signed in. */ - uint32_t OnlinePlayerProfile::getOnlineId() const + uint32_t OnlinePlayerProfile::getOnlineId() const { if((m_online_state == OS_SIGNED_IN )) { diff --git a/src/online/online_player_profile.hpp b/src/online/online_player_profile.hpp index 9189af37c..58c8353f2 100644 --- a/src/online/online_player_profile.hpp +++ b/src/online/online_player_profile.hpp @@ -73,7 +73,7 @@ namespace Online PlayerProfile::OnlineState m_online_state; virtual void signIn(bool success, const XMLNode * input); - virtual void signOut(bool success, const XMLNode * input, + virtual void signOut(bool success, const XMLNode * input, const irr::core::stringw &info); virtual uint32_t getOnlineId() const; virtual void setUserDetails(Online::HTTPRequest *request, @@ -83,7 +83,7 @@ namespace Online virtual void requestPoll() const; // ---------------------------------------------------------------- /** Returns if this user is logged in. */ - virtual bool isLoggedIn() const + virtual bool isLoggedIn() const { return m_online_state == PlayerProfile::OS_SIGNED_IN; } // isLoggedIn diff --git a/src/online/request_manager.cpp b/src/online/request_manager.cpp index 1d6fc2778..a899fee51 100644 --- a/src/online/request_manager.cpp +++ b/src/online/request_manager.cpp @@ -104,7 +104,7 @@ namespace Online * use network_http - a very subtle race condition. So the thread can * only be started after the assignment (in main) has been done. * \pre PlayerManager was created and has read the main data for each - * player so that all data for automatic login is + * player so that all data for automatic login is * availale. */ void RequestManager::startNetworkThread() @@ -129,10 +129,10 @@ namespace Online errno); } pthread_attr_destroy(&attr); - // In case that login id was not saved (or first start of stk), + // In case that login id was not saved (or first start of stk), // current player would not be defined at this stage. PlayerProfile *player = PlayerManager::getCurrentPlayer(); - if(player && player->wasOnlineLastTime() && + if(player && player->wasOnlineLastTime() && !UserConfigParams::m_always_show_login_screen) { PlayerManager::resumeSavedSession(); diff --git a/src/states_screens/dialogs/change_password_dialog.cpp b/src/states_screens/dialogs/change_password_dialog.cpp index e08c88613..632414d19 100644 --- a/src/states_screens/dialogs/change_password_dialog.cpp +++ b/src/states_screens/dialogs/change_password_dialog.cpp @@ -39,7 +39,7 @@ using namespace Online; /** Creates a modal dialog with given percentage of screen width and height */ -ChangePasswordDialog::ChangePasswordDialog() +ChangePasswordDialog::ChangePasswordDialog() : ModalDialog(0.8f,0.7f) { m_self_destroy = false; @@ -157,13 +157,13 @@ void ChangePasswordDialog::submit() } // submit // ---------------------------------------------------------------------------- -GUIEngine::EventPropagation +GUIEngine::EventPropagation ChangePasswordDialog::processEvent(const std::string& eventSource) { if (eventSource == m_options_widget->m_properties[PROP_ID]) { - const std::string& selection = + const std::string& selection = m_options_widget->getSelectionIDString(PLAYER_ID_GAME_MASTER); if (selection == m_cancel_widget->m_properties[PROP_ID]) { diff --git a/src/states_screens/dialogs/user_info_dialog.cpp b/src/states_screens/dialogs/user_info_dialog.cpp index e08539c85..22a937561 100644 --- a/src/states_screens/dialogs/user_info_dialog.cpp +++ b/src/states_screens/dialogs/user_info_dialog.cpp @@ -302,7 +302,7 @@ void UserInfoDialog::removeExistingFriend() else info_text = getInfo(); - UserInfoDialog *info = new UserInfoDialog(m_id, info_text, + UserInfoDialog *info = new UserInfoDialog(m_id, info_text, !isSuccess(), true); GUIEngine::DialogQueue::get()->pushDialog(info, true); diff --git a/src/states_screens/dialogs/vote_dialog.cpp b/src/states_screens/dialogs/vote_dialog.cpp index f7db515f1..f0efb36de 100644 --- a/src/states_screens/dialogs/vote_dialog.cpp +++ b/src/states_screens/dialogs/vote_dialog.cpp @@ -143,7 +143,7 @@ GUIEngine::EventPropagation VoteDialog::processEvent(const std::string& event) if (event == m_options_widget->m_properties[PROP_ID]) { - const std::string& selection = + const std::string& selection = m_options_widget->getSelectionIDString(PLAYER_ID_GAME_MASTER); if (selection == m_cancel_widget->m_properties[PROP_ID]) { @@ -164,7 +164,7 @@ void VoteDialog::updateFetchVote() if (!m_fetch_vote_request->isDone()) { // request still pending - m_info_widget->setText(irr::core::stringw(_("Fetching last vote")) + m_info_widget->setText(irr::core::stringw(_("Fetching last vote")) + Messages::loadingDots(), false); return; } // !isDone @@ -236,7 +236,7 @@ void VoteDialog::onUpdate(float dt) } // isDone else { - m_info_widget->setText(irr::core::stringw(_("Performing vote")) + m_info_widget->setText(irr::core::stringw(_("Performing vote")) + Messages::loadingDots(), false); } // !isDone } diff --git a/src/states_screens/edit_track_screen.cpp b/src/states_screens/edit_track_screen.cpp index 08b1bb7ba..a01bfc7c4 100644 --- a/src/states_screens/edit_track_screen.cpp +++ b/src/states_screens/edit_track_screen.cpp @@ -187,12 +187,12 @@ void EditTrackScreen::loadTrackList() belongsToGroup = (m_track_group.empty() || m_track_group == ALL_TRACKS_GROUP_ID || t->isInGroup(m_track_group) ); - if (!t->isArena() && !t->isSoccer() && + if (!t->isArena() && !t->isSoccer() && !t->isInternal() && belongsToGroup ) { - tracks_widget->addItem(translations->fribidize(t->getName()), + tracks_widget->addItem(translations->fribidize(t->getName()), t->getIdent(), - t->getScreenshotFile(), 0, + t->getScreenshotFile(), 0, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } } diff --git a/src/states_screens/online_screen.cpp b/src/states_screens/online_screen.cpp index 2337dcc6c..2423d3ce8 100644 --- a/src/states_screens/online_screen.cpp +++ b/src/states_screens/online_screen.cpp @@ -137,7 +137,7 @@ void OnlineScreen::init() Screen::init(); setInitialFocus(); DemoWorld::resetIdleTime(); - core::stringw m = _("Signed in as: %s.", + core::stringw m = _("Signed in as: %s.", PlayerManager::getCurrentOnlineUserName()); m_online_status_widget->setText(m, false); } // init @@ -198,7 +198,7 @@ void OnlineScreen::doQuickPlay() { delete request2; StateManager::get()->pushScreen(NetworkingLobby::getInstance()); - ConnectToServer *cts = new ConnectToServer(server->getServerId(), + ConnectToServer *cts = new ConnectToServer(server->getServerId(), server->getHostId()); ProtocolManager::getInstance()->requestStart(cts); } @@ -255,7 +255,7 @@ void OnlineScreen::tearDown() } // ---------------------------------------------------------------------------- -/** Sets which widget has to be focused. Depends on the user state. +/** Sets which widget has to be focused. Depends on the user state. */ void OnlineScreen::setInitialFocus() { diff --git a/src/states_screens/user_screen.cpp b/src/states_screens/user_screen.cpp index 23a2f84a8..7f2237f74 100644 --- a/src/states_screens/user_screen.cpp +++ b/src/states_screens/user_screen.cpp @@ -102,7 +102,7 @@ void BaseUserScreen::init() m_players->updateItemDisplay(); - // Select the current player. That can only be done after + // Select the current player. That can only be done after // updateItemDisplay is called. if(current_player_index.size()>0) { @@ -236,7 +236,7 @@ void BaseUserScreen::eventCallback(Widget* widget, } else if (name == "remember-user") { - UserConfigParams::m_remember_user = + UserConfigParams::m_remember_user = getWidget("remember-user")->getState(); } else if (name == "online") @@ -256,7 +256,7 @@ void BaseUserScreen::eventCallback(Widget* widget, } else if (name == "options") { - const std::string &button = + const std::string &button = m_options_widget->getSelectionIDString(player_id); if (button == "ok") { @@ -276,7 +276,7 @@ void BaseUserScreen::eventCallback(Widget* widget, PlayerProfile *cp = getSelectedPlayer(); RegisterScreen::getInstance()->setRename(cp); StateManager::get()->pushScreen(RegisterScreen::getInstance()); - // Init will automatically be called, which + // Init will automatically be called, which // refreshes the player list } else if (button == "delete") @@ -397,7 +397,7 @@ void BaseUserScreen::onUpdate(float dt) { if (!m_options_widget->isActivated()) { - core::stringw message = (m_state & STATE_LOGOUT) + core::stringw message = (m_state & STATE_LOGOUT) ? _(L"Signing out '%s'",m_sign_out_name.c_str()) : _(L"Signing in '%s'", m_sign_in_name.c_str()); m_info_widget->setText(Online::Messages::loadingDots(message.c_str()), @@ -537,7 +537,7 @@ void BaseUserScreen::doDeletePlayer() for(unsigned int i=0; igetNumPlayers(); i++) { PlayerProfile *player = PlayerManager::get()->getPlayer(i); - if(!player->isGuestAccount()) + if(!player->isGuestAccount()) { PlayerManager::get()->setCurrentPlayer(player); break; @@ -563,7 +563,7 @@ void BaseUserScreen::onDialogClose() { return; // To allow players to exit the game without creating a player, we count - // how often this function was called. The first time is after the + // how often this function was called. The first time is after the // internet allowed dialog, the 2nd time static int number_of_calls = 0; number_of_calls++; @@ -600,12 +600,12 @@ void TabbedUserScreen::init() /** Switch to the correct tab. */ void TabbedUserScreen::eventCallback(GUIEngine::Widget* widget, - const std::string& name, + const std::string& name, const int player_id) { if (name == "options_choice") { - const std::string &selection = + const std::string &selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); Screen *s; if (selection=="tab_audio" ) s = OptionsScreenAudio::getInstance(); diff --git a/src/states_screens/user_screen.hpp b/src/states_screens/user_screen.hpp index 536af0d65..106ed27d2 100644 --- a/src/states_screens/user_screen.hpp +++ b/src/states_screens/user_screen.hpp @@ -23,13 +23,13 @@ #include "guiengine/screen.hpp" -namespace GUIEngine +namespace GUIEngine { class CheckBoxWidget; class LabelWidget; class RibbonWidget; class TextBoxWidget; - class Widget; + class Widget; } class PlayerProfile; @@ -39,7 +39,7 @@ class PlayerProfile; * \brief The user management screen. The screen cames in two variations: * either as a stand-alone screen before the main menu (on first time STK * is started, or it the user is not remembered), but also as tab in the - * options menu. To implement this, we use one common base class that + * options menu. To implement this, we use one common base class that * implements nearly all functionality, and derive to classes - one for * the stand alone version, one for the version with tabs. * \ingroup states_screens. diff --git a/src/tracks/model_definition_loader.cpp b/src/tracks/model_definition_loader.cpp index 155a3bc18..c783b3221 100644 --- a/src/tracks/model_definition_loader.cpp +++ b/src/tracks/model_definition_loader.cpp @@ -152,4 +152,4 @@ void ModelDefinitionLoader::clear() scene::IMesh* ModelDefinitionLoader::getFirstMeshFor(const std::string& name) { return irr_driver->getMesh(m_lod_groups[name][0].m_model_file); -} \ No newline at end of file +} diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 368dbb1e0..02ecf8588 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -209,7 +209,7 @@ core::stringw Track::getSortName() const */ bool Track::isInGroup(const std::string &group_name) { - return std::find(m_groups.begin(), m_groups.end(), group_name) + return std::find(m_groups.begin(), m_groups.end(), group_name) != m_groups.end(); } // isInGroup diff --git a/src/tracks/track_object.cpp b/src/tracks/track_object.cpp index f20e4eadf..3ab590304 100644 --- a/src/tracks/track_object.cpp +++ b/src/tracks/track_object.cpp @@ -169,7 +169,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent, else if (lod_instance) { m_type = "lod"; - TrackObjectPresentationLOD* lod_node = + TrackObjectPresentationLOD* lod_node = new TrackObjectPresentationLOD(xml_node, parent, model_def_loader); m_presentation = lod_node; @@ -187,7 +187,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent, std::string render_pass; xml_node.get("renderpass", &render_pass); - if (m_interaction != "ghost" && m_interaction != "none" && + if (m_interaction != "ghost" && m_interaction != "none" && render_pass != "skybox" ) { m_physical_object = PhysicalObject::fromXML(type == "movable", @@ -282,7 +282,7 @@ void TrackObject::move(const core::vector3df& xyz, const core::vector3df& hpr, const core::vector3df& scale, bool update_rigid_body) { if (m_presentation != NULL) m_presentation->move(xyz, hpr, scale); - if (update_rigid_body && m_physical_object != NULL) + if (update_rigid_body && m_physical_object != NULL) { // If we set a bullet position from an irrlicht position, we need to // get the absolute transform from the presentation object (as set in diff --git a/src/utils/debug.cpp b/src/utils/debug.cpp index 1c0fb0fce..1f711f4a6 100644 --- a/src/utils/debug.cpp +++ b/src/utils/debug.cpp @@ -275,7 +275,7 @@ bool onEvent(const SEvent &event) { World* world = World::getWorld(); if (world != NULL) world->getPhysics()->setDebugMode(IrrDebugDrawer::DM_NONE); - + irr_driver->resetDebugModes(); irr_driver->toggleRSM(); } @@ -283,7 +283,7 @@ bool onEvent(const SEvent &event) { World* world = World::getWorld(); if (world != NULL) world->getPhysics()->setDebugMode(IrrDebugDrawer::DM_NONE); - + irr_driver->resetDebugModes(); irr_driver->toggleRH(); } @@ -291,7 +291,7 @@ bool onEvent(const SEvent &event) { World* world = World::getWorld(); if (world != NULL) world->getPhysics()->setDebugMode(IrrDebugDrawer::DM_NONE); - + irr_driver->resetDebugModes(); irr_driver->toggleGI(); } diff --git a/src/utils/leak_check.cpp b/src/utils/leak_check.cpp index e5c9da006..5f199c6ab 100644 --- a/src/utils/leak_check.cpp +++ b/src/utils/leak_check.cpp @@ -33,7 +33,7 @@ Synchronised m_lock_stacktrace; -#ifdef GET_STACK_TRACE +#ifdef GET_STACK_TRACE # ifdef __APPLE__ # include # include