X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Fdrawing_context.hpp;h=c8f90127e596342665034b2c0e4dc38893bab941;hb=e7a12ed844f040d270e50ce25f74de5f017c1157;hp=de882a739eb6b3632472d4ef4ceae942e33631bc;hpb=7b74666be6929322c6a603a6edd0131378f4c144;p=supertux.git diff --git a/src/video/drawing_context.hpp b/src/video/drawing_context.hpp index de882a739..c8f90127e 100644 --- a/src/video/drawing_context.hpp +++ b/src/video/drawing_context.hpp @@ -21,53 +21,25 @@ #include #include -#include +#include -#include -#include #include -#include +#include + +#include "glutil.hpp" #include "obstack/obstack.h" #include "math/vector.hpp" #include "math/rect.hpp" -#include "surface.hpp" +#include "drawing_request.hpp" #include "font.hpp" #include "color.hpp" class Surface; class Texture; struct DrawingRequest; - -// 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_HUD = 500, - LAYER_GUI = 600 -}; - -class Blend -{ -public: - GLenum sfactor; - GLenum dfactor; - - Blend() - : sfactor(GL_SRC_ALPHA), dfactor(GL_ONE_MINUS_SRC_ALPHA) - {} - - Blend(GLenum s, GLenum d) - : sfactor(s), dfactor(d) - {} -}; +class Renderer; +class Lightmap; /** * This class provides functions for drawing things on screen. It also @@ -79,6 +51,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); @@ -129,15 +103,20 @@ public: /// on next update, set color to lightmap's color at position void get_light(const Vector& position, Color* color ); - enum Target { - NORMAL, LIGHTMAP - }; + 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 { @@ -156,6 +135,9 @@ private: } }; + Renderer *renderer; + Lightmap *lightmap; + /// the transform stack std::vector transformstack; /// the currently active transform @@ -166,14 +148,7 @@ private: typedef std::vector DrawingRequests; - void handle_drawing_requests(DrawingRequests& requests) const; - void draw_surface_part(const DrawingRequest& request) const; - void draw_text(const DrawingRequest& request) const; - void draw_text_center(const DrawingRequest& request) const; - void draw_gradient(const DrawingRequest& request) const; - void draw_filled_rect(const DrawingRequest& request) const; - void draw_lightmap(const DrawingRequest& request) const; - void get_light(const DrawingRequest& request) const; + void handle_drawing_requests(DrawingRequests& requests); DrawingRequests drawing_requests; DrawingRequests lightmap_requests; @@ -181,15 +156,13 @@ private: 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