Solved memory leak in renderer..
This commit is contained in:
@@ -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)
|
||||||
|
{
|
||||||
|
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++)
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user