22 #ifndef FIFE_LIGHTRENDERER_H
23 #define FIFE_LIGHTRENDERER_H
34 #include "model/structures/renderernode.h"
35 #include "view/rendererbase.h"
36 #include "video/animation.h"
42 class LightRendererElementInfo {
44 LightRendererElementInfo(RendererNode n, int32_t src, int32_t dst);
45 virtual ~LightRendererElementInfo() {};
47 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) = 0;
48 virtual std::string getName() = 0;
50 RendererNode* getNode() {
return &m_anchor; };
51 int32_t getSrcBlend() {
return m_src; };
52 int32_t getDstBlend() {
return m_dst; };
54 void setStencil(uint8_t stencil_ref);
58 virtual std::vector<uint8_t> getColor() {
return std::vector<uint8_t>(); };
59 virtual float getRadius() {
return 0; };
60 virtual int32_t getSubdivisions() {
return 0; };
61 virtual float getXStretch() {
return 0; };
62 virtual float getYStretch() {
return 0; };
65 RendererNode m_anchor;
69 uint8_t m_stencil_ref;
72 class LightRendererImageInfo :
public LightRendererElementInfo {
74 LightRendererImageInfo(RendererNode n, ImagePtr image, int32_t src, int32_t dst);
75 virtual ~LightRendererImageInfo() {};
77 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
78 virtual std::string getName() {
return "image"; };
79 ImagePtr getImage() {
return m_image; };
85 class LightRendererAnimationInfo :
public LightRendererElementInfo {
87 LightRendererAnimationInfo(RendererNode n, AnimationPtr animation, int32_t src, int32_t dst);
88 virtual ~LightRendererAnimationInfo() {};
90 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
91 virtual std::string getName() {
return "animation"; };
92 AnimationPtr getAnimation() {
return m_animation; };
95 AnimationPtr m_animation;
96 uint32_t m_start_time;
100 class LightRendererSimpleLightInfo :
public LightRendererElementInfo {
102 LightRendererSimpleLightInfo(RendererNode n, uint8_t intensity,
float radius, int32_t subdivisions,
float xstretch,
float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src, int32_t dst);
103 virtual ~LightRendererSimpleLightInfo() {};
105 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
106 virtual std::string getName() {
return "simple"; };
108 std::vector<uint8_t> getColor();
109 float getRadius() {
return m_radius; };
110 int32_t getSubdivisions() {
return m_subdivisions; };
111 float getXStretch() {
return m_xstretch; };
112 float getYStretch() {
return m_ystretch; };
117 int32_t m_subdivisions;
125 class LightRendererResizeInfo :
public LightRendererElementInfo {
127 LightRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src, int32_t dst);
128 virtual ~LightRendererResizeInfo() {};
130 virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend);
131 virtual std::string getName() {
return "resize"; };
133 ImagePtr getImage() {
return m_image; };
141 class LightRenderer:
public RendererBase {
147 LightRenderer(RenderBackend* renderbackend, int32_t position);
149 LightRenderer(
const LightRenderer& old);
155 virtual ~LightRenderer();
156 void render(Camera* cam, Layer* layer, RenderList& instances);
157 std::string getName() {
return "LightRenderer"; }
161 static LightRenderer* getInstance(IRendererContainer* cnt);
163 void addImage(
const std::string &group, RendererNode n, ImagePtr image, int32_t src=-1, int32_t dst=-1);
164 void addAnimation(
const std::string &group, RendererNode n, AnimationPtr animation, int32_t src=-1, int32_t dst=-1);
165 void addSimpleLight(
const std::string &group, RendererNode n, uint8_t intensity,
float radius, int32_t subdivisions,
float xstretch,
float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src=-1, int32_t dst=-1);
166 void resizeImage(
const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src=-1, int32_t dst=-1);
167 void addStencilTest(
const std::string &group, uint8_t stencil_ref=0);
168 void removeStencilTest(
const std::string &group);
169 std::list<std::string> getGroups();
170 std::vector<LightRendererElementInfo*> getLightInfo(
const std::string &group);
171 void removeAll(
const std::string &group);
176 std::map<std::string, std::vector<LightRendererElementInfo*> > m_groups;
RendererBase(RenderBackend *renderbackend, int32_t position)
credit to phoku for his NodeDisplay example which the visitor code is adapted from ( he coded the qua...