1
0
Fork 0

Codechange: Use unique_ptr to manage blitters. (#13904)

pull/13906/head
Peter Nelson 2025-03-27 08:38:58 +00:00 committed by GitHub
parent 65cabf4c87
commit 0b3619ea35
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 20 additions and 22 deletions

View File

@ -71,7 +71,7 @@ public:
class FBlitter_32bppAnim : public BlitterFactory {
public:
FBlitter_32bppAnim() : BlitterFactory("32bpp-anim", "32bpp Animation Blitter (palette animation)") {}
Blitter *CreateInstance() override { return new Blitter_32bppAnim(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppAnim>(); }
};
#endif /* BLITTER_32BPP_ANIM_HPP */

View File

@ -38,7 +38,7 @@ public:
class FBlitter_32bppSSE2_Anim : public BlitterFactory {
public:
FBlitter_32bppSSE2_Anim() : BlitterFactory("32bpp-sse2-anim", "32bpp partially SSE2 Animation Blitter (palette animation)", HasCPUIDFlag(1, 3, 26)) {}
Blitter *CreateInstance() override { return new Blitter_32bppSSE2_Anim(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppSSE2_Anim>(); }
};
#endif /* WITH_SSE */

View File

@ -50,7 +50,7 @@ public:
class FBlitter_32bppSSE4_Anim: public BlitterFactory {
public:
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {}
Blitter *CreateInstance() override { return static_cast<Blitter_32bppSSE2_Anim *>(new Blitter_32bppSSE4_Anim()); }
std::unique_ptr<Blitter> CreateInstance() override { return std::unique_ptr<Blitter>(static_cast<Blitter_32bppSSE2_Anim *>(new Blitter_32bppSSE4_Anim())); }
};
#endif /* WITH_SSE */

View File

@ -37,7 +37,7 @@ protected:
class FBlitter_32bppOptimized : public BlitterFactory {
public:
FBlitter_32bppOptimized() : BlitterFactory("32bpp-optimized", "32bpp Optimized Blitter (no palette animation)") {}
Blitter *CreateInstance() override { return new Blitter_32bppOptimized(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppOptimized>(); }
};
#endif /* BLITTER_32BPP_OPTIMIZED_HPP */

View File

@ -35,7 +35,7 @@ public:
class FBlitter_32bppSimple : public BlitterFactory {
public:
FBlitter_32bppSimple() : BlitterFactory("32bpp-simple", "32bpp Simple Blitter (no palette animation)") {}
Blitter *CreateInstance() override { return new Blitter_32bppSimple(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppSimple>(); }
};
#endif /* BLITTER_32BPP_SIMPLE_HPP */

View File

@ -98,7 +98,7 @@ public:
class FBlitter_32bppSSE2 : public BlitterFactory {
public:
FBlitter_32bppSSE2() : BlitterFactory("32bpp-sse2", "32bpp SSE2 Blitter (no palette animation)", HasCPUIDFlag(1, 3, 26)) {}
Blitter *CreateInstance() override { return new Blitter_32bppSSE2(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppSSE2>(); }
};
#endif /* WITH_SSE */

View File

@ -39,7 +39,7 @@ public:
class FBlitter_32bppSSE4: public BlitterFactory {
public:
FBlitter_32bppSSE4() : BlitterFactory("32bpp-sse4", "32bpp SSE4 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 19)) {}
Blitter *CreateInstance() override { return new Blitter_32bppSSE4(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppSSE4>(); }
};
#endif /* WITH_SSE */

View File

@ -39,7 +39,7 @@ public:
class FBlitter_32bppSSSE3: public BlitterFactory {
public:
FBlitter_32bppSSSE3() : BlitterFactory("32bpp-ssse3", "32bpp SSSE3 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 9)) {}
Blitter *CreateInstance() override { return new Blitter_32bppSSSE3(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_32bppSSSE3>(); }
};
#endif /* WITH_SSE */

View File

@ -54,7 +54,7 @@ protected:
public:
FBlitter_40bppAnim() : BlitterFactory("40bpp-anim", "40bpp Animation Blitter (OpenGL)") {}
Blitter *CreateInstance() override { return new Blitter_40bppAnim(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_40bppAnim>(); }
};
#endif /* BLITTER_40BPP_OPTIMIZED_HPP */

View File

@ -32,7 +32,7 @@ public:
class FBlitter_8bppOptimized : public BlitterFactory {
public:
FBlitter_8bppOptimized() : BlitterFactory("8bpp-optimized", "8bpp Optimized Blitter (compression + all-ZoomLevel cache)") {}
Blitter *CreateInstance() override { return new Blitter_8bppOptimized(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_8bppOptimized>(); }
};
#endif /* BLITTER_8BPP_OPTIMIZED_HPP */

View File

@ -26,7 +26,7 @@ public:
class FBlitter_8bppSimple : public BlitterFactory {
public:
FBlitter_8bppSimple() : BlitterFactory("8bpp-simple", "8bpp Simple Blitter (relative slow, but never wrong)") {}
Blitter *CreateInstance() override { return new Blitter_8bppSimple(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_8bppSimple>(); }
};
#endif /* BLITTER_8BPP_SIMPLE_HPP */

View File

@ -39,10 +39,10 @@ private:
* Get the currently active blitter.
* @return The currently active blitter.
*/
static Blitter **GetActiveBlitter()
static std::unique_ptr<Blitter> &GetActiveBlitter()
{
static Blitter *s_blitter = nullptr;
return &s_blitter;
static std::unique_ptr<Blitter> s_blitter = nullptr;
return s_blitter;
}
protected:
@ -98,12 +98,10 @@ public:
BlitterFactory *b = GetBlitterFactory(name);
if (b == nullptr) return nullptr;
Blitter *newb = b->CreateInstance();
delete *GetActiveBlitter();
*GetActiveBlitter() = newb;
GetActiveBlitter() = b->CreateInstance();
Debug(driver, 1, "Successfully {} blitter '{}'", name.empty() ? "probed" : "loaded", newb->GetName());
return newb;
Debug(driver, 1, "Successfully {} blitter '{}'", name.empty() ? "probed" : "loaded", GetCurrentBlitter()->GetName());
return GetCurrentBlitter();
}
/**
@ -137,7 +135,7 @@ public:
*/
static Blitter *GetCurrentBlitter()
{
return *GetActiveBlitter();
return GetActiveBlitter().get();
}
/**
@ -175,7 +173,7 @@ public:
/**
* Create an instance of this Blitter-class.
*/
virtual Blitter *CreateInstance() = 0;
virtual std::unique_ptr<Blitter> CreateInstance() = 0;
};
extern std::string _ini_blitter;

View File

@ -38,7 +38,7 @@ public:
class FBlitter_Null : public BlitterFactory {
public:
FBlitter_Null() : BlitterFactory("null", "Null Blitter (does nothing)") {}
Blitter *CreateInstance() override { return new Blitter_Null(); }
std::unique_ptr<Blitter> CreateInstance() override { return std::make_unique<Blitter_Null>(); }
};
#endif /* BLITTER_NULL_HPP */