mirror of
https://github.com/SFML/SFML.git
synced 2025-02-08 01:18:02 +08:00
This change was made in 359fe90 due to recommendations from tooling. On its face this change makes sense since it removes a copy that isn't always necessary. In practice it caused ergonomic issues due to now being forced to make a copy of the render states when needed. The performance gains of eliding this copy are unsubstantiated. We have not done any profiling to measure its impact. For lack of such measurements I'd rather err on the side of improved user experience. If future benchmarks prove this copy is rather expensive then we can reconsider removing it with that evidence in mind.
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
#include <SFML/Graphics/Drawable.hpp>
|
|
#include <SFML/Graphics/RenderTexture.hpp>
|
|
|
|
#include <catch2/catch_test_macros.hpp>
|
|
|
|
#include <GraphicsUtil.hpp>
|
|
#include <WindowUtil.hpp>
|
|
#include <type_traits>
|
|
|
|
class DrawableTest : public sf::Drawable
|
|
{
|
|
public:
|
|
int callCount() const
|
|
{
|
|
return m_callCount;
|
|
}
|
|
|
|
private:
|
|
void draw(sf::RenderTarget&, sf::RenderStates) const override
|
|
{
|
|
++m_callCount;
|
|
}
|
|
|
|
mutable int m_callCount{};
|
|
};
|
|
|
|
TEST_CASE("[Graphics] sf::Drawable", runDisplayTests())
|
|
{
|
|
SECTION("Type traits")
|
|
{
|
|
STATIC_CHECK(!std::is_constructible_v<sf::Drawable>);
|
|
STATIC_CHECK(!std::is_copy_constructible_v<sf::Drawable>);
|
|
STATIC_CHECK(std::is_copy_assignable_v<sf::Drawable>);
|
|
STATIC_CHECK(!std::is_nothrow_move_constructible_v<sf::Drawable>);
|
|
STATIC_CHECK(std::is_nothrow_move_assignable_v<sf::Drawable>);
|
|
STATIC_CHECK(std::is_abstract_v<sf::Drawable>);
|
|
STATIC_CHECK(std::has_virtual_destructor_v<sf::Drawable>);
|
|
}
|
|
|
|
SECTION("Construction")
|
|
{
|
|
const DrawableTest drawableTest;
|
|
CHECK(drawableTest.callCount() == 0);
|
|
}
|
|
|
|
SECTION("draw()")
|
|
{
|
|
const DrawableTest drawableTest;
|
|
sf::RenderTexture renderTexture;
|
|
CHECK(renderTexture.create({32, 32}));
|
|
CHECK(drawableTest.callCount() == 0);
|
|
renderTexture.draw(drawableTest);
|
|
CHECK(drawableTest.callCount() == 1);
|
|
}
|
|
}
|