Skip to content

Commit

Permalink
Windows Compiled
Browse files Browse the repository at this point in the history
  • Loading branch information
AsafBruck committed Jul 17, 2018
1 parent 8a31725 commit eb3b26d
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 49 deletions.
50 changes: 50 additions & 0 deletions include/SDLRenderObjectPool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#pragma once
#include "vector";
#include "duSwapVector.h"
#include "D_SDLRenderObj2D.h"


namespace Diamond {
class SDLRenderObjectPool
{
public:
std::vector<SwapVector<SDLRenderObj2D>> m_render_objects;


SDLRenderObj2D &renderObj(RenderLayer layer,
SDLrenderobj_id robj) {
return m_render_objects[layer][robj];
}

const SDLRenderObj2D &renderObj(RenderLayer layer,
SDLrenderobj_id robj) const {
return m_render_objects[layer][robj];
}

void destroyRenderObj(RenderLayer layer,
SDLrenderobj_id robj) {
m_render_objects[layer].erase(robj);
}

SDLrenderobj_id changeLayer(RenderLayer curLayer,
SDLrenderobj_id robj,
RenderLayer newLayer) {
// Make room for a new layer if necessary
if (newLayer + 1 > m_render_objects.size()) {
m_render_objects.resize(newLayer + 1);
}

SDLrenderobj_id newID = m_render_objects[newLayer].insert(
std::move(m_render_objects[curLayer][robj]));
m_render_objects[curLayer].erase(robj);

return newID;
}


SDLRenderObjectPool() {}
~SDLRenderObjectPool() {}
};

}

6 changes: 3 additions & 3 deletions include/backend/D_SDLRenderComponent2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@

#include <memory>

#include "D_SDLRenderer2D.h"
#include "duSwapVector.h"
#include "SDLRenderObjectPool.h"

namespace Diamond {
class SDLRenderComponent2D : public RenderComponent2D {
public:
SDLRenderComponent2D(SDLRenderer2D &renderer, SDLrenderobj_id renderObj,
SDLRenderComponent2D(SDLRenderObjectPool &renderer, SDLrenderobj_id renderObj,
const Texture *texture, RenderLayer layer)
: m_renderer(renderer), m_renderObj(renderObj), m_sprite(texture),
m_layer(layer) {}
Expand Down Expand Up @@ -116,7 +116,7 @@ class SDLRenderComponent2D : public RenderComponent2D {
}

private:
SDLRenderer2D &m_renderer;
SDLRenderObjectPool &m_renderer;
SDLrenderobj_id m_renderObj;
const Texture *m_sprite;
RenderLayer m_layer;
Expand Down
28 changes: 4 additions & 24 deletions include/backend/D_SDLRenderer2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
#include "SDL_ttf.h"
#include "duPoolManager.h"
#include "D_Renderer2D.h"
#include "D_SDLRenderObj2D.h"
#include "D_SDLtypedefs.h"

#include "SDLRenderObjectPool.h"
#include "D_SDLRenderComponent2D.h"

namespace Diamond {
struct SDLRenderablePoint {
Expand All @@ -49,9 +49,6 @@ namespace Diamond {
TTF_Font *font;
};


class SDLRenderComponent2D;

class SDLRenderer2D : public Renderer2D {
public:
/**
Expand Down Expand Up @@ -97,32 +94,15 @@ namespace Diamond {
const RGBA &color) override;


SDLRenderObj2D &renderObj(RenderLayer layer,
SDLrenderobj_id robj) {
return m_render_objects[layer][robj];
}

const SDLRenderObj2D &renderObj(RenderLayer layer,
SDLrenderobj_id robj) const {
return m_render_objects[layer][robj];
}

void destroyRenderObj(RenderLayer layer,
SDLrenderobj_id robj) {
m_render_objects[layer].erase(robj);
}

SDLrenderobj_id changeLayer(RenderLayer curLayer,
SDLrenderobj_id robj,
RenderLayer newLayer);


private:
SDL_Window *m_window;
SDL_Renderer *m_renderer;

RGBA m_bgColor;

std::vector<SwapVector<SDLRenderObj2D> > m_render_objects;
SDLRenderObjectPool m_render_objects;

std::vector<SDLRenderablePoint> m_render_points_queue;
std::vector<SDLRenderableLine> m_render_lines_queue;
Expand Down
27 changes: 7 additions & 20 deletions src/graphics/D_SDLRenderer2D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,10 @@ Diamond::SDLRenderer2D::SDLRenderer2D(const Config &config, bool &success)
}

if (success && config.optimize_render_layers) {
m_render_objects.resize(config.num_render_layers_estimate);
m_render_objects.m_render_objects.resize(config.num_render_layers_estimate);

for (int i = 0; i < config.num_render_layers_estimate; ++i) {
m_render_objects[i].data().reserve(config.max_gameobjects_estimate);
m_render_objects.m_render_objects[i].data().reserve(config.max_gameobjects_estimate);
}
}
}
Expand All @@ -108,7 +108,7 @@ void Diamond::SDLRenderer2D::renderAll() {
SDL_RenderClear(m_renderer);

// Render sprites
for (auto l = m_render_objects.begin(); l != m_render_objects.end(); ++l) {
for (auto l = m_render_objects.m_render_objects.begin(); l != m_render_objects.m_render_objects.end(); ++l) {
for (auto i = l->begin(); i != l->end(); ++i) {
const auto &transform = i->getTransform();

Expand Down Expand Up @@ -261,14 +261,14 @@ Diamond::SDLRenderer2D::makeRenderComponent(const DTransform2 &transform,
RenderLayer layer,
const Vector2<tD_pos> &pivot) {
// Make room for a new layer if necessary
if ((int)layer > (int)m_render_objects.size() - 1) {
m_render_objects.resize(layer + 1);
if ((int)layer > (int)m_render_objects.m_render_objects.size() - 1) {
m_render_objects.m_render_objects.resize(layer + 1);
}

SDLrenderobj_id robj = m_render_objects[layer].emplace(
SDLrenderobj_id robj = m_render_objects.m_render_objects[layer].emplace(
transform, dynamic_cast<const SDLTexture *>(texture), pivot);

return m_renderCompPool.make(*this, robj, texture, layer);
return m_renderCompPool.make(m_render_objects, robj, texture, layer);
}

void Diamond::SDLRenderer2D::renderPoint(const Vector2<tD_pos> &coords,
Expand All @@ -282,17 +282,4 @@ void Diamond::SDLRenderer2D::renderLine(const Vector2<tD_pos> &p1,
m_render_lines_queue.push_back({p1, p2, color});
}

Diamond::SDLrenderobj_id
Diamond::SDLRenderer2D::changeLayer(RenderLayer curLayer, SDLrenderobj_id robj,
RenderLayer newLayer) {
// Make room for a new layer if necessary
if (newLayer + 1 > m_render_objects.size()) {
m_render_objects.resize(newLayer + 1);
}

SDLrenderobj_id newID = m_render_objects[newLayer].insert(
std::move(m_render_objects[curLayer][robj]));
m_render_objects[curLayer].erase(robj);

return newID;
}
4 changes: 2 additions & 2 deletions src/graphics/D_UIView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ void Diamond::UIView::updateLayout() {
}

if ((m_props.flags & UIViewProps::FIT_CONTENTS) && !m_children.empty()) {
tD_pos minx = MAXFLOAT, miny = MAXFLOAT;
tD_pos maxx = -MAXFLOAT, maxy = -MAXFLOAT;
tD_pos minx = FLT_MAX, miny = FLT_MAX;
tD_pos maxx = -FLT_MAX, maxy = -FLT_MAX;

for (auto child : m_children) {
if (child->isActive()) {
Expand Down

0 comments on commit eb3b26d

Please sign in to comment.