X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Fdrawing_context.hpp;h=28b15fc72bc04a8310f88c5b59ccd4a32ab567d0;hb=99cf62c2d44b4555e9761f1c8f1b10cf880c33fb;hp=df312256d12de341fcea650b9ddcaa5225e43764;hpb=a113d3bd1feddd510e3b2852b0d42522735eee40;p=supertux.git diff --git a/src/video/drawing_context.hpp b/src/video/drawing_context.hpp index df312256d..28b15fc72 100644 --- a/src/video/drawing_context.hpp +++ b/src/video/drawing_context.hpp @@ -16,56 +16,34 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - #ifndef SUPERTUX_DRAWINGCONTEXT_H #define SUPERTUX_DRAWINGCONTEXT_H #include #include -#include - -#include -#include -#include #include -#include "math/vector.hpp" -#include "math/rect.hpp" -#include "surface.hpp" +//#include + +//#include "obstack/obstack.h" +//#include "math/vector.hpp" +//#include "math/rect.hpp" +#include "drawing_request.hpp" #include "font.hpp" #include "color.hpp" -class Surface; -class Texture; - -// some constants for predefined layer values -enum { - LAYER_BACKGROUND0 = -300, - LAYER_BACKGROUND1 = -200, - LAYER_BACKGROUNDTILES = -100, - LAYER_TILES = 0, - LAYER_OBJECTS = 50, - LAYER_FLOATINGOBJECTS = 150, - LAYER_FOREGROUNDTILES = 200, - LAYER_FOREGROUND0 = 300, - LAYER_FOREGROUND1 = 400, - LAYER_GUI = 500 -}; - -class Blend -{ -public: - GLenum sfactor; - GLenum dfactor; +#include +#include +#include - Blend() - : sfactor(GL_SRC_ALPHA), dfactor(GL_ONE_MINUS_SRC_ALPHA) - {} +class Vector; +class Rect; - Blend(GLenum s, GLenum d) - : sfactor(s), dfactor(d) - {} -}; +class Surface; +/*class Texture; +struct DrawingRequest; +class Renderer; +class Lightmap;*/ /** * This class provides functions for drawing things on screen. It also @@ -77,6 +55,8 @@ public: DrawingContext(); ~DrawingContext(); + void init_renderer(); + /// Adds a drawing request for a surface into the request list. void draw_surface(const Surface* surface, const Vector& position, int layer); @@ -124,13 +104,23 @@ public: /// return currently set alpha float get_alpha() const; - enum Target { - NORMAL, LIGHTMAP - }; + /// on next update, set color to lightmap's color at position + void get_light(const Vector& position, Color* color ); + + typedef ::Target Target; + static const Target NORMAL = ::NORMAL; + static const Target LIGHTMAP = ::LIGHTMAP; void push_target(); void pop_target(); void set_target(Target target); + void set_ambient_color( Color new_color ); + + /** + * requests that a screenshot be taken after the next frame has been rendered + */ + void take_screenshot(); + private: class Transform { @@ -149,6 +139,16 @@ private: } }; + Unison::Video::Surface lightmap; + std::vector > get_light_requests; + + std::map normal_list; + std::map lightmap_list; + std::map *draw_target; + + //Renderer *renderer; + //Lightmap *lightmap; + /// the transform stack std::vector transformstack; /// the currently active transform @@ -157,81 +157,24 @@ private: std::vector blend_stack; Blend blend_mode; - enum RequestType - { - SURFACE, SURFACE_PART, TEXT, GRADIENT, FILLRECT - }; - - struct SurfacePartRequest - { - const Surface* surface; - Vector source, size; - }; - - struct TextRequest - { - const Font* font; - std::string text; - FontAlignment alignment; - }; - - struct GradientRequest - { - Color top, bottom; - Vector size; - }; - - struct FillRectRequest - { - Color color; - Vector size; - }; - - struct DrawingRequest - { - RequestType type; - Vector pos; - - int layer; - DrawingEffect drawing_effect; - float alpha; - Blend blend; - float angle; - Color color; - - void* request_data; - - DrawingRequest() - : angle(0.0f), - color(1.0f, 1.0f, 1.0f, 1.0f) - {} - - bool operator<(const DrawingRequest& other) const - { - return layer < other.layer; - } - }; - - typedef std::vector DrawingRequests; + /*typedef std::vector DrawingRequests; void handle_drawing_requests(DrawingRequests& requests); - void draw_surface_part(DrawingRequest& request); - void draw_text(DrawingRequest& request); - void draw_text_center(DrawingRequest& request); - void draw_gradient(DrawingRequest& request); - void draw_filled_rect(DrawingRequest& request); DrawingRequests drawing_requests; DrawingRequests lightmap_requests; - DrawingRequests* requests; + DrawingRequests* requests;*/ + Color ambient_color; - SDL_Surface* screen; Target target; std::vector target_stack; - Texture* lightmap; - int lightmap_width, lightmap_height; - float lightmap_uv_right, lightmap_uv_bottom; + + /* obstack holding the memory of the drawing requests */ + //struct obstack obst; + + bool screenshot_requested; /**< true if a screenshot should be taken after the next frame has been rendered */ }; #endif +