diff --git a/backends/3ds/source/bknd-gfx.cpp b/backends/3ds/source/bknd-gfx.cpp index 2325b21..0c891bf 100755 --- a/backends/3ds/source/bknd-gfx.cpp +++ b/backends/3ds/source/bknd-gfx.cpp @@ -149,11 +149,11 @@ void GfxC3D::RenderDrawData(const std::vector& Commands) { Commands[index]->ScissorOn == ScissorEnabled && Commands[index]->ScissorRect == ScissorRect) { auto c = Commands[index].get(); - for (size_t i = 0; i < c->IndexBuffer.Size(); i++) { - IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.At(i); + for (size_t i = 0; i < c->IndexBuffer.size(); i++) { + IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.at(i); } - for (size_t i = 0; i < c->VertexBuffer.Size(); i++) { - VertexBuffer[CurrentVertex++] = c->VertexBuffer.At(i); + for (size_t i = 0; i < c->VertexBuffer.size(); i++) { + VertexBuffer[CurrentVertex++] = c->VertexBuffer.at(i); } index++; } diff --git a/backends/desktop/include/pd-desktop/bknd-gfx.hpp b/backends/desktop/include/pd-desktop/bknd-gfx.hpp index 6006afb..1e83ae3 100755 --- a/backends/desktop/include/pd-desktop/bknd-gfx.hpp +++ b/backends/desktop/include/pd-desktop/bknd-gfx.hpp @@ -52,8 +52,8 @@ class GfxGL2 : public GfxDriver { PD::Li::Texture::Filter filter = PD::Li::Texture::Filter::LINEAR) override; - PD::Vec VertexBuffer; - PD::Vec IndexBuffer; + std::vector VertexBuffer; + std::vector IndexBuffer; GLuint Shader; GLuint pLocProjection; GLuint pLocTex; diff --git a/backends/desktop/source/bknd-gfx.cpp b/backends/desktop/source/bknd-gfx.cpp index b79a920..c88e38b 100755 --- a/backends/desktop/source/bknd-gfx.cpp +++ b/backends/desktop/source/bknd-gfx.cpp @@ -123,8 +123,8 @@ void SetupShaderAttribs(GLuint Shader) { /** Actual Backend */ void GfxGL2::Init() { - VertexBuffer.Resize(4 * 8192); - IndexBuffer.Resize(6 * 8192); + VertexBuffer.resize(4 * 8192); + IndexBuffer.resize(6 * 8192); Shader = createShaderProgram(vertex_shader, frag_shader); glUseProgram(Shader); @@ -190,11 +190,11 @@ void GfxGL2::RenderDrawData(const std::vector& Commands) { Commands[index]->ScissorOn == ScissorOn && Commands[index]->ScissorRect == ScissorRect) { auto c = Commands[index].get(); - for (size_t i = 0; i < c->IndexBuffer.Size(); i++) { - IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.At(i); + for (size_t i = 0; i < c->IndexBuffer.size(); i++) { + IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.at(i); } - for (size_t i = 0; i < c->VertexBuffer.Size(); i++) { - VertexBuffer[CurrentVertex++] = c->VertexBuffer.At(i); + for (size_t i = 0; i < c->VertexBuffer.size(); i++) { + VertexBuffer[CurrentVertex++] = c->VertexBuffer.at(i); } index++; } diff --git a/include/pd/core/common.hpp b/include/pd/core/common.hpp index c865542..db53b00 100755 --- a/include/pd/core/common.hpp +++ b/include/pd/core/common.hpp @@ -32,6 +32,7 @@ SOFTWARE. #include #include #include +#include #include #include #include diff --git a/include/pd/core/core.hpp b/include/pd/core/core.hpp index 3a44634..e475b48 100755 --- a/include/pd/core/core.hpp +++ b/include/pd/core/core.hpp @@ -28,9 +28,9 @@ SOFTWARE. #include #include #include -#include #include #include #include #include +#include #include diff --git a/include/pd/core/sl/allocator.hpp b/include/pd/core/sl/allocator.hpp deleted file mode 100755 index 0056d6d..0000000 --- a/include/pd/core/sl/allocator.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include - -namespace PD { -/** - * Custom Allocator for Custom Vec and probably other stuff in future - */ -template -class Allocator { - public: - Allocator() = default; - ~Allocator() = default; - - virtual T* Allocate(size_t n) { return new T[n]; } - virtual T* AllocateRaw(size_t n) { - return reinterpret_cast(::operator new(sizeof(T) * n)); - } - virtual void DeallocateRaw(T* ptr) { operator delete(ptr); } - virtual void Deallocate(T* ptr) { delete[] ptr; } - template - void Construct(T* ptr, Args&&... args) { - new (ptr) T(std::forward(args)...); - } - void Destroy(T* ptr) { ptr->~T(); } -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/hashmap.hpp b/include/pd/core/sl/hashmap.hpp deleted file mode 100755 index 22bcfe8..0000000 --- a/include/pd/core/sl/hashmap.hpp +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include - -namespace PD { -template -class HashMap { - public: - HashMap() {} - ~HashMap() {} - - void Insert(const K& k, const V& v) { - size_t idx = Hash(k); - auto& bukket = pBuckets[idx]; - for (auto& it : bukket) { - if (it.First == k) { - it.Second = v; - return; - } - } - bukket.PushBack(Pair(k, v)); - } - - bool Contains(const K& k) const { - size_t idx = Hash(k); - auto& bukket = pBuckets[idx]; - - for (auto& it : bukket) { - if (it.First == k) { - return true; - } - } - return false; - } - - void Clear() { - for (size_t i = 0; i < bucket_count; i++) { - pBuckets[i].Clear(); - } - } - - size_t Hash(const K& k) const { return std::hash{}(k) % bucket_count; } - PD::List> pBuckets[bucket_count]; -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/list.hpp b/include/pd/core/sl/list.hpp deleted file mode 100755 index 78aad55..0000000 --- a/include/pd/core/sl/list.hpp +++ /dev/null @@ -1,210 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include - -namespace PD { -template -class List { - public: - List() {} - ~List() {} - - struct Node { - Node(const T& v) : Data(v) {} - T Data; - Node* Prev = nullptr; - Node* Next = nullptr; - }; - - class Iterator { - public: - Iterator(Node* n) : pNode(n) {} - T& operator*() { return pNode->Data; } - Iterator& operator++() { - pNode = pNode->Next; - return *this; - } - bool operator!=(const Iterator& o) const { return pNode != o.pNode; } - - Node* pNode = nullptr; - }; - - void PushFront(const T& val) { - Node* node = new Node(val); - // node->Data = val; - node->Prev = nullptr; - node->Next = pHead; - if (pHead) { - pHead->Prev = node; - } - pHead = node; - if (!pTail) { - pTail = node; - } - pSize++; - } - - void PushBack(const T& val) { - Node* node = new Node(val); - // node->Data = val; - node->Prev = pTail; - node->Next = nullptr; - if (pTail) { - pTail->Next = node; - } - pTail = node; - if (!pHead) { - pHead = node; - } - pSize++; - } - - void PopFront() { - if (!pHead) { - return; - } - Node* t = pHead; - pHead = pHead->Next; - if (pHead) { - pHead->Prev = nullptr; - } else { - pTail = nullptr; - } - delete t; - pSize--; - } - - void PopBack() { - if (!pTail) { - return; - } - Node* t = pTail; - pTail = pTail->Prev; - if (pTail) { - pTail->Next = nullptr; - } else { - pHead = nullptr; - } - delete t; - pSize--; - } - - void Clear() { - while (pHead) { - PopFront(); - } - } - - void Remove(const T& v) { - Node* s = pHead; - while (s) { - if (s->Data == v) { - if (s->Prev) { - s->Prev->Next = s->Next; - } else { - pHead = s->Next; - } - if (s->Next) { - s->Next->Prev = s->Prev; - } else { - pTail = s->Prev; - } - delete s; - pSize--; - return; - } - s = s->Next; - } - } - - void Reverse() { - Node* cur = pHead; - while (cur) { - Node* temp = cur->Prev; - cur->Prev = cur->Next; - cur->Next = temp; - cur = cur->Prev; - } - Node* temp = pHead; - pHead = pTail; - pTail = temp; - } - - T& Front() { - if (pHead) { - return pHead->Data; - } - // Need a List Empty Error Here (exceptions are disabled on 3ds) - exit(1); - } - - const T& Front() const { - if (pHead) { - return pHead->Data; - } - // Need a List Empty Error Here (exceptions are disabled on 3ds) - exit(1); - } - - T& Back() { - if (pTail) { - return pTail->Data; - } - // Need a List Empty Error Here (exceptions are disabled on 3ds) - exit(1); - } - - const T& Back() const { - if (pTail) { - return pTail->Data; - } - // Need a List Empty Error Here (exceptions are disabled on 3ds) - exit(1); - } - - size_t Size() const { return pSize; } - - Iterator begin() { return Iterator(pHead); } - Iterator end() { return Iterator(nullptr); } - - private: - Node* Find(const T& v) const { - Node* t = pHead; - while (t) { - if (t->Data == v) { - return t; - } - t = t->Next; - } - return nullptr; - } - - Node* pHead = nullptr; - Node* pTail = nullptr; - size_t pSize = 0; -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/pair.hpp b/include/pd/core/sl/pair.hpp deleted file mode 100755 index 5b93440..0000000 --- a/include/pd/core/sl/pair.hpp +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include - -namespace PD { -template -class Pair { - public: - Pair() = default; - Pair(const T1& f, const T2& s) : First(f), Second(s) {} - Pair(T1&& f, T2&& s) : First(std::move(f)), Second(std::move(s)) {} - ~Pair() = default; - - T1 First; - T2 Second; -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/sl.hpp b/include/pd/core/sl/sl.hpp deleted file mode 100755 index 46051ea..0000000 --- a/include/pd/core/sl/sl.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include diff --git a/include/pd/core/sl/stack.hpp b/include/pd/core/sl/stack.hpp deleted file mode 100755 index 972a238..0000000 --- a/include/pd/core/sl/stack.hpp +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include - -namespace PD { -/** - * Custom Stack class (caus std::stack ofsten lead to memory coruption) - */ -template > -class Stack { - public: - Stack() = default; - explicit Stack(size_t cap) : pVec(cap) {} - - void Push(const T& val) { pVec.Add(val); } - - void Pop() { - if (pVec.Size() == 0) { - exit(1); - } - pVec.PopBack(); - } - - T& Top() { - if (pVec.Size() == 0) { - exit(1); - } - return pVec[pVec.Size() - 1]; - } - - const T& Top() const { - if (pVec.Size() == 0) { - exit(1); - } - return pVec[pVec.Size() - 1]; - } - - bool IsEmpty() const { return pVec.Size() == 0; } - size_t Size() const { return pVec.Size(); } - void Clear() { pVec.Clear(); } - - private: - Vec pVec; -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/tools.hpp b/include/pd/core/sl/tools.hpp deleted file mode 100755 index f4393ea..0000000 --- a/include/pd/core/sl/tools.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -/* -MIT License - -Copyright (c) 2024 - 2025 tobid7 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include - -namespace PD { -/** - * Function to get Arraysize for any type using modern c++ to - * get the size at compiletime instead of runtime - * @note this function only works for Arrays declared as - * type arr[size] and not for pointer references. - * This function will precalculate the size at compile time - * while keeping the code clean to not hardcode arraysizes - * into functions like std::fill_n - */ -template -constexpr size_t ArraySize(T (&)[N]) noexcept { - return N; -} -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/vector.hpp b/include/pd/core/sl/vector.hpp deleted file mode 100755 index 08af9ab..0000000 --- a/include/pd/core/sl/vector.hpp +++ /dev/null @@ -1,165 +0,0 @@ -#pragma once - -/* -MIT License -Copyright (c) 2024 - 2025 RenĂ© Amthor (tobid7) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - */ - -#include -#include - -namespace PD { -/** - * Open Access Vector class (Alternative to std::vector) - */ -template > -class Vec { - public: - Vec() { - pData = pAllocator.Allocate(2); - pCap = 2; - Clear(); - pPos = 0; - }; - Vec(const size_t& Size) { - pData = pAllocator.Allocate(Size + 2); - pCap = Size + 2; - Clear(); - pPos = Size; - } - Vec(const size_t& Size, const T& v) { - pData = pAllocator.Allocate(Size + 2); - pCap = Size + 2; - Clear(); - pPos = Size; - std::fill_n(pData, Size, v); - } - Vec(const T* s, const T* e) { - pData = pAllocator.Allocate(2); - pCap = 2; - Clear(); - pPos = 0; - Resize(e - s); - std::copy_n(s, e - s, pData); - } - Vec(const Vec& v) { - pCap = v.pCap; - pPos = v.pPos; - pData = pAllocator.Allocate(pCap); - for (size_t i = 0; i < pPos; i++) { - pData[i] = v.pData[i]; - } - } - ~Vec() { pAllocator.Deallocate(pData); } - - void Add(const T& v) { - if (pPos >= pCap) { - Reserve(pCap * 2); - } - pData[pPos++] = v; - } - - void PopBack() { - if (pPos == 0) return; - pPos--; - } - - T Pop() { - if (pPos == 0) { - // Todo: LOG - exit(1); - } - return pData[pPos--]; - } - - T& At(const size_t& Idx) { - if (Idx >= pPos) { - // Log - exit(1); - } - return pData[Idx]; - } - - const T& At(const size_t& Idx) const { - if (Idx >= pPos) { - // Log - exit(1); - } - return pData[Idx]; - } - - T& operator[](const size_t& Idx) { return At(Idx); } - const T& operator[](const size_t& Idx) const { return At(Idx); } - void operator+=(T v) { Add(v); } - - T* Begin() { return pData; } - const T* Begin() const { return pData; } - T* End() { return pData + pPos; } - const T* End() const { return pData + pPos; } - - // Support: `for(auto& it : Vec)` // - T* begin() { return pData; } - const T* begin() const { return pData; } - T* end() { return pData + pPos; } - const T* end() const { return pData + pPos; } - - T* Data() { return pData; } - T* Data() const { return pData; } - size_t Size() const { return pPos; } - size_t Capacity() const { return pCap; } - void Clear() { - // Avoid memset to support std::string for now - // probably revert this decision based if it lacks performance - // or make it a setting - std::fill(pData, pData + pCap, T()); - pPos = 0; - } - - void Reserve(const size_t& Size) { - if (Size <= pCap) return; - T* tmp = pAllocator.Allocate(Size); - std::fill(tmp, tmp + Size, T()); - std::copy(pData, pData + pCap, tmp); - pAllocator.Deallocate(pData); - pData = tmp; - pCap = Size; - } - - void Resize(size_t Size) { - if (Size < pPos) { - pPos = Size; - } else if (Size > pCap) { - Reserve(Size); - } - std::fill(pData + pPos, pData + Size, T()); - pPos = Size; - } - - // Allocator - Alloc pAllocator; - // Data Reference Pointer - T* pData; - // Capacity - size_t pCap; - // Current Position (Size) - size_t pPos; -}; -} // namespace PD \ No newline at end of file diff --git a/include/pd/core/sl/u128.hpp b/include/pd/core/u128.hpp similarity index 100% rename from include/pd/core/sl/u128.hpp rename to include/pd/core/u128.hpp diff --git a/include/pd/image/img_convert.hpp b/include/pd/image/img_convert.hpp index 2675079..d20b259 100755 --- a/include/pd/image/img_convert.hpp +++ b/include/pd/image/img_convert.hpp @@ -55,28 +55,5 @@ void RGB32toRGBA24(std::vector &out, const std::vector &in, */ PD_IMAGE_API void Reverse32(std::vector &buf, const int &w, const int &h); PD_IMAGE_API void ReverseBuf(std::vector &buf, size_t bpp, int w, int h); - -/** - * Convert RGB24 to RGBA32 by adding a 4th alpha value set to 255 - * to every pixel - * @param out Result List - * @param in Input Buffer List (rgb24) - * @param w width of the image - * @param h height of the image - */ -PD_IMAGE_API -void RGB24toRGBA32(PD::Vec &out, const PD::Vec &in, const int &w, - const int &h); -PD_IMAGE_API -void RGB32toRGBA24(PD::Vec &out, const PD::Vec &in, const int &w, - const int &h); -/** - * Reverse 32 (RGBA -> ABGR || ABGR -> RGBA) - * @param buf Buffer to convert - * @param w width - * @param h height - */ -PD_IMAGE_API void Reverse32(PD::Vec &buf, const int &w, const int &h); -PD_IMAGE_API void ReverseBuf(PD::Vec &buf, size_t bpp, int w, int h); } // namespace ImgConvert } // namespace PD \ No newline at end of file diff --git a/include/pd/lithium/command.hpp b/include/pd/lithium/command.hpp index c56be26..2d65083 100755 --- a/include/pd/lithium/command.hpp +++ b/include/pd/lithium/command.hpp @@ -37,17 +37,17 @@ class Command { PD_UNIQUE(Command); Command& AddIdx(const u16& idx) { - IndexBuffer.Add(VertexBuffer.Size() + idx); + IndexBuffer.push_back(VertexBuffer.size() + idx); return *this; } Command& AddVtx(const Vertex& v) { - VertexBuffer.Add(std::move(v)); + VertexBuffer.push_back(std::move(v)); return *this; } - PD::Vec VertexBuffer; - PD::Vec IndexBuffer; + std::vector VertexBuffer; + std::vector IndexBuffer; ivec4 ScissorRect; bool ScissorOn = false; int Layer; diff --git a/include/pd/lithium/drawlist.hpp b/include/pd/lithium/drawlist.hpp index e733165..ca33936 100755 --- a/include/pd/lithium/drawlist.hpp +++ b/include/pd/lithium/drawlist.hpp @@ -106,7 +106,7 @@ class PD_LITHIUM_API DrawList { * @param flags Additional Flags (Close for go back to starting point) * @param thickness Thickness of the Line */ - void DrawPolyLine(const Vec& points, u32 clr, u32 flags = 0, + void DrawPolyLine(const std::vector& points, u32 clr, u32 flags = 0, int thickness = 1); /** * Take a List ofpoints and display it as Filled Shape @@ -114,7 +114,7 @@ class PD_LITHIUM_API DrawList { * @param points List of Points * @param clr Color of the shape */ - void DrawConvexPolyFilled(const Vec& points, u32 clr); + void DrawConvexPolyFilled(const std::vector& points, u32 clr); // SECTION: PATH API // @@ -124,20 +124,20 @@ class PD_LITHIUM_API DrawList { * @param num_points Number of Positions you want to add */ void PathReserve(size_t num_points) { - pPath.Reserve(pPath.Size() + num_points); + pPath.reserve(pPath.size() + num_points); } /** * Clear current Path * @note PathStroke and PathFill will automatically clear */ - void PathClear() { pPath.Clear(); } + void PathClear() { pPath.clear(); } /** * Add a Point to the Path * @note Keep in mind that this function is used for * setting the starting point * @param v Position to add */ - void PathAdd(const fvec2& v) { pPath.Add(v); } + void PathAdd(const fvec2& v) { pPath.push_back(v); } /** * Add a Point to the Path * @note Keep in mind that this function is used for @@ -145,7 +145,7 @@ class PD_LITHIUM_API DrawList { * @param x X Position to add * @param y Y Position to add */ - void PathAdd(float x, float y) { pPath.Add(fvec2(x, y)); } + void PathAdd(float x, float y) { pPath.push_back(fvec2(x, y)); } /** * Path Stroke Create Line from point to point * @note For Primitives like Rect or Triangle mak sure to use @@ -156,7 +156,7 @@ class PD_LITHIUM_API DrawList { */ void PathStroke(u32 clr, int thickness = 1, u32 flags = 0) { DrawPolyLine(pPath, clr, flags, thickness); - pPath.Clear(); + pPath.clear(); } /** * Fill a Path with a Color @@ -166,7 +166,7 @@ class PD_LITHIUM_API DrawList { */ void PathFill(u32 clr) { DrawConvexPolyFilled(pPath, clr); - pPath.Clear(); + pPath.clear(); } void PathArcToN(const fvec2& c, float radius, float a_min, float a_max, int segments); @@ -183,25 +183,25 @@ class PD_LITHIUM_API DrawList { /// @param flags DrawFlags (for special rounding rules) void PathRectEx(fvec2 a, fvec2 b, float rounding = 0.f, u32 flags = 0); - void PushClipRect(const fvec4& cr) { pClipRects.Push(cr); } + void PushClipRect(const fvec4& cr) { pClipRects.push(cr); } void PopClipRect() { - if (pClipRects.IsEmpty()) { + if (pClipRects.empty()) { return; } - pClipRects.Pop(); + pClipRects.pop(); } /** One linear Clip rect Setup */ void pClipCmd(Command* cmd); /** Data Section */ - Stack pClipRects; + std::stack pClipRects; int Layer; float pFontScale = 0.7f; Font::Ref pCurrentFont; Texture::Ref CurrentTex; std::vector pDrawList; - PD::Vec pPath; + std::vector pPath; u32 pNumIndices = 0; u32 pNumVertices = 0; }; diff --git a/include/pd/lithium/renderer.hpp b/include/pd/lithium/renderer.hpp index 939a631..7926ae3 100755 --- a/include/pd/lithium/renderer.hpp +++ b/include/pd/lithium/renderer.hpp @@ -46,10 +46,11 @@ class PD_LITHIUM_API Renderer { u32 color); static void CmdTriangle(Command* cmd, const fvec2 a, const fvec2 b, const fvec2 c, u32 clr); - static void CmdPolyLine(const Vec& points, u32 clr, u32 flags = 0, - int thickness = 1); - static void CmdConvexPolyFilled(Command* cmd, const Vec& points, - u32 clr, Texture::Ref tex); + static void CmdPolyLine(const std::vector& points, u32 clr, + u32 flags = 0, int thickness = 1); + static void CmdConvexPolyFilled(Command* cmd, + const std::vector& points, u32 clr, + Texture::Ref tex); // SECTION: InBounds Checks diff --git a/include/pd/ui7/io.hpp b/include/pd/ui7/io.hpp index b8cf061..87ea83c 100755 --- a/include/pd/ui7/io.hpp +++ b/include/pd/ui7/io.hpp @@ -79,19 +79,18 @@ class PD_UI7_API IO { bool ShowFrameBorder = false; // not implemented yet float OverScrollMod = 0.15f; u64 DoubleClickTime = 500; // Milliseconds - PD::List> DrawListRegestry; + std::list> DrawListRegestry; // Short define for DrawKistRegestryLast - PD::List> pDLRL; - // std::vector> DrawListRegestry; + std::list> pDLRL; Li::DrawList::Ref Back; Li::DrawList::Ref Front; u32 NumVertices = 0; ///< Debug Vertices Num u32 NumIndices = 0; ///< Debug Indices Num - Vec MenuOrder; + std::vector MenuOrder; // DrawListApi void RegisterDrawList(const UI7::ID& id, Li::DrawList::Ref v) { - DrawListRegestry.PushBack(Pair(id, v)); + DrawListRegestry.push_back(std::make_pair(id, v)); } void AddViewPort(const ID& id, const ivec4& size) { diff --git a/include/pd/ui7/layout.hpp b/include/pd/ui7/layout.hpp index 56b1702..6a59634 100755 --- a/include/pd/ui7/layout.hpp +++ b/include/pd/ui7/layout.hpp @@ -135,7 +135,7 @@ class PD_UI7_API Layout { bool Scrolling[2]; // Objects - PD::List Objects; + std::list Objects; std::vector IDObjects; }; } // namespace UI7 diff --git a/pd/image/source/img_convert.cpp b/pd/image/source/img_convert.cpp index df6a010..0f7f5c9 100755 --- a/pd/image/source/img_convert.cpp +++ b/pd/image/source/img_convert.cpp @@ -79,59 +79,4 @@ PD_IMAGE_API void ReverseBuf(std::vector &buf, size_t bpp, int w, int h) { } } } - -PD_IMAGE_API void RGB24toRGBA32(PD::Vec &out, const PD::Vec &in, - const int &w, const int &h) { - // Converts RGB24 to RGBA32 - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x++) { - int src = (y * w + x) * 3; - int dst = (y * w + x) * 4; - out[dst + 0] = in[src + 0]; - out[dst + 1] = in[src + 1]; - out[dst + 2] = in[src + 2]; - out[dst + 3] = 255; - } - } -} - -PD_IMAGE_API void RGB32toRGBA24(PD::Vec &out, const PD::Vec &in, - const int &w, const int &h) { - // Converts RGB24 to RGBA32 - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x++) { - int src = (y * w + x) * 4; - int dst = (y * w + x) * 3; - out[dst + 0] = in[src + 0]; - out[dst + 1] = in[src + 1]; - out[dst + 2] = in[src + 2]; - } - } -} - -PD_IMAGE_API void Reverse32(PD::Vec &buf, const int &w, const int &h) { - for (int x = 0; x < w; x++) { - for (int y = 0; y < h; y++) { - int i = y * w + x; - u8 t0 = buf[i + 0]; - u8 t1 = buf[i + 1]; - buf[i + 0] = buf[i + 3]; - buf[i + 1] = buf[i + 2]; - buf[i + 3] = t0; - buf[i + 2] = t1; - } - } -} - -PD_IMAGE_API void ReverseBuf(PD::Vec &buf, size_t bpp, int w, int h) { - PD::Vec cpy = buf; - for (int x = 0; x < w; x++) { - for (int y = 0; y < h; y++) { - int pos = (y * w + x) * bpp; - for (size_t i = 0; i < bpp; i++) { - buf[pos + bpp - 1 - i] = cpy[pos + i]; - } - } - } -} } // namespace PD::ImgConvert \ No newline at end of file diff --git a/pd/lithium/source/drawlist.cpp b/pd/lithium/source/drawlist.cpp index 15feef4..374b876 100755 --- a/pd/lithium/source/drawlist.cpp +++ b/pd/lithium/source/drawlist.cpp @@ -37,20 +37,22 @@ PD_LITHIUM_API void DrawList::Clear() { pNumIndices = 0; pNumVertices = 0; pDrawList.clear(); - pPath.Clear(); - pClipRects.Clear(); + pPath.clear(); + while (!pClipRects.empty()) { + pClipRects.pop(); + } } PD_LITHIUM_API void DrawList::AddCommand(Command::Ref v) { - pNumIndices += v->IndexBuffer.Size(); - pNumVertices += v->VertexBuffer.Size(); + pNumIndices += v->IndexBuffer.size(); + pNumVertices += v->VertexBuffer.size(); pDrawList.push_back(std::move(v)); } PD_LITHIUM_API void DrawList::Merge(DrawList::Ref list) { for (size_t i = 0; i < list->pDrawList.size(); i++) { - pNumIndices += list->pDrawList[i]->IndexBuffer.Size(); - pNumVertices += list->pDrawList[i]->VertexBuffer.Size(); + pNumIndices += list->pDrawList[i]->IndexBuffer.size(); + pNumVertices += list->pDrawList[i]->VertexBuffer.size(); pDrawList.push_back(std::move(list->pDrawList[i])); } /** Make sure The list gets cleared */ @@ -67,9 +69,9 @@ PD_LITHIUM_API Command::Ref DrawList::PreGenerateCmd() { } PD_LITHIUM_API void DrawList::pClipCmd(Command *cmd) { - if (!pClipRects.IsEmpty()) { + if (!pClipRects.empty()) { cmd->ScissorOn = true; - cmd->ScissorRect = ivec4(pClipRects.Top()); + cmd->ScissorRect = ivec4(pClipRects.top()); } } @@ -233,21 +235,21 @@ PD_LITHIUM_API void DrawList::DrawCircleFilled(const fvec2 ¢er, float rad, } // TODO: Don't render OOS -PD_LITHIUM_API void DrawList::DrawPolyLine(const Vec &points, u32 clr, - u32 flags, int thickness) { - if (points.Size() < 2) { +PD_LITHIUM_API void DrawList::DrawPolyLine(const std::vector &points, + u32 clr, u32 flags, int thickness) { + if (points.size() < 2) { return; } DrawSolid(); auto cmd = PreGenerateCmd(); bool close = (flags & (1 << 0)); - int num_points = close ? (int)points.Size() : (int)points.Size() - 1; + int num_points = close ? (int)points.size() : (int)points.size() - 1; if (flags & (1 << 1)) { // TODO: Find a way to draw less garbage looking lines } else { // Non antialiased lines look awful when rendering with thickness != 1 for (int i = 0; i < num_points; i++) { - int j = (i + 1) == (int)points.Size() ? 0 : (i + 1); + int j = (i + 1) == (int)points.size() ? 0 : (i + 1); auto line = Renderer::PrimLine(points[i], points[j], thickness); Renderer::CmdQuad(cmd.get(), line, vec4(0.f, 1.f, 1.f, 0.f), clr); } @@ -255,9 +257,9 @@ PD_LITHIUM_API void DrawList::DrawPolyLine(const Vec &points, u32 clr, AddCommand(std::move(cmd)); } -PD_LITHIUM_API void DrawList::DrawConvexPolyFilled(const Vec &points, - u32 clr) { - if (points.Size() < 3) { +PD_LITHIUM_API void DrawList::DrawConvexPolyFilled( + const std::vector &points, u32 clr) { + if (points.size() < 3) { return; // Need at least three points } auto cmd = PreGenerateCmd(); diff --git a/pd/lithium/source/renderer.cpp b/pd/lithium/source/renderer.cpp index 60c7cc9..c9ba6c4 100755 --- a/pd/lithium/source/renderer.cpp +++ b/pd/lithium/source/renderer.cpp @@ -110,10 +110,9 @@ PD_LITHIUM_API void Renderer::CmdTriangle(Command* cmd, const fvec2 a, // TODO: Don't render OOS (Probably make it with a define as it // would probably be faster to render out of screen than checking if // it could be skipped) -PD_LITHIUM_API void Renderer::CmdConvexPolyFilled(Command* cmd, - const Vec& points, - u32 clr, Texture::Ref tex) { - if (points.Size() < 3 || tex == nullptr) { +PD_LITHIUM_API void Renderer::CmdConvexPolyFilled( + Command* cmd, const std::vector& points, u32 clr, Texture::Ref tex) { + if (points.size() < 3 || tex == nullptr) { return; // Need at least three points } @@ -121,11 +120,11 @@ PD_LITHIUM_API void Renderer::CmdConvexPolyFilled(Command* cmd, float minX = points[0].x, minY = points[0].y; float maxX = minX, maxY = minY; // Check for the max and min Positions - for (auto it = points.Begin(); it != points.End(); it++) { - if ((*it).x < minX) minX = (*it).x; - if ((*it).y < minY) minY = (*it).y; - if ((*it).x > maxX) maxX = (*it).x; - if ((*it).y > maxY) maxY = (*it).y; + for (const auto& it : points) { + if (it.x < minX) minX = it.x; + if (it.y < minY) minY = it.y; + if (it.x > maxX) maxX = it.x; + if (it.y > maxY) maxY = it.y; } // Get Short defines for UV // (Bottom Right is not required) @@ -134,10 +133,10 @@ PD_LITHIUM_API void Renderer::CmdConvexPolyFilled(Command* cmd, auto uv_bl = tex->UV.BotLeft(); // Render - for (int i = 2; i < (int)points.Size(); i++) { + for (int i = 2; i < (int)points.size(); i++) { cmd->AddIdx(0).AddIdx(i).AddIdx(i - 1); } - for (int i = 0; i < (int)points.Size(); i++) { + for (int i = 0; i < (int)points.size(); i++) { // Calculate U and V coords float u = uv_tl.x + ((points[i].x - minX) / (maxX - minX)) * (uv_tr.x - uv_tl.x); diff --git a/pd/ui7/source/io.cpp b/pd/ui7/source/io.cpp index 78908be..3056a98 100755 --- a/pd/ui7/source/io.cpp +++ b/pd/ui7/source/io.cpp @@ -34,9 +34,8 @@ PD_UI7_API void UI7::IO::Update() { Time->Update(); InputHandler->Update(); Framerate = 1000.f / Delta; - DrawListRegestry.Clear(); - DrawListRegestry.PushFront( - Pair("CtxBackList", Back)); + DrawListRegestry.clear(); + DrawListRegestry.push_front(std::make_pair("CtxBackList", Back)); // RegisterDrawList("CtxBackList", Back); NumIndices = FDL->pNumIndices; NumVertices = FDL->pNumVertices; diff --git a/pd/ui7/source/layout.cpp b/pd/ui7/source/layout.cpp index 4bfd1eb..e69823b 100755 --- a/pd/ui7/source/layout.cpp +++ b/pd/ui7/source/layout.cpp @@ -66,7 +66,7 @@ PD_UI7_API void Layout::AddObject(Container::Ref obj) { obj->Update(); CursorMove(obj->GetSize()); obj->HandleScrolling(ScrollOffset, WorkRect); - Objects.PushBack(obj); + Objects.push_back(obj); } PD_UI7_API void Layout::AddObjectEx(Container::Ref obj, u32 flags) { @@ -83,9 +83,9 @@ PD_UI7_API void Layout::AddObjectEx(Container::Ref obj, u32 flags) { obj->HandleScrolling(ScrollOffset, WorkRect); } if (flags & UI7LytAdd_Front) { - Objects.PushFront(obj); + Objects.push_front(obj); } else { - Objects.PushBack(obj); + Objects.push_back(obj); } } @@ -133,7 +133,7 @@ PD_UI7_API void Layout::Update() { for (auto& it : tbr) { IDObjects.erase(IDObjects.begin() + it); } - Objects.Clear(); + Objects.clear(); WorkRect = fvec4(fvec2(WorkRect.x, WorkRect.y), Size - IO->MenuPadding); CursorInit(); } diff --git a/pd/ui7/source/menu.cpp b/pd/ui7/source/menu.cpp index 3064c5d..b88b327 100755 --- a/pd/ui7/source/menu.cpp +++ b/pd/ui7/source/menu.cpp @@ -44,7 +44,7 @@ PD_UI7_API void Menu::Label(const std::string& label) { PD_UI7_API bool Menu::Button(const std::string& label) { bool ret = false; u32 id = Strings::FastHash("btn" + label + - std::to_string(pLayout->Objects.Size())); + std::to_string(pLayout->Objects.size())); Container::Ref r = pLayout->FindObject(id); if (!r) { r = Button::New(label, pIO); @@ -59,7 +59,7 @@ PD_UI7_API bool Menu::Button(const std::string& label) { PD_UI7_API void Menu::Checkbox(const std::string& label, bool& v) { u32 id = Strings::FastHash("cbx" + label + - std::to_string(pLayout->Objects.Size())); + std::to_string(pLayout->Objects.size())); Container::Ref r = pLayout->FindObject(id); if (!r) { r = Checkbox::New(label, v, pIO); diff --git a/pd/ui7/source/ui7.cpp b/pd/ui7/source/ui7.cpp index ecf0030..0736653 100755 --- a/pd/ui7/source/ui7.cpp +++ b/pd/ui7/source/ui7.cpp @@ -272,7 +272,7 @@ PD_UI7_API void Context::MetricsMenu(bool *show) { } // Well this are Li Drawlists now and they do not count their stats (yet) /*if (m->BeginTreeNode("DrawLists (" + - std::to_string(pIO->DrawListRegestry.Size()) + ")")) { + std::to_string(pIO->DrawListRegestry.size()) + ")")) { for (auto &it : pIO->DrawListRegestry) { if (m->BeginTreeNode(it.First.GetName())) { m->Label("Vertices: " + std::to_string(it.Second->NumVertices));