Solved memory leak in renderer..
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "Renderer.h"
|
||||
|
||||
|
||||
//class UE::Game;
|
||||
|
||||
int UE::Renderer::RenderInit()
|
||||
@@ -28,34 +31,46 @@ int UE::Renderer::RenderInit()
|
||||
//SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 78, 124, 232));
|
||||
//SDL_UpdateWindowSurface(window);
|
||||
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()
|
||||
{
|
||||
std::vector<std::vector<DrawCall>> renderLayers;
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
renderLayers.push_back(std::vector<DrawCall>());
|
||||
}
|
||||
|
||||
//Add items to their layer.
|
||||
for (int i = 0; i < renderQueue.size(); 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)
|
||||
{
|
||||
std::cout << "Layer out of range";
|
||||
return;
|
||||
}
|
||||
renderLayers.at(item.layer).push_back(item);
|
||||
|
||||
layer.push_back(item);
|
||||
}
|
||||
renderQueue.clear();
|
||||
|
||||
//Iterate layers.
|
||||
for (int j = 0; j < renderLayers.size(); j++)
|
||||
{
|
||||
std::vector<DrawCall>& layer = renderLayers.at(j);
|
||||
//Render items from layer j.
|
||||
for (int k = 0; k < layer.size(); k++)
|
||||
{
|
||||
DrawCall item = layer.at(k);
|
||||
SDL_RenderCopy(main_Renderer, item.tx, item.tx_rect, item.pos_rect);
|
||||
}
|
||||
layer.clear();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void UE::Renderer::RenderUpdate()
|
||||
@@ -67,6 +82,8 @@ void UE::Renderer::RenderUpdate()
|
||||
|
||||
void UE::Renderer::RendererClean()
|
||||
{
|
||||
renderQueue.empty();
|
||||
|
||||
SDL_DestroyRenderer(main_Renderer);
|
||||
SDL_DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -64,6 +64,10 @@ namespace UE
|
||||
//Almacena todas las "draw calls" para luego ordenar los objetos por layers y dibujarlos.
|
||||
//Se podría sustituir por un std::queue o std::deque si fuera necesario.
|
||||
std::vector<DrawCall> renderQueue;
|
||||
|
||||
const int layers = 10;
|
||||
std::vector<std::vector<DrawCall>> renderLayers;
|
||||
|
||||
|
||||
const int SCREEN_WIDTH = 640;
|
||||
const int SCREEN_HEIGHT = 480;
|
||||
|
||||
Reference in New Issue
Block a user