123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- /**
- * Copyright (c) 2006-2015 LOVE Development Team
- *
- * This software is provided 'as-is', without any express or implied
- * warranty. In no event will the authors be held liable for any damages
- * arising from the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software
- * in a product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- **/
- #ifndef LOVE_GRAPHICS_GRAPHICS_H
- #define LOVE_GRAPHICS_GRAPHICS_H
- // LOVE
- #include "common/Module.h"
- #include "common/StringMap.h"
- #include "Color.h"
- // C++
- #include <string>
- namespace love
- {
- namespace graphics
- {
- /**
- * Globally sets whether gamma correction is enabled. Ideally this should be set
- * prior to using any Graphics module function.
- **/
- void setGammaCorrect(bool gammacorrect);
- /**
- * Gets whether global gamma correction is enabled.
- **/
- bool isGammaCorrect();
- /**
- * Gamma-corrects a color (converts it from sRGB to linear RGB, if
- * gamma correction is enabled.)
- * The color's components are expected to be in the range of [0, 1].
- **/
- void gammaCorrectColor(Colorf &c);
- /**
- * Un-gamma-corrects a color (converts it from linear RGB to sRGB, if
- * gamma correction is enabled.)
- * The color's components are expected to be in the range of [0, 1].
- **/
- void unGammaCorrectColor(Colorf &c);
- class Graphics : public Module
- {
- public:
- enum DrawMode
- {
- DRAW_LINE,
- DRAW_FILL,
- DRAW_MAX_ENUM
- };
- enum ArcMode
- {
- ARC_OPEN,
- ARC_CLOSED,
- ARC_PIE,
- ARC_MAX_ENUM
- };
- enum BlendMode
- {
- BLEND_ALPHA,
- BLEND_ADD,
- BLEND_SUBTRACT,
- BLEND_MULTIPLY,
- BLEND_LIGHTEN,
- BLEND_DARKEN,
- BLEND_SCREEN,
- BLEND_REPLACE,
- BLEND_MAX_ENUM
- };
- enum BlendAlpha
- {
- BLENDALPHA_MULTIPLY,
- BLENDALPHA_PREMULTIPLIED,
- BLENDALPHA_MAX_ENUM
- };
- enum LineStyle
- {
- LINE_ROUGH,
- LINE_SMOOTH,
- LINE_MAX_ENUM
- };
- enum LineJoin
- {
- LINE_JOIN_NONE,
- LINE_JOIN_MITER,
- LINE_JOIN_BEVEL,
- LINE_JOIN_MAX_ENUM
- };
- enum StencilAction
- {
- STENCIL_REPLACE,
- STENCIL_INCREMENT,
- STENCIL_DECREMENT,
- STENCIL_INCREMENT_WRAP,
- STENCIL_DECREMENT_WRAP,
- STENCIL_INVERT,
- STENCIL_MAX_ENUM
- };
- enum CompareMode
- {
- COMPARE_LESS,
- COMPARE_LEQUAL,
- COMPARE_EQUAL,
- COMPARE_GEQUAL,
- COMPARE_GREATER,
- COMPARE_NOTEQUAL,
- COMPARE_ALWAYS,
- COMPARE_MAX_ENUM
- };
- enum Support
- {
- SUPPORT_MULTI_CANVAS_FORMATS,
- SUPPORT_CLAMP_ZERO,
- SUPPORT_LIGHTEN,
- SUPPORT_MAX_ENUM
- };
- enum Renderer
- {
- RENDERER_OPENGL = 0,
- RENDERER_OPENGLES,
- RENDERER_MAX_ENUM
- };
- enum SystemLimit
- {
- LIMIT_POINT_SIZE,
- LIMIT_TEXTURE_SIZE,
- LIMIT_MULTI_CANVAS,
- LIMIT_CANVAS_MSAA,
- LIMIT_MAX_ENUM
- };
- enum StackType
- {
- STACK_ALL,
- STACK_TRANSFORM,
- STACK_MAX_ENUM
- };
- enum StatType
- {
- STAT_DRAW_CALLS,
- STAT_CANVAS_SWITCHES,
- STAT_CANVASES,
- STAT_IMAGES,
- STAT_FONTS,
- STAT_TEXTURE_MEMORY,
- STAT_MAX_ENUM
- };
- struct RendererInfo
- {
- std::string name;
- std::string version;
- std::string vendor;
- std::string device;
- };
- struct Stats
- {
- int drawCalls;
- int canvasSwitches;
- int canvases;
- int images;
- int fonts;
- size_t textureMemory;
- };
- struct ColorMask
- {
- bool r, g, b, a;
- ColorMask()
- : r(true), g(true), b(true), a(true)
- {}
- ColorMask(bool _r, bool _g, bool _b, bool _a)
- : r(_r), g(_g), b(_b), a(_a)
- {}
- bool operator == (const ColorMask &m) const
- {
- return r == m.r && g == m.g && b == m.b && a == m.a;
- }
- bool operator != (const ColorMask &m) const
- {
- return !(operator == (m));
- }
- };
- struct ScissorRect
- {
- int x, y;
- int w, h;
- bool operator == (const ScissorRect &rhs) const
- {
- return x == rhs.x && y == rhs.y && w == rhs.w && h == rhs.h;
- }
- };
- virtual ~Graphics();
- // Implements Module.
- virtual ModuleType getModuleType() const { return M_GRAPHICS; }
- /**
- * Sets the current graphics display viewport dimensions.
- **/
- virtual void setViewportSize(int width, int height) = 0;
- /**
- * Sets the current graphics display viewport and initializes the renderer.
- * @param width The viewport width.
- * @param height The viewport height.
- **/
- virtual bool setMode(int width, int height) = 0;
- /**
- * Un-sets the current graphics display mode (uninitializing objects if
- * necessary.)
- **/
- virtual void unSetMode() = 0;
- /**
- * Sets whether the module is active (internal use only.)
- **/
- virtual void setActive(bool active) = 0;
- /**
- * Gets whether the module is active. Graphics module methods are only
- * guaranteed to work when it is active. Calling them otherwise may cause
- * the program to crash (or worse.)
- * Normally the module will always be active as long as a window exists, it
- * may be different on some platforms (especially mobile ones.)
- **/
- virtual bool isActive() const = 0;
- static bool getConstant(const char *in, DrawMode &out);
- static bool getConstant(DrawMode in, const char *&out);
- static bool getConstant(const char *in, ArcMode &out);
- static bool getConstant(ArcMode in, const char *&out);
- static bool getConstant(const char *in, BlendMode &out);
- static bool getConstant(BlendMode in, const char *&out);
- static bool getConstant(const char *in, BlendAlpha &out);
- static bool getConstant(BlendAlpha in, const char *&out);
- static bool getConstant(const char *in, LineStyle &out);
- static bool getConstant(LineStyle in, const char *&out);
- static bool getConstant(const char *in, LineJoin &out);
- static bool getConstant(LineJoin in, const char *&out);
- static bool getConstant(const char *in, StencilAction &out);
- static bool getConstant(StencilAction in, const char *&out);
- static bool getConstant(const char *in, CompareMode &out);
- static bool getConstant(CompareMode in, const char *&out);
- static bool getConstant(const char *in, Support &out);
- static bool getConstant(Support in, const char *&out);
- static bool getConstant(const char *in, SystemLimit &out);
- static bool getConstant(SystemLimit in, const char *&out);
- static bool getConstant(const char *in, StackType &out);
- static bool getConstant(StackType in, const char *&out);
- static bool getConstant(const char *in, StatType &out);
- static bool getConstant(StatType in, const char *&out);
- private:
- static StringMap<DrawMode, DRAW_MAX_ENUM>::Entry drawModeEntries[];
- static StringMap<DrawMode, DRAW_MAX_ENUM> drawModes;
- static StringMap<ArcMode, ARC_MAX_ENUM>::Entry arcModeEntries[];
- static StringMap<ArcMode, ARC_MAX_ENUM> arcModes;
- static StringMap<BlendMode, BLEND_MAX_ENUM>::Entry blendModeEntries[];
- static StringMap<BlendMode, BLEND_MAX_ENUM> blendModes;
- static StringMap<BlendAlpha, BLENDALPHA_MAX_ENUM>::Entry blendAlphaEntries[];
- static StringMap<BlendAlpha, BLENDALPHA_MAX_ENUM> blendAlphaModes;
- static StringMap<LineStyle, LINE_MAX_ENUM>::Entry lineStyleEntries[];
- static StringMap<LineStyle, LINE_MAX_ENUM> lineStyles;
- static StringMap<LineJoin, LINE_JOIN_MAX_ENUM>::Entry lineJoinEntries[];
- static StringMap<LineJoin, LINE_JOIN_MAX_ENUM> lineJoins;
- static StringMap<StencilAction, STENCIL_MAX_ENUM>::Entry stencilActionEntries[];
- static StringMap<StencilAction, STENCIL_MAX_ENUM> stencilActions;
- static StringMap<CompareMode, COMPARE_MAX_ENUM>::Entry compareModeEntries[];
- static StringMap<CompareMode, COMPARE_MAX_ENUM> compareModes;
- static StringMap<Support, SUPPORT_MAX_ENUM>::Entry supportEntries[];
- static StringMap<Support, SUPPORT_MAX_ENUM> support;
- static StringMap<SystemLimit, LIMIT_MAX_ENUM>::Entry systemLimitEntries[];
- static StringMap<SystemLimit, LIMIT_MAX_ENUM> systemLimits;
- static StringMap<StackType, STACK_MAX_ENUM>::Entry stackTypeEntries[];
- static StringMap<StackType, STACK_MAX_ENUM> stackTypes;
- static StringMap<StatType, STAT_MAX_ENUM>::Entry statTypeEntries[];
- static StringMap<StatType, STAT_MAX_ENUM> statTypes;
- }; // Graphics
- } // graphics
- } // love
- #endif // LOVE_GRAPHICS_GRAPHICS_H
|