V2.02 Plugged a leak

Added a destructor for decal, optimised pixel construction
pull/113/head v2.02
Javidx9 5 years ago committed by GitHub
parent 3621885893
commit 13bb251672
  1. 23
      olcPixelGameEngine.h

@ -2,7 +2,7 @@
olcPixelGameEngine.h
+-------------------------------------------------------------+
| OneLoneCoder Pixel Game Engine v2.01 |
| OneLoneCoder Pixel Game Engine v2.02 |
| "What do you need? Pixels... Lots of Pixels..." - javidx9 |
+-------------------------------------------------------------+
@ -131,6 +131,7 @@
David Barr, aka javidx9, ©OneLoneCoder 2018, 2019, 2020
2.01: Made renderer and platform static for multifile projects
2.02: Added Decal destructor, optimised Pixel constructor
*/
//////////////////////////////////////////////////////////////////////////////////////////
@ -453,6 +454,7 @@ namespace olc
{
public:
Decal(olc::Sprite* spr);
virtual ~Decal();
void Update();
public: // But dont touch
@ -499,6 +501,7 @@ namespace olc
virtual void DrawDecalQuad(const olc::DecalInstance& decal) = 0;
virtual uint32_t CreateTexture(const uint32_t width, const uint32_t height) = 0;
virtual void UpdateTexture(uint32_t id, olc::Sprite* spr) = 0;
virtual uint32_t DeleteTexture(const uint32_t id) = 0;
virtual void ApplyTexture(uint32_t id) = 0;
virtual void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) = 0;
virtual void ClearBuffer(olc::Pixel p, bool bDepth) = 0;
@ -789,7 +792,8 @@ namespace olc
{ r = 0; g = 0; b = 0; a = nDefaultAlpha; }
Pixel::Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha)
{ r = red; g = green; b = blue; a = alpha; }
{ n = red | (green << 8) | (blue << 16) | (alpha << 24); } // Thanks jarekpelczar
Pixel::Pixel(uint32_t p)
{ n = p; }
@ -968,6 +972,15 @@ namespace olc
renderer->UpdateTexture(id, sprite);
}
Decal::~Decal()
{
if (id != -1)
{
renderer->DeleteTexture(id);
id = -1;
}
}
// O------------------------------------------------------------------------------O
@ -2386,6 +2399,12 @@ namespace olc
return id;
}
uint32_t DeleteTexture(const uint32_t id) override
{
glDeleteTextures(1, &id);
return id;
}
void UpdateTexture(uint32_t id, olc::Sprite* spr) override
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spr->width, spr->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData());

Loading…
Cancel
Save