[Super-tux-commit] supertux/lib/video drawing_context.cpp,1.10,1.11 drawing_context.h,1.10,1.11 surf
Brought to you by:
wkendrick
From: Matze B. <mat...@us...> - 2004-11-23 02:01:12
|
Update of /cvsroot/super-tux/supertux/lib/video In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25154/lib/video Modified Files: drawing_context.cpp drawing_context.h surface.cpp Log Message: fix some more timings and the long standing gradient software bug (which was function argument overriding class field) Index: drawing_context.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/lib/video/drawing_context.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- drawing_context.cpp 20 Nov 2004 22:14:36 -0000 1.10 +++ drawing_context.cpp 23 Nov 2004 02:00:32 -0000 1.11 @@ -31,9 +31,6 @@ DrawingContext::DrawingContext() { - transform.draw_effect = NONE_EFFECT; - transform.zoom = 1; - transform.alpha = 255; } DrawingContext::~DrawingContext() @@ -49,18 +46,17 @@ DrawingRequest request; request.type = SURFACE; - request.layer = layer; - request.request_data = const_cast<Surface*> (surface); request.pos = transform.apply(position); if(request.pos.x >= screen->w || request.pos.y >= screen->h || request.pos.x + surface->w < 0 || request.pos.y + surface->h < 0) return; - - request.drawing_effect = drawing_effect; - request.drawing_effect = transform.draw_effect | drawing_effect; + + request.layer = layer; + request.drawing_effect = transform.drawing_effect | drawing_effect; request.zoom = transform.zoom; request.alpha = transform.alpha; + request.request_data = const_cast<Surface*> (surface); drawingrequests.push_back(request); } @@ -74,9 +70,9 @@ DrawingRequest request; request.type = SURFACE_PART; - request.layer = layer; request.pos = transform.apply(dest); - request.drawing_effect = drawing_effect; + request.layer = layer; + request.drawing_effect = transform.drawing_effect | drawing_effect; request.alpha = transform.alpha; SurfacePartRequest* surfacepartrequest = new SurfacePartRequest(); @@ -96,9 +92,10 @@ DrawingRequest request; request.type = TEXT; - request.layer = layer; request.pos = transform.apply(position); - request.drawing_effect = drawing_effect; + request.layer = layer; + request.drawing_effect = transform.drawing_effect | drawing_effect; + request.zoom = transform.zoom; request.alpha = transform.alpha; TextRequest* textrequest = new TextRequest; @@ -124,8 +121,12 @@ DrawingRequest request; request.type = GRADIENT; - request.layer = layer; request.pos = Vector(0,0); + request.layer = layer; + + request.drawing_effect = transform.drawing_effect; + request.zoom = transform.zoom; + request.alpha = transform.alpha; GradientRequest* gradientrequest = new GradientRequest; gradientrequest->top = top; @@ -142,8 +143,12 @@ DrawingRequest request; request.type = FILLRECT; - request.layer = layer; request.pos = transform.apply(topleft); + request.layer = layer; + + request.drawing_effect = transform.drawing_effect; + request.zoom = transform.zoom; + request.alpha = transform.alpha; FillRectRequest* fillrectrequest = new FillRectRequest; fillrectrequest->size = size; @@ -360,7 +365,7 @@ void DrawingContext::set_drawing_effect(int effect) { - transform.draw_effect = effect; + transform.drawing_effect = effect; } void Index: drawing_context.h =================================================================== RCS file: /cvsroot/super-tux/supertux/lib/video/drawing_context.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- drawing_context.h 24 Sep 2004 18:13:27 -0000 1.10 +++ drawing_context.h 23 Nov 2004 02:00:32 -0000 1.11 @@ -86,9 +86,9 @@ void do_drawing(); const Vector& get_translation() const - { return transform.translation; } + { return transform.translation; } Uint32 get_drawing_effect() const - { return transform.draw_effect; } + { return transform.drawing_effect; } void set_translation(const Vector& newtranslation) { transform.translation = newtranslation; } @@ -105,19 +105,22 @@ private: class Transform - { - public: - Vector translation; // only translation for now... + { + public: + Vector translation; + Uint32 drawing_effect; + float zoom; + int alpha; - Vector apply(const Vector& v) const - { - return v - translation; - } + Transform() + : drawing_effect(NONE_EFFECT), zoom(1), alpha(255) + { } - Uint32 draw_effect; - float zoom; - int alpha; - }; + Vector apply(const Vector& v) const + { + return v - translation; + } + }; /// the transform stack std::vector<Transform> transformstack; @@ -156,14 +159,14 @@ struct DrawingRequest { + RequestType type; + Vector pos; + int layer; Uint32 drawing_effect; float zoom; int alpha; - RequestType type; - Vector pos; - void* request_data; bool operator<(const DrawingRequest& other) const Index: surface.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/lib/video/surface.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- surface.cpp 22 Nov 2004 23:47:49 -0000 1.15 +++ surface.cpp 23 Nov 2004 02:00:32 -0000 1.16 @@ -58,12 +58,14 @@ : type(LOAD), surface(0), file(file_), use_alpha(use_alpha_) {} -SurfaceData::SurfaceData(const std::string& file_, int x_, int y_, int w_, int h_, bool use_alpha_) +SurfaceData::SurfaceData(const std::string& file_, int x_, int y_, + int w_, int h_, bool use_alpha_) : type(LOAD_PART), surface(0), file(file_), use_alpha(use_alpha_), x(x_), y(y_), w(w_), h(h_) {} -SurfaceData::SurfaceData(Color top_gradient_, Color bottom_gradient_, int w_, int h_) +SurfaceData::SurfaceData(Color top_gradient_, Color bottom_gradient_, + int w_, int h_) : type(GRADIENT), surface(0), use_alpha(false), w(w_), h(h_) { top_gradient = top_gradient_; @@ -205,12 +207,12 @@ void Surface::apply_filter(int filter, Color color) { -impl->apply_filter(filter, color); + impl->apply_filter(filter, color); -SurfaceData::Filter apply_filter; -apply_filter.type = filter; -apply_filter.color = color; -data.applied_filters.push_back(apply_filter); + SurfaceData::Filter apply_filter; + apply_filter.type = filter; + apply_filter.color = color; + data.applied_filters.push_back(apply_filter); } Surface::~Surface() @@ -431,22 +433,18 @@ SDL_Surface* sdl_surface_from_gradient(Color top, Color bottom, int w, int h) { - SDL_Surface* sdl_surface; - - sdl_surface = SDL_CreateRGBSurface(screen->flags, w, h, + SDL_Surface* sdl_surface + = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, 0); - if(sdl_surface == NULL) + if(sdl_surface == 0) Termination::abort("Cannot create surface for the gradient", "SURFACE"); - if(top == bottom) - { + if(top == bottom) { SDL_FillRect(sdl_surface, NULL, SDL_MapRGB(sdl_surface->format, top.red, top.green, top.blue)); - } - else - { + } else { float redstep = (float(bottom.red)-float(top.red)) / float(h); float greenstep = (float(bottom.green)-float(top.green)) / float(h); float bluestep = (float(bottom.blue) - float(top.blue)) / float(h); @@ -455,15 +453,14 @@ rect.x = 0; rect.w = w; rect.h = 1; - for(float y = 0; y < h; y++) - { + for(float y = 0; y < h; y++) { rect.y = (int)y; SDL_FillRect(sdl_surface, &rect, SDL_MapRGB(sdl_surface->format, - int(float(top.red) + redstep * y), - int(float(top.green) + greenstep * y), - int(float(top.blue) + bluestep * y))); - } + int(float(top.red) + redstep * y), + int(float(top.green) + greenstep * y), + int(float(top.blue) + bluestep * y))); } + } return sdl_surface; } @@ -516,23 +513,23 @@ h = sdl_surface->h; } -SurfaceOpenGL::SurfaceOpenGL(const std::string& file_, int x_, int y_, int w_, int h_, bool use_alpha_) +SurfaceOpenGL::SurfaceOpenGL(const std::string& file_, int x_, int y_, + int w_, int h_, bool use_alpha_) { sdl_surface = sdl_surface_part_from_file(file_,x_,y_,w_,h_,use_alpha_); create_gl(sdl_surface, &gl_texture); - w = sdl_surface->w; - h = sdl_surface->h; + h = sdl_surface->h; } -SurfaceOpenGL::SurfaceOpenGL(Color top_gradient, Color bottom_gradient, int w, int h) +SurfaceOpenGL::SurfaceOpenGL(Color top_gradient, Color bottom_gradient, + int _w, int _h) { - sdl_surface = sdl_surface_from_gradient(top_gradient, bottom_gradient, w, h); + sdl_surface = sdl_surface_from_gradient(top_gradient, bottom_gradient,_w,_h); create_gl(sdl_surface, &gl_texture); - w = sdl_surface->w; - h = sdl_surface->h; + h = sdl_surface->h; } SurfaceOpenGL::~SurfaceOpenGL() @@ -892,18 +889,20 @@ h = sdl_surface->h; } -SurfaceSDL::SurfaceSDL(const std::string& file, int x, int y, int w, int h, bool use_alpha) +SurfaceSDL::SurfaceSDL(const std::string& file, int x, int y, int _w, int _h, + bool use_alpha) { - sdl_surface = sdl_surface_part_from_file(file, x, y, w, h, use_alpha); + sdl_surface = sdl_surface_part_from_file(file, x, y, _w, _h, use_alpha); w = sdl_surface->w; - h = sdl_surface->h; + h = sdl_surface->h; } -SurfaceSDL::SurfaceSDL(Color top_gradient, Color bottom_gradient, int w, int h) +SurfaceSDL::SurfaceSDL(Color top_gradient, Color bottom_gradient, + int _w, int _h) { - sdl_surface = sdl_surface_from_gradient(top_gradient, bottom_gradient, w, h); + sdl_surface = sdl_surface_from_gradient(top_gradient, bottom_gradient,_w,_h); w = sdl_surface->w; - h = sdl_surface->h; + h = sdl_surface->h; } int |