22 #ifndef FIFE_VIDEO_RENDERBACKEND_H
23 #define FIFE_VIDEO_RENDERBACKEND_H
30 #include "util/base/fife_stdint.h"
34 #include <SDL_video.h>
40 #include "util/base/singleton.h"
41 #include "util/structures/point.h"
42 #include "util/structures/rect.h"
43 #include "video/devicecaps.h"
48 #include "video/opengl/fife_opengl.h"
69 NOTEQUAL = GL_NOTEQUAL,
106 virtual const std::string&
getName()
const = 0;
118 virtual void init(
const std::string& driver) = 0;
134 virtual void setLighting(
float red,
float green,
float blue) = 0;
157 virtual void createMainScreen(
const ScreenMode& mode,
const std::string& title,
const std::string& icon) = 0;
164 virtual Image* createImage(IResourceLoader* loader = 0) = 0;
165 virtual Image* createImage(
const std::string& name, IResourceLoader* loader = 0) = 0;
173 virtual Image* createImage(
const uint8_t* data, uint32_t width, uint32_t height) = 0;
174 virtual Image* createImage(
const std::string& name,
const uint8_t* data, uint32_t width, uint32_t height) = 0;
181 virtual Image* createImage(SDL_Surface* surface) = 0;
182 virtual Image* createImage(
const std::string& name, SDL_Surface* surface) = 0;
190 virtual void addImageToArray(uint32_t
id,
const Rect& rec,
float const* st, uint8_t alpha, uint8_t
const* rgb) = 0;
194 virtual void changeRenderInfos(uint16_t elements, int32_t src, int32_t dst,
bool light,
bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc) = 0;
202 virtual void captureScreen(
const std::string& filename, uint32_t width, uint32_t height) = 0;
209 uint32_t getWidth()
const;
210 uint32_t getHeight()
const;
211 uint32_t getScreenWidth()
const {
return getWidth(); }
212 uint32_t getScreenHeight()
const {
return getHeight(); }
213 const Rect& getArea()
const;
233 virtual bool putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
237 virtual void drawLine(
const Point& p1,
const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
241 virtual void drawTriangle(
const Point& p1,
const Point& p2,
const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
245 virtual void drawRectangle(
const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
249 virtual void fillRectangle(
const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
253 virtual void drawQuad(
const Point& p1,
const Point& p2,
const Point& p3,
const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
257 virtual void drawVertex(
const Point& p,
const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
261 virtual void drawLightPrimitive(
const Point& p, uint8_t intensity,
float radius, int32_t subdivisions,
float xstretch,
float ystretch, uint8_t red, uint8_t green, uint8_t blue) = 0;
357 SDL_Surface* m_screen;
358 SDL_Surface* m_target;
359 bool m_compressimages;
360 bool m_useframebuffer;
362 bool m_isalphaoptimized;
363 bool m_iscolorkeyenabled;
364 SDL_Color m_colorkey;
365 ScreenMode m_screenMode;
366 SDL_PixelFormat m_rgba_format;
368 bool m_isbackgroundcolor;
369 SDL_Color m_backgroundcolor;
386 std::stack<ClipInfo> m_clipstack;
390 uint32_t m_frame_start;
391 uint16_t m_framelimit;
virtual void setLighting(float red, float green, float blue)=0
virtual void setClipArea(const Rect &cliparea, bool clear)=0
RenderBackend(const SDL_Color &colorkey)
void setColorKey(const SDL_Color &colorkey)
virtual void changeRenderInfos(uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc)=0
virtual void drawRectangle(const Point &p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
void setBackgroundColor(uint8_t r, uint8_t g, uint8_t b)
virtual const std::string & getName() const =0
virtual void createMainScreen(const ScreenMode &mode, const std::string &title, const std::string &icon)=0
virtual void detachRenderTarget()=0
bool isFrameLimitEnabled() const
bool isFramebufferEnabled() const
virtual void addImageToArray(uint32_t id, const Rect &rec, float const *st, uint8_t alpha, uint8_t const *rgb)=0
void setColorKeyEnabled(bool colorkeyenable)
void setFramebufferEnabled(bool enabled)
virtual void init(const std::string &driver)=0
uint16_t getFrameLimit() const
virtual void clearBackBuffer()=0
virtual void drawVertex(const Point &p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
virtual uint32_t getLightingModel() const =0
virtual void drawTriangle(const Point &p1, const Point &p2, const Point &p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
void resetBackgroundColor()
bool isColorKeyEnabled() const
void pushClipArea(const Rect &cliparea, bool clear=true)
const SDL_Color & getColorKey() const
virtual void startFrame()
void setFrameLimit(uint16_t framelimit)
void setNPOTEnabled(bool enabled)
virtual bool putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
virtual void drawLine(const Point &p1, const Point &p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
void setAlphaOptimizerEnabled(bool enabled)
virtual void changeBlending(int32_t scr, int32_t dst)=0
void setFrameLimitEnabled(bool limited)
virtual void captureScreen(const std::string &filename)=0
SDL_Surface * getRenderTargetSurface()
virtual void attachRenderTarget(ImagePtr &img, bool discard)=0
bool isImageCompressingEnabled() const
virtual void renderVertexArrays()=0
virtual void fillRectangle(const Point &p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
const SDL_PixelFormat & getPixelFormat() const
const Rect & getClipArea() const
virtual void drawLightPrimitive(const Point &p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue)=0
virtual void resetLighting()=0
virtual void resetStencilBuffer(uint8_t buffer)=0
void setImageCompressingEnabled(bool enabled)
bool isNPOTEnabled() const
virtual void setScreenMode(const ScreenMode &mode)=0
const ScreenMode & getCurrentScreenMode() const
virtual void setLightingModel(uint32_t lighting)=0
bool isAlphaOptimizerEnabled() const
virtual void drawQuad(const Point &p1, const Point &p2, const Point &p3, const Point &p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0