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 { class FBlitter_32bppAnim : public BlitterFactory {
public: public:
FBlitter_32bppAnim() : BlitterFactory("32bpp-anim", "32bpp Animation Blitter (palette animation)") {} 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 */ #endif /* BLITTER_32BPP_ANIM_HPP */

View File

@ -38,7 +38,7 @@ public:
class FBlitter_32bppSSE2_Anim : public BlitterFactory { class FBlitter_32bppSSE2_Anim : public BlitterFactory {
public: public:
FBlitter_32bppSSE2_Anim() : BlitterFactory("32bpp-sse2-anim", "32bpp partially SSE2 Animation Blitter (palette animation)", HasCPUIDFlag(1, 3, 26)) {} 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 */ #endif /* WITH_SSE */

View File

@ -50,7 +50,7 @@ public:
class FBlitter_32bppSSE4_Anim: public BlitterFactory { class FBlitter_32bppSSE4_Anim: public BlitterFactory {
public: public:
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {} 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 */ #endif /* WITH_SSE */

View File

@ -37,7 +37,7 @@ protected:
class FBlitter_32bppOptimized : public BlitterFactory { class FBlitter_32bppOptimized : public BlitterFactory {
public: public:
FBlitter_32bppOptimized() : BlitterFactory("32bpp-optimized", "32bpp Optimized Blitter (no palette animation)") {} 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 */ #endif /* BLITTER_32BPP_OPTIMIZED_HPP */

View File

@ -35,7 +35,7 @@ public:
class FBlitter_32bppSimple : public BlitterFactory { class FBlitter_32bppSimple : public BlitterFactory {
public: public:
FBlitter_32bppSimple() : BlitterFactory("32bpp-simple", "32bpp Simple Blitter (no palette animation)") {} 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 */ #endif /* BLITTER_32BPP_SIMPLE_HPP */

View File

@ -98,7 +98,7 @@ public:
class FBlitter_32bppSSE2 : public BlitterFactory { class FBlitter_32bppSSE2 : public BlitterFactory {
public: public:
FBlitter_32bppSSE2() : BlitterFactory("32bpp-sse2", "32bpp SSE2 Blitter (no palette animation)", HasCPUIDFlag(1, 3, 26)) {} 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 */ #endif /* WITH_SSE */

View File

@ -39,7 +39,7 @@ public:
class FBlitter_32bppSSE4: public BlitterFactory { class FBlitter_32bppSSE4: public BlitterFactory {
public: public:
FBlitter_32bppSSE4() : BlitterFactory("32bpp-sse4", "32bpp SSE4 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 19)) {} 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 */ #endif /* WITH_SSE */

View File

@ -39,7 +39,7 @@ public:
class FBlitter_32bppSSSE3: public BlitterFactory { class FBlitter_32bppSSSE3: public BlitterFactory {
public: public:
FBlitter_32bppSSSE3() : BlitterFactory("32bpp-ssse3", "32bpp SSSE3 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 9)) {} 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 */ #endif /* WITH_SSE */

View File

@ -54,7 +54,7 @@ protected:
public: public:
FBlitter_40bppAnim() : BlitterFactory("40bpp-anim", "40bpp Animation Blitter (OpenGL)") {} 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 */ #endif /* BLITTER_40BPP_OPTIMIZED_HPP */

View File

@ -32,7 +32,7 @@ public:
class FBlitter_8bppOptimized : public BlitterFactory { class FBlitter_8bppOptimized : public BlitterFactory {
public: public:
FBlitter_8bppOptimized() : BlitterFactory("8bpp-optimized", "8bpp Optimized Blitter (compression + all-ZoomLevel cache)") {} 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 */ #endif /* BLITTER_8BPP_OPTIMIZED_HPP */

View File

@ -26,7 +26,7 @@ public:
class FBlitter_8bppSimple : public BlitterFactory { class FBlitter_8bppSimple : public BlitterFactory {
public: public:
FBlitter_8bppSimple() : BlitterFactory("8bpp-simple", "8bpp Simple Blitter (relative slow, but never wrong)") {} 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 */ #endif /* BLITTER_8BPP_SIMPLE_HPP */

View File

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

View File

@ -38,7 +38,7 @@ public:
class FBlitter_Null : public BlitterFactory { class FBlitter_Null : public BlitterFactory {
public: public:
FBlitter_Null() : BlitterFactory("null", "Null Blitter (does nothing)") {} 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 */ #endif /* BLITTER_NULL_HPP */