diff --git a/CMakePresets.json b/CMakePresets.json index 942587c99..9d194e9a2 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,17 +1,111 @@ { "version": 3, - "configurePresets":[ + "configurePresets": [ { - "name": "dev", - "binaryDir": "build", - "installDir": "${sourceDir}/build/install", + "name": "build_base", + "hidden": true, + "generator": "Ninja", "cacheVariables": { + "CMAKE_COLOR_DIAGNOSTICS": "ON", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", "CMAKE_CXX_EXTENSIONS": "OFF", "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "SFML_BUILD_EXAMPLES": "ON", "SFML_BUILD_TEST_SUITE": "ON", - "SFML_ENABLE_STDLIB_ASSERTIONS": "ON", - "SFML_WARNINGS_AS_ERRORS": "ON" + "SFML_ENABLE_PCH": "OFF", + "SFML_WARNINGS_AS_ERRORS": "OFF" + }, + "environment": { + "CXX_WARNINGS": "-Wall -Wextra -Wpedantic -Wno-ignored-attributes -Wno-unused-command-line-argument" + } + }, + { + "name": "build_base_debug", + "hidden": true, + "inherits": "build_base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "DEBUG", + "SFML_ENABLE_LIFETIME_TRACKING": "ON", + "SFML_ENABLE_STACK_TRACES": "ON", + "SFML_ENABLE_STDLIB_ASSERTIONS": "ON" + } + }, + { + "name": "build_base_release", + "hidden": true, + "inherits": "build_base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RELEASE", + "SFML_ENABLE_LIFETIME_TRACKING": "OFF", + "SFML_ENABLE_STACK_TRACES": "OFF", + "SFML_ENABLE_STDLIB_ASSERTIONS": "OFF" + } + }, + { + "name": "vrdev_clang", + "inherits": "build_base_debug", + "binaryDir": "build_vrdev_clang", + "installDir": "${sourceDir}/build_vrdev_clang/install", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "clang++", + "CMAKE_CXX_FLAGS": "-fuse-ld=lld -ftime-trace $env{CXX_WARNINGS}" + } + }, + { + "name": "vrdev_gcc", + "inherits": "build_base_debug", + "binaryDir": "build_vrdev_gcc", + "installDir": "${sourceDir}/build_vrdev_gcc/install", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "g++", + "CMAKE_CXX_FLAGS": "-fuse-ld=lld -Wnrvo $env{CXX_WARNINGS}" + } + }, + { + "name": "vrdev_emcc", + "inherits": "build_base_debug", + "binaryDir": "build_vrdev_emcc", + "installDir": "${sourceDir}/build_vrdev_emcc/install", + "cacheVariables": { + "CMAKE_CROSSCOMPILING_EMULATOR": "C:/msys64/clang64/bin/node.exe", + "CMAKE_CXX_COMPILER_LAUNCHER": "", + "CMAKE_CXX_FLAGS": "$env{CXX_WARNINGS}", + "CMAKE_TOOLCHAIN_FILE": "C:/msys64/clang64/lib/emscripten/cmake/Modules/Platform/Emscripten.cmake", + "SFML_ENABLE_STACK_TRACES": "OFF", + "SFML_OPENGL_ES": "ON" + } + }, + { + "name": "vrdev_gcc_rel", + "inherits": "build_base_release", + "binaryDir": "build_vrdev_gcc_rel", + "installDir": "${sourceDir}/build_vrdev_gcc_rel/install", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "g++", + "CMAKE_CXX_FLAGS": "-fuse-ld=lld -Wnrvo -Ofast $env{CXX_WARNINGS}" + } + }, + { + "name": "vrdev_clang_rel", + "inherits": "build_base_release", + "binaryDir": "build_vrdev_clang_rel", + "installDir": "${sourceDir}/build_vrdev_clang_rel/install", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "clang++", + "CMAKE_CXX_FLAGS": "-fuse-ld=lld -ftime-trace -Ofast $env{CXX_WARNINGS}" + } + }, + { + "name": "vrdev_emcc_rel", + "inherits": "build_base_release", + "binaryDir": "build_vrdev_emcc_rel", + "installDir": "${sourceDir}/build_vrdev_emcc_rel/install", + "cacheVariables": { + "CMAKE_CROSSCOMPILING_EMULATOR": "C:/msys64/clang64/bin/node.exe", + "CMAKE_CXX_COMPILER_LAUNCHER": "", + "CMAKE_CXX_FLAGS": "-Ofast $env{CXX_WARNINGS}", + "CMAKE_TOOLCHAIN_FILE": "C:/msys64/clang64/lib/emscripten/cmake/Modules/Platform/Emscripten.cmake", + "SFML_OPENGL_ES": "ON" } } ] diff --git a/examples/opengl/OpenGL.cpp b/examples/opengl/OpenGL.cpp index 4933f8527..41448ebfb 100644 --- a/examples/opengl/OpenGL.cpp +++ b/examples/opengl/OpenGL.cpp @@ -1,3 +1,4 @@ +#include "SFML/Graphics/CircleShape.hpp" #include "SFML/Graphics/Font.hpp" #include "SFML/Graphics/Image.hpp" #include "SFML/Graphics/RenderStates.hpp" @@ -14,19 +15,34 @@ #include #include #include +#include #include +std::mt19937 rng(std::random_device{}()); float getRndFloat(float min, float max) { - static std::mt19937 rng(std::random_device{}()); return std::uniform_real_distribution{min, max}(rng); } +unsigned int getRndUInt(unsigned int min, unsigned int max) +{ + return std::uniform_int_distribution{min, max}(rng); +} + +unsigned char getRndU8(unsigned char min, unsigned char max) +{ + return static_cast(getRndUInt(min, max)); +} + int main() { +std::cout << sizeof(sf::Transform) << '\n'; +std::cout << sizeof(sf::Transformable) << '\n'; +std::cout << sizeof(sf::Sprite) << '\n'; + // // // Set up window @@ -69,10 +85,11 @@ int main() struct Entity { - sf::Text text; - sf::Sprite sprite; - sf::Vector2f velocity; - float torque{}; + sf::Text text; + sf::Sprite sprite; + sf::Vector2f velocity; + float torque{}; + sf::CircleShape circleShape; }; std::vector entities; @@ -95,12 +112,20 @@ int main() const auto label = std::string{names[i % 6u]} + " #" + std::to_string((i / (type + 1)) + 1); + sf::CircleShape circleShape(getRndFloat(3.f, 8.f), static_cast(getRndFloat(3.f, 8.f))); + circleShape.setFillColor( + {getRndU8(0.f, 255.f), getRndU8(0.f, 255.f), getRndU8(0.f, 255.f), getRndU8(125.f, 255.f)}); + circleShape.setOutlineColor( + {getRndU8(0.f, 255.f), getRndU8(0.f, 255.f), getRndU8(0.f, 255.f), getRndU8(125.f, 255.f)}); + circleShape.setOutlineThickness(3.f); + entities.push_back({sf::Text{i % 2u == 0u ? fontTuffy : fontMouldyCheese, label}, sf::Sprite{texture}, sf::Vector2f{getRndFloat(-2.5f, 2.5f), getRndFloat(-2.5f, 2.5f)}, - getRndFloat(-0.05f, 0.05f)}); + getRndFloat(-0.05f, 0.05f), + circleShape}); - auto& [text, sprite, velocity, torque] = entities.back(); + auto& [text, sprite, velocity, torque, cs] = entities.back(); sprite.setOrigin(sf::Vector2f(texture.getSize()) / 2.f); sprite.setRotation(sf::degrees(getRndFloat(0.f, 360.f))); @@ -115,16 +140,18 @@ int main() text.setOutlineColor(sf::Color::White); text.setOutlineThickness(5.f); - text.setOrigin(text.getLocalBounds().size / 2.f); + text.setOrigin(text.getLocalBounds().getCenter()); + circleShape.setOrigin(circleShape.getLocalBounds().getCenter()); } }; // // // Set up UI elements - bool drawSprites = true; - bool drawText = true; - int numEntities = 10000; + bool drawSprites = false; + bool drawText = false; + bool drawShapes = true; + int numEntities = 20000; // // @@ -186,7 +213,7 @@ int main() { clock.restart(); - for (auto& [text, sprite, velocity, torque] : entities) + for (auto& [text, sprite, velocity, torque, circleShape] : entities) { sprite.move(velocity); sprite.rotate(sf::radians(torque)); @@ -200,6 +227,9 @@ int main() velocity.y = -velocity.y; text.setPosition(sprite.getPosition() - sf::Vector2f{0.f, 250.f * sprite.getScale().x}); + + circleShape.setPosition(sprite.getPosition()); + circleShape.setRotation(sprite.getRotation()); } recordUs(samplesUpdateMs, clock.getElapsedTime().asSeconds() * 1000.f); @@ -219,6 +249,9 @@ int main() if (drawText) window.draw(entity.text); + + if (drawShapes) + window.draw(entity.circleShape); } recordUs(samplesDrawMs, clock.getElapsedTime().asSeconds() * 1000.f);