mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use unique_ptr to manage blitters. (#13904)
parent
65cabf4c87
commit
0b3619ea35
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue