From 2bfb798dd9e97dfc8699dada8e7abef7bf94a2c7 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 3 Jan 2015 21:45:37 +0100 Subject: [PATCH 1/5] Minor changes Former-commit-id: fd74c48a546663f4d4802826ee2d396b0874e2c9 --- include/Nazara/Lua/LuaClass.inl | 1 - src/Nazara/Core/File.cpp | 2 +- src/Nazara/Lua/LuaInstance.cpp | 2 +- src/Nazara/Renderer/Context.cpp | 2 +- src/Nazara/Renderer/Renderer.cpp | 2 +- src/Nazara/Renderer/Shader.cpp | 6 +++--- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/Nazara/Lua/LuaClass.inl b/include/Nazara/Lua/LuaClass.inl index a63adc081..79c8a88ce 100644 --- a/include/Nazara/Lua/LuaClass.inl +++ b/include/Nazara/Lua/LuaClass.inl @@ -3,7 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#include #include #include diff --git a/src/Nazara/Core/File.cpp b/src/Nazara/Core/File.cpp index aa803a9fa..512a29144 100644 --- a/src/Nazara/Core/File.cpp +++ b/src/Nazara/Core/File.cpp @@ -733,7 +733,7 @@ bool NzFile::FillHash(NzAbstractHash* hash) const unsigned int size; while (remainingSize > 0) { - size = (remainingSize >= NAZARA_CORE_FILE_BUFFERSIZE) ? NAZARA_CORE_FILE_BUFFERSIZE : static_cast(remainingSize); + size = std::min(remainingSize, static_cast(NAZARA_CORE_FILE_BUFFERSIZE)); if (file.Read(&buffer[0], sizeof(char), size) != sizeof(char)*size) { NazaraError("Unable to read file"); diff --git a/src/Nazara/Lua/LuaInstance.cpp b/src/Nazara/Lua/LuaInstance.cpp index f6436138b..c1d0c96c8 100644 --- a/src/Nazara/Lua/LuaInstance.cpp +++ b/src/Nazara/Lua/LuaInstance.cpp @@ -557,7 +557,7 @@ bool NzLuaInstance::IsOfType(int index, nzLuaType type) const return lua_isuserdata(m_state, index) == 1; } - NazaraError("Lua type unhandled (0x" + NzString::Number(type, 16) + ')'); + NazaraError("Lua type not handled (0x" + NzString::Number(type, 16) + ')'); return false; } diff --git a/src/Nazara/Renderer/Context.cpp b/src/Nazara/Renderer/Context.cpp index 031e9b780..10654fcc3 100644 --- a/src/Nazara/Renderer/Context.cpp +++ b/src/Nazara/Renderer/Context.cpp @@ -38,7 +38,7 @@ namespace switch (source) { case GL_DEBUG_SOURCE_API: - ss << "OpenGL"; + ss << "OpenGL API"; break; case GL_DEBUG_SOURCE_WINDOW_SYSTEM: diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index 0552d8e38..28e0b5288 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -924,7 +924,7 @@ bool NzRenderer::IsComponentTypeSupported(nzComponentType type) return false; } - NazaraError("Attribute type out of enum (0x" + NzString::Number(type, 16) + ')'); + NazaraError("Attribute type not handled (0x" + NzString::Number(type, 16) + ')'); return false; } diff --git a/src/Nazara/Renderer/Shader.cpp b/src/Nazara/Renderer/Shader.cpp index 7729c1035..8d9239da2 100644 --- a/src/Nazara/Renderer/Shader.cpp +++ b/src/Nazara/Renderer/Shader.cpp @@ -254,10 +254,10 @@ NzString NzShader::GetSourceCode(nzShaderStage stage) const unsigned int totalLength = 0; for (unsigned int shader : m_attachedShaders[stage]) { - GLint length; - glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &length); + GLint length; + glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &length); - totalLength += length - 1; + totalLength += length - 1; } totalLength += (m_attachedShaders[stage].size()-1)*(sizeof(sep)/sizeof(char)); From 92df395a0eef8de58c268bdf06a34c7e75daeac6 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 3 Jan 2015 21:46:32 +0100 Subject: [PATCH 2/5] Fixed TriangleIterator with TriangleStrip mode Former-commit-id: 4d0303859e4818e9f5592b0226cb479f1c9d1ef3 --- src/Nazara/Utility/TriangleIterator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nazara/Utility/TriangleIterator.cpp b/src/Nazara/Utility/TriangleIterator.cpp index 72003cf8b..e8bd7af08 100644 --- a/src/Nazara/Utility/TriangleIterator.cpp +++ b/src/Nazara/Utility/TriangleIterator.cpp @@ -46,8 +46,8 @@ bool NzTriangleIterator::Advance() case nzPrimitiveMode_TriangleStrip: m_triangleIndices[2] = m_indexMapper.Get(m_currentIndex++); - m_triangleIndices[1] = m_triangleIndices[2]; m_triangleIndices[0] = m_triangleIndices[1]; + m_triangleIndices[1] = m_triangleIndices[2]; break; default: From e6090c80a8de22ba09e5b33f9d698ba013dd27fa Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 3 Jan 2015 21:47:40 +0100 Subject: [PATCH 3/5] Added default implementation of Unicode class Working for the ASCII set Former-commit-id: 70b1fdbb94ba91861494f64bf169c89bbfecc9ce --- src/Nazara/Core/Unicode.cpp | 326 +++++++++++++++++++++++++++++++++++- 1 file changed, 320 insertions(+), 6 deletions(-) diff --git a/src/Nazara/Core/Unicode.cpp b/src/Nazara/Core/Unicode.cpp index ac72ecc9b..a00abfdac 100644 --- a/src/Nazara/Core/Unicode.cpp +++ b/src/Nazara/Core/Unicode.cpp @@ -18,34 +18,348 @@ struct Character #include -#else // Implémentation bidon +#else // Implémentation supportant la table ASCII NzUnicode::Category NzUnicode::GetCategory(char32_t character) { - NazaraUnused(character); + switch (character) + { + case '\x00': + case '\x01': + case '\x02': + case '\x03': + case '\x04': + case '\x05': + case '\x06': + case '\x07': + case '\x08': + case '\x09': + case '\x0A': + case '\x0B': + case '\x0C': + case '\x0D': + case '\x0E': + case '\x0F': + case '\x10': + case '\x11': + case '\x12': + case '\x13': + case '\x14': + case '\x15': + case '\x16': + case '\x17': + case '\x18': + case '\x19': + case '\x1A': + case '\x1B': + case '\x1C': + case '\x1D': + case '\x1E': + case '\x1F': + case '\x7F': + return Category_Other_Control; + + case ' ': + return Category_Separator_Space; + + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '*': + case ',': + case '.': + case '/': + case ':': + case ';': + case '?': + case '@': + case '\\': + return Category_Punctuation_Other; + + case '(': + case '[': + case '{': + return Category_Punctuation_Open; + + case ')': + case '}': + case ']': + return Category_Punctuation_Close; + + case '+': + case '<': + case '=': + case '>': + case '|': + case '~': + return Category_Symbol_Math; + + case '-': + return Category_Punctuation_Dash; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return Category_Number_DecimalDigit; + + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + return Category_Number_DecimalDigit; + + case '_': + return Category_Punctuation_Connector; + + case '^': + case '`': + return Category_Symbol_Modifier; + + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + return Category_Number_DecimalDigit; + + default: + break; + } return Category_NoCategory; } NzUnicode::Direction NzUnicode::GetDirection(char32_t character) { - NazaraUnused(character); + switch (character) + { + case '\x00': + case '\x01': + case '\x02': + case '\x03': + case '\x04': + case '\x05': + case '\x06': + case '\x07': + case '\x08': + case '\x0E': + case '\x0F': + case '\x10': + case '\x11': + case '\x12': + case '\x13': + case '\x14': + case '\x15': + case '\x16': + case '\x17': + case '\x18': + case '\x19': + case '\x1A': + case '\x1B': + case '\x7F': + return Direction_Boundary_Neutral; + + case '\x09': + case '\x0B': + case '\x1F': + return Direction_Segment_Separator; + + case '\x0A': + case '\x0D': + case '\x1C': + case '\x1D': + case '\x1E': + return Direction_Paragraph_Separator; + + case '\x0C': + case ' ': + return Direction_White_Space; + + case '!': + case '"': + case '&': + case '\'': + case '(': + case ')': + case '*': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case '{': + case '|': + case '}': + case '~': + return Direction_Other_Neutral; + + case '#': + case '$': + case '%': + return Direction_European_Terminator; + + case '+': + case '-': + return Direction_European_Separator; + + case ',': + case '.': + case '/': + case ':': + return Direction_Common_Separator; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return Direction_European_Number; + + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + return Direction_Left_To_Right; + + default: + break; + } return Direction_Boundary_Neutral; } char32_t NzUnicode::GetLowercase(char32_t character) { - return character; + if (character >= 'A' && character <= 'Z') + return character + ('a' - 'A'); + else + return character; } char32_t NzUnicode::GetTitlecase(char32_t character) { - return character; + return GetUppercase(character); } char32_t NzUnicode::GetUppercase(char32_t character) { - return character; + if (character >= 'a' && character <= 'z') + return character + ('A' - 'a'); + else + return character; } #endif From ad3c70bbc8b9f486d08cced1e337015ba4e372d5 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 3 Jan 2015 21:50:37 +0100 Subject: [PATCH 4/5] Added SparsePtr substraction operator Former-commit-id: e2dadc06b1f1abbd257689e6eaee77ebbfa0af5b --- include/Nazara/Core/SparsePtr.hpp | 2 ++ include/Nazara/Core/SparsePtr.inl | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/include/Nazara/Core/SparsePtr.hpp b/include/Nazara/Core/SparsePtr.hpp index 74a64425d..8d104827c 100644 --- a/include/Nazara/Core/SparsePtr.hpp +++ b/include/Nazara/Core/SparsePtr.hpp @@ -10,6 +10,7 @@ ///FIXME: Est-ce que SparsePtr est vraiment le meilleur nom pour cette classe ? #include +#include #include template @@ -46,6 +47,7 @@ class NzSparsePtr NzSparsePtr operator+(int count) const; NzSparsePtr operator-(int count) const; + std::ptrdiff_t operator-(const NzSparsePtr& ptr) const; NzSparsePtr& operator+=(int count); NzSparsePtr& operator-=(int count); diff --git a/include/Nazara/Core/SparsePtr.inl b/include/Nazara/Core/SparsePtr.inl index 661c9292a..eb6c988ae 100644 --- a/include/Nazara/Core/SparsePtr.inl +++ b/include/Nazara/Core/SparsePtr.inl @@ -133,6 +133,12 @@ NzSparsePtr NzSparsePtr::operator-(int count) const return NzSparsePtr(m_ptr - count*m_stride, m_stride); } +template +std::ptrdiff_t NzSparsePtr::operator-(const NzSparsePtr& ptr) const +{ + return (m_ptr - ptr.m_ptr)/m_stride; +} + template NzSparsePtr& NzSparsePtr::operator+=(int count) { From a1624af969f9cf07e2056f2399b999396f86f3af Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 3 Jan 2015 22:15:15 +0100 Subject: [PATCH 5/5] Improved [Box|Rect]::Intersect performances Allowed early returns Former-commit-id: 59001afdd9734666640d440cb8b87b5a426973ce --- include/Nazara/Math/Box.inl | 35 +++++++++++++++++++---------------- include/Nazara/Math/Rect.inl | 34 +++++++++++++++++----------------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/include/Nazara/Math/Box.inl b/include/Nazara/Math/Box.inl index 744d513ab..651a6de13 100644 --- a/include/Nazara/Math/Box.inl +++ b/include/Nazara/Math/Box.inl @@ -247,27 +247,30 @@ bool NzBox::Intersect(const NzBox& box, NzBox* intersection) const { T left = std::max(x, box.x); T right = std::min(x + width, box.x + box.width); + if (left >= right) + return false; + T top = std::max(y, box.y); T bottom = std::min(y + height, box.y + box.height); + if (top >= bottom) + return false; + T up = std::max(z, box.z); T down = std::min(z + depth, box.z + box.depth); - - if (left < right && top < bottom && up < down) - { - if (intersection) - { - intersection->x = left; - intersection->y = top; - intersection->z = up; - intersection->width = right - left; - intersection->height = bottom - top; - intersection->depth = down - up; - } - - return true; - } - else + if (up >= down) return false; + + if (intersection) + { + intersection->x = left; + intersection->y = top; + intersection->z = up; + intersection->width = right - left; + intersection->height = bottom - top; + intersection->depth = down - up; + } + + return true; } template diff --git a/include/Nazara/Math/Rect.inl b/include/Nazara/Math/Rect.inl index 611403706..3d1908b83 100644 --- a/include/Nazara/Math/Rect.inl +++ b/include/Nazara/Math/Rect.inl @@ -166,24 +166,24 @@ template bool NzRect::Intersect(const NzRect& rect, NzRect* intersection) const { T left = std::max(x, rect.x); - T right = std::min(x+width, rect.x+rect.width); - T top = std::max(y, rect.y); - T bottom = std::min(y+height, rect.y+rect.height); - - if (left < right && top < bottom) - { - if (intersection) - { - intersection->x = left; - intersection->y = top; - intersection->width = right-left; - intersection->height = bottom-top; - } - - return true; - } - else + T right = std::min(x + width, rect.x + rect.width); + if (left >= right) return false; + + T top = std::max(y, rect.y); + T bottom = std::min(y + height, rect.y + rect.height); + if (top >= bottom) + return false; + + if (intersection) + { + intersection->x = left; + intersection->y = top; + intersection->width = right - left; + intersection->height = bottom - top; + } + + return true; } template