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 {
|
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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue