Solved memory leak in renderer..

This commit is contained in:
2021-11-08 23:32:22 +01:00
parent ce7c79dade
commit 25dcfb03fc
2 changed files with 30 additions and 9 deletions
+26 -9
View File
@@ -1,5 +1,8 @@
#include <iostream>
#include "Renderer.h" #include "Renderer.h"
//class UE::Game; //class UE::Game;
int UE::Renderer::RenderInit() int UE::Renderer::RenderInit()
@@ -28,32 +31,44 @@ int UE::Renderer::RenderInit()
//SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 78, 124, 232)); //SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 78, 124, 232));
//SDL_UpdateWindowSurface(window); //SDL_UpdateWindowSurface(window);
SDL_SetRenderDrawColor(main_Renderer, 0xFF, 0xFF, 0xFF, 0xFF); SDL_SetRenderDrawColor(main_Renderer, 0xFF, 0xFF, 0xFF, 0xFF);
//Init layers.
for (int i = 0; i < layers; i++)
{
renderLayers.push_back(std::vector<DrawCall>());
}
} }
void UE::Renderer::RenderDraw() void UE::Renderer::RenderDraw()
{ {
std::vector<std::vector<DrawCall>> renderLayers; //Add items to their layer.
for (int i = 0; i < 10; i++)
{
renderLayers.push_back(std::vector<DrawCall>());
}
for (int i = 0; i < renderQueue.size(); i++) for (int i = 0; i < renderQueue.size(); i++)
{ {
DrawCall item = renderQueue.at(i); DrawCall item = renderQueue.at(i);
std::vector<DrawCall>& layer = renderLayers.at(item.layer); //Add item i to layer number i.layer.
if (item.layer > layers)
layer.push_back(item); {
std::cout << "Layer out of range";
return;
} }
renderLayers.at(item.layer).push_back(item);
}
renderQueue.clear();
//Iterate layers.
for (int j = 0; j < renderLayers.size(); j++) for (int j = 0; j < renderLayers.size(); j++)
{ {
std::vector<DrawCall>& layer = renderLayers.at(j); std::vector<DrawCall>& layer = renderLayers.at(j);
//Render items from layer j.
for (int k = 0; k < layer.size(); k++) for (int k = 0; k < layer.size(); k++)
{ {
DrawCall item = layer.at(k); DrawCall item = layer.at(k);
SDL_RenderCopy(main_Renderer, item.tx, item.tx_rect, item.pos_rect); SDL_RenderCopy(main_Renderer, item.tx, item.tx_rect, item.pos_rect);
} }
layer.clear();
} }
} }
@@ -67,6 +82,8 @@ void UE::Renderer::RenderUpdate()
void UE::Renderer::RendererClean() void UE::Renderer::RendererClean()
{ {
renderQueue.empty();
SDL_DestroyRenderer(main_Renderer); SDL_DestroyRenderer(main_Renderer);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
} }
+4
View File
@@ -65,6 +65,10 @@ namespace UE
//Se podría sustituir por un std::queue o std::deque si fuera necesario. //Se podría sustituir por un std::queue o std::deque si fuera necesario.
std::vector<DrawCall> renderQueue; std::vector<DrawCall> renderQueue;
const int layers = 10;
std::vector<std::vector<DrawCall>> renderLayers;
const int SCREEN_WIDTH = 640; const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480; const int SCREEN_HEIGHT = 480;