mirror of
https://github.com/SFML/SFML.git
synced 2024-12-01 07:41:05 +08:00
4315c3d290
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);
|
|
}
|
|
}
|