X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=contrib%2Fsupertux-nogl.diff;h=f67baae10840b1a70601d07e0ae5c48ab6a3d20b;hb=ad961cb86ef28feed73e1f524fda692ed58d4e5e;hp=a9c96b591d71bb8f829234b5339f8b31db683c12;hpb=ea9f23501f89b36b9ba02484c7ebd08f9d749aba;p=supertux.git diff --git a/contrib/supertux-nogl.diff b/contrib/supertux-nogl.diff index a9c96b591..f67baae10 100644 --- a/contrib/supertux-nogl.diff +++ b/contrib/supertux-nogl.diff @@ -32,7 +32,7 @@ # # patch -p1 < contrib/supertux-nogl.diff # -# This patch works for revision 3321. It may break for later revisions. +# This patch works for revision 4186. It may break for later revisions. # # ----------------------------------------------------------------------------- diff -Naur supertux/INSTALL supertux-nogl/INSTALL @@ -106,7 +106,7 @@ diff -Naur supertux/configure.ac supertux-nogl/configure.ac AC_CONFIG_SRCDIR([src/main.cpp]) AC_CONFIG_AUX_DIR([mk/autoconf]) AC_CANONICAL_TARGET -@@ -112,6 +105,14 @@ +@@ -120,6 +120,14 @@ [AC_MSG_ERROR([Please install SDLImage >= 1.2.1])], [$SDL_CFLAGS], [$SDL_LIBS]) @@ -121,7 +121,7 @@ diff -Naur supertux/configure.ac supertux-nogl/configure.ac NP_FINDLIB([PHYSFS], [physfs], [physfs >= 1.0.0], NP_LANG_PROGRAM([ #include -@@ -131,11 +132,6 @@ +@@ -139,11 +147,6 @@ [AC_MSG_ERROR([Please intall OpenAL])], [], []) @@ -136,14 +136,14 @@ diff -Naur supertux/configure.ac supertux-nogl/configure.ac diff -Naur supertux/src/Jamfile supertux-nogl/src/Jamfile --- supertux/src/Jamfile 2006-03-03 20:34:49.000000000 +0100 +++ supertux-nogl/src/Jamfile 2006-04-07 04:11:50.000000000 +0200 -@@ -24,7 +24,7 @@ - Application supertux : $(sources) $(wrapper_objects) ; +@@ -26,7 +26,7 @@ + Application supertux : $(sources) $(wrapper_objects) : linkerfile ; C++Flags supertux : -DAPPDATADIR='\"$(appdatadir)\"' ; LinkWith supertux : squirrel ; -ExternalLibs supertux : SDL SDLIMAGE GL OPENAL VORBIS VORBISFILE OGG ICONV PHYSFS BINRELOC ; +ExternalLibs supertux : SDL SDLIMAGE SDLGFX OPENAL VORBIS VORBISFILE OGG ICONV PHYSFS BINRELOC ; Help supertux : "Build the supertux executable" ; - IncludeDir supertux : squirrel/include ; + IncludeDir supertux : squirrel/include squirrel ; diff -Naur supertux/src/main.cpp supertux-nogl/src/main.cpp --- supertux/src/main.cpp 2006-04-07 03:32:14.000000000 +0200 @@ -156,16 +156,16 @@ diff -Naur supertux/src/main.cpp supertux-nogl/src/main.cpp #include "gameconfig.hpp" #include "resources.hpp" -@@ -317,7 +275,7 @@ +@@ -308,7 +307,7 @@ SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); - + - int flags = SDL_OPENGL; + int flags = SDL_SWSURFACE; if(config->use_fullscreen) flags |= SDL_FULLSCREEN; int width = config->screenwidth; -@@ -347,24 +305,6 @@ +@@ -338,24 +337,6 @@ } #endif @@ -190,10 +190,10 @@ diff -Naur supertux/src/main.cpp supertux-nogl/src/main.cpp if(texture_manager != NULL) texture_manager->reload_textures(); else -diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawing_context.cpp ---- supertux/src/video/drawing_context.cpp 2006-03-31 04:18:01.000000000 +0200 -+++ supertux-nogl/src/video/drawing_context.cpp 2006-04-07 04:11:49.000000000 +0200 -@@ -22,7 +22,6 @@ +diff -aur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawing_context.cpp +--- supertux/src/video/drawing_context.cpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/drawing_context.cpp 2006-07-03 02:00:29.000000000 +0200 +@@ -23,7 +23,6 @@ #include #include #include @@ -201,7 +201,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin #include "drawing_context.hpp" #include "surface.hpp" -@@ -48,30 +47,20 @@ +@@ -49,24 +48,12 @@ { screen = SDL_GetVideoSurface(); @@ -227,15 +227,16 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin } void - DrawingContext::draw_surface(const Surface* surface, const Vector& position, - int layer) +@@ -74,6 +61,8 @@ + float angle, const Color& color, const Blend& blend, + int layer) { + if(target != NORMAL) return; + assert(surface != 0); - + DrawingRequest request; -@@ -96,6 +85,8 @@ +@@ -109,6 +98,8 @@ DrawingContext::draw_surface_part(const Surface* surface, const Vector& source, const Vector& size, const Vector& dest, int layer) { @@ -244,7 +245,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin assert(surface != 0); DrawingRequest request; -@@ -135,6 +126,8 @@ +@@ -148,6 +139,8 @@ DrawingContext::draw_text(const Font* font, const std::string& text, const Vector& position, FontAlignment alignment, int layer) { @@ -253,7 +254,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin DrawingRequest request; request.type = TEXT; -@@ -156,6 +149,8 @@ +@@ -169,6 +162,8 @@ DrawingContext::draw_center_text(const Font* font, const std::string& text, const Vector& position, int layer) { @@ -262,7 +263,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin draw_text(font, text, Vector(position.x + SCREEN_WIDTH/2, position.y), CENTER_ALLIGN, layer); } -@@ -163,6 +158,8 @@ +@@ -176,6 +171,8 @@ void DrawingContext::draw_gradient(const Color& top, const Color& bottom, int layer) { @@ -271,7 +272,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin DrawingRequest request; request.type = GRADIENT; -@@ -184,6 +181,8 @@ +@@ -197,6 +194,8 @@ DrawingContext::draw_filled_rect(const Vector& topleft, const Vector& size, const Color& color, int layer) { @@ -280,7 +281,64 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin DrawingRequest request; request.type = FILLRECT; -@@ -217,23 +216,55 @@ +@@ -219,6 +218,8 @@ + DrawingContext::draw_filled_rect(const Rect& rect, const Color& color, + int layer) + { ++ if(target != NORMAL) return; ++ + DrawingRequest request; + + request.type = FILLRECT; +@@ -238,39 +239,20 @@ + } + + void +-DrawingContext::get_light(const Vector& position, Color* color) ++DrawingContext::get_light(const Vector& , Color* color) + { +- if( ambient_color.red == 1.0f && ambient_color.green == 1.0f +- && ambient_color.blue == 1.0f ) { +- *color = Color( 1.0f, 1.0f, 1.0f); +- return; ++ static int i = 0; ++ i += 1; i &= 0xFFFF; ++ if (i & 0x8000) { ++ *color = Color(0.0f, 0.0f, 0.0f); ++ } else { ++ *color = Color(1.0f, 1.0f, 1.0f); + } +- DrawingRequest request; +- request.type = GETLIGHT; +- request.pos = transform.apply(position); +- request.layer = LAYER_GUI; //make sure all get_light requests are handled last. +- +- GetLightRequest* getlightrequest = new GetLightRequest; +- getlightrequest->color_ptr = color; +- request.request_data = getlightrequest; +- lightmap_requests.push_back(request); + } + + void +-DrawingContext::get_light(DrawingRequest& request) ++DrawingContext::get_light(DrawingRequest& ) + { +- GetLightRequest* getlightrequest = (GetLightRequest*) request.request_data; +- +- float pixels[3]; +- for( int i = 0; i<3; i++) +- pixels[i] = 0.0f; //set to black +- +- //TODO: hacky. Make coordinate conversion more generic +- glReadPixels((GLint) request.pos.x / 4, 600-(GLint)request.pos.y / 4, 1, 1, GL_RGB, GL_FLOAT, pixels); +- *(getlightrequest->color_ptr) = Color( pixels[0], pixels[1], pixels[2]); +- //printf("get_light %f/%f r%f g%f b%f\n", request.pos.x, request.pos.y, pixels[0], pixels[1], pixels[2]); +- +- delete getlightrequest; + } + + void +@@ -288,6 +264,45 @@ delete surfacepartrequest; } @@ -326,10 +384,10 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin void DrawingContext::draw_gradient(DrawingRequest& request) { - GradientRequest* gradientrequest = (GradientRequest*) request.request_data; +@@ -295,16 +310,9 @@ const Color& top = gradientrequest->top; const Color& bottom = gradientrequest->bottom; -- + - glDisable(GL_TEXTURE_2D); - glBegin(GL_QUADS); - glColor4f(top.red, top.green, top.blue, top.alpha); @@ -340,21 +398,24 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin - glVertex2f(0, SCREEN_HEIGHT); - glEnd(); - glEnable(GL_TEXTURE_2D); -+ + int width = 800; + int height = 600; + for(float y = 0; y < height; y += 2) ::fillrect(screen, 0, (int)y, width, 2, (int)(((float)(top.red-bottom.red)/(0-height)) * y + top.red), (int)(((float)(top.green-bottom.green)/(0-height)) * y + top.green), (int)(((float)(top.blue-bottom.blue)/(0-height)) * y + top.blue), 255); delete gradientrequest; } -@@ -259,17 +290,12 @@ +@@ -330,47 +338,19 @@ float w = fillrectrequest->size.x; float h = fillrectrequest->size.y; - glDisable(GL_TEXTURE_2D); - glColor4f(fillrectrequest->color.red, fillrectrequest->color.green, - fillrectrequest->color.blue, fillrectrequest->color.alpha); -- ++ int r = static_cast(fillrectrequest->color.red); ++ int g = static_cast(fillrectrequest->color.green); ++ int b = static_cast(fillrectrequest->color.blue); ++ int a = static_cast(fillrectrequest->color.alpha); + - glBegin(GL_QUADS); - glVertex2f(x, y); - glVertex2f(x+w, y); @@ -362,76 +423,86 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin - glVertex2f(x, y+h); - glEnd(); - glEnable(GL_TEXTURE_2D); -+ int r = static_cast(fillrectrequest->color.red); -+ int g = static_cast(fillrectrequest->color.green); -+ int b = static_cast(fillrectrequest->color.blue); -+ int a = static_cast(fillrectrequest->color.alpha); -+ + ::fillrect(screen, x, y, w, h, r, g, b, a); delete fillrectrequest; } -@@ -284,66 +310,10 @@ + + void +-DrawingContext::draw_lightmap(DrawingRequest& request) ++DrawingContext::draw_lightmap(DrawingRequest& ) + { +- const Texture* texture = reinterpret_cast (request.request_data); +- +- // multiple the lightmap with the framebuffer +- glBlendFunc(GL_DST_COLOR, GL_ZERO); +- +- glBindTexture(GL_TEXTURE_2D, texture->get_handle()); +- glBegin(GL_QUADS); +- +- glTexCoord2f(0, lightmap_uv_bottom); +- glVertex2f(0, 0); +- +- glTexCoord2f(lightmap_uv_right, lightmap_uv_bottom); +- glVertex2f(SCREEN_WIDTH, 0); +- +- glTexCoord2f(lightmap_uv_right, 0); +- glVertex2f(SCREEN_WIDTH, SCREEN_HEIGHT); +- +- glTexCoord2f(0, 0); +- glVertex2f(0, SCREEN_HEIGHT); +- +- glEnd(); +- +- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + void +@@ -383,50 +363,9 @@ transformstack.clear(); target_stack.clear(); -- bool use_lightmap = lightmap_requests.size() != 0; -- +- //Use Lightmap if ambient color is not white. +- bool use_lightmap = ( ambient_color.red != 1.0f || ambient_color.green != 1.0f || +- ambient_color.blue != 1.0f ); +- - // PART1: create lightmap - if(use_lightmap) { - glViewport(0, screen->h - lightmap_height, lightmap_width, lightmap_height); - glMatrixMode(GL_PROJECTION); -- glLoadIdentity(); +- glLoadIdentity(); - glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - -- //glClearColor(1.0f, 1.0f, 1.0f, 1.0f); -- glClearColor(0, 0, 0, 1); +- glClearColor( ambient_color.red, ambient_color.green, ambient_color.blue, 1 ); - glClear(GL_COLOR_BUFFER_BIT); - handle_drawing_requests(lightmap_requests); - lightmap_requests.clear(); -- +- - glDisable(GL_BLEND); - glBindTexture(GL_TEXTURE_2D, lightmap->get_handle()); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, screen->h - lightmap_height, lightmap_width, lightmap_height); - - glViewport(0, 0, screen->w, screen->h); - glMatrixMode(GL_PROJECTION); -- glLoadIdentity(); +- glLoadIdentity(); - glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1.0, 1.0); -- glMatrixMode(GL_MODELVIEW); +- glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glEnable(GL_BLEND); +- +- // add a lightmap drawing request into the queue +- DrawingRequest request; +- request.type = LIGHTMAPREQUEST; +- request.layer = LAYER_HUD - 1; +- request.request_data = lightmap; +- requests->push_back(request); - } - - //glClear(GL_COLOR_BUFFER_BIT); handle_drawing_requests(drawing_requests); drawing_requests.clear(); - -- if(use_lightmap) { -- glBlendFunc(GL_SRC_ALPHA, GL_ONE); -- -- glBindTexture(GL_TEXTURE_2D, lightmap->get_handle()); -- glBegin(GL_QUADS); -- -- glTexCoord2f(0, lightmap_uv_bottom); -- glVertex2f(0, 0); -- -- glTexCoord2f(lightmap_uv_right, lightmap_uv_bottom); -- glVertex2f(SCREEN_WIDTH, 0); -- -- glTexCoord2f(lightmap_uv_right, 0); -- glVertex2f(SCREEN_WIDTH, SCREEN_HEIGHT); -- -- glTexCoord2f(0, 0); -- glVertex2f(0, SCREEN_HEIGHT); -- -- glEnd(); -- -- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -- } -- - assert_gl("drawing"); - - SDL_GL_SwapBuffers(); @@ -439,7 +510,7 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin } void -@@ -432,9 +402,5 @@ +@@ -524,10 +463,6 @@ DrawingContext::set_target(Target target) { this->target = target; @@ -449,10 +520,11 @@ diff -Naur supertux/src/video/drawing_context.cpp supertux-nogl/src/video/drawin - requests = &drawing_requests; } -diff -Naur supertux/src/video/drawing_context.hpp supertux-nogl/src/video/drawing_context.hpp ---- supertux/src/video/drawing_context.hpp 2006-03-03 20:34:27.000000000 +0100 -+++ supertux-nogl/src/video/drawing_context.hpp 2006-04-07 04:11:49.000000000 +0200 -@@ -23,7 +23,6 @@ + void +diff -aur supertux/src/video/drawing_context.hpp supertux-nogl/src/video/drawing_context.hpp +--- supertux/src/video/drawing_context.hpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/drawing_context.hpp 2006-07-03 02:00:29.000000000 +0200 +@@ -24,7 +24,6 @@ #include #include @@ -460,7 +532,7 @@ diff -Naur supertux/src/video/drawing_context.hpp supertux-nogl/src/video/drawin #include #include #include -@@ -33,8 +32,9 @@ +@@ -35,8 +34,9 @@ #include "font.hpp" #include "color.hpp" @@ -471,13 +543,15 @@ diff -Naur supertux/src/video/drawing_context.hpp supertux-nogl/src/video/drawin // some constants for predefined layer values enum { -@@ -202,16 +202,12 @@ +@@ -225,18 +225,14 @@ void draw_filled_rect(DrawingRequest& request); - + void draw_lightmap(DrawingRequest& request); + DrawingRequests drawing_requests; - DrawingRequests lightmap_requests; DrawingRequests* requests; + Color ambient_color; SDL_Surface* screen; Target target; @@ -488,10 +562,13 @@ diff -Naur supertux/src/video/drawing_context.hpp supertux-nogl/src/video/drawin }; #endif -diff -Naur supertux/src/video/glutil.hpp supertux-nogl/src/video/glutil.hpp ---- supertux/src/video/glutil.hpp 2006-03-21 16:13:11.000000000 +0100 -+++ supertux-nogl/src/video/glutil.hpp 2006-04-07 04:11:49.000000000 +0200 -@@ -21,53 +21,6 @@ +diff -aur supertux/src/video/glutil.hpp supertux-nogl/src/video/glutil.hpp +--- supertux/src/video/glutil.hpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/glutil.hpp 2006-07-03 02:00:29.000000000 +0200 +@@ -21,58 +21,12 @@ + + #include + #include -#include -static inline void check_gl_error(const char* message) @@ -527,33 +604,36 @@ diff -Naur supertux/src/video/glutil.hpp supertux-nogl/src/video/glutil.hpp - case GL_TABLE_TOO_LARGE: - msg << "TABLE_TOO_LARGE: table is too large"; - break; --#endif +-#endif - default: - msg << "Unknown error (code " << error << ")"; - } -- +- - throw std::runtime_error(msg.str()); - } -#endif -} -- ++#define GLenum int ++#define GLint int ++#define GL_SRC_ALPHA 0 ++#define GL_ONE_MINUS_SRC_ALPHA 1 ++#define GL_RGBA 2 ++#define GL_ONE 3 + -static inline void assert_gl(const char* message) -{ -#ifdef DEBUG - check_gl_error(message); -#else - (void) message; --#endif + #endif -} -+#define GLenum int -+#define GLint int -+#define GL_SRC_ALPHA 0 -+#define GL_ONE_MINUS_SRC_ALPHA 1 -+#define GL_RGBA 2 -diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp ---- supertux/src/video/surface.cpp 2006-03-25 01:16:31.000000000 +0100 -+++ supertux-nogl/src/video/surface.cpp 2006-04-07 04:11:49.000000000 +0200 -@@ -28,6 +29,7 @@ +- +-#endif +diff -aur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp +--- supertux/src/video/surface.cpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/surface.cpp 2006-07-03 02:00:29.000000000 +0200 +@@ -28,6 +28,7 @@ #include #include @@ -561,7 +641,7 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp #include "gameconfig.hpp" #include "physfs/physfs_sdl.hpp" -@@ -40,13 +42,13 @@ +@@ -41,13 +42,13 @@ { texture = texture_manager->get(file); texture->ref(); @@ -581,7 +661,7 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp } Surface::Surface(const std::string& file, int x, int y, int w, int h) -@@ -54,15 +56,12 @@ +@@ -55,15 +56,12 @@ texture = texture_manager->get(file); texture->ref(); @@ -601,7 +681,7 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp } Surface::Surface(const Surface& other) -@@ -70,12 +69,12 @@ +@@ -71,12 +69,12 @@ texture = other.texture; texture->ref(); @@ -618,7 +698,7 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp } const Surface& -@@ -85,81 +84,95 @@ +@@ -86,52 +84,33 @@ texture->unref(); texture = other.texture; @@ -650,8 +730,9 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp Surface::hflip() { - std::swap(uv_left, uv_right); --} -- ++ flipx = !flipx; + } + -static inline void intern_draw(float left, float top, float right, float bottom, float uv_left, float uv_top, - float uv_right, float uv_bottom, - DrawingEffect effect) @@ -661,11 +742,11 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp - if(effect & VERTICAL_FLIP) { - std::swap(uv_top, uv_bottom); - } -- +- - glBegin(GL_QUADS); - glTexCoord2f(uv_left, uv_top); - glVertex2f(left, top); -- +- - glTexCoord2f(uv_right, uv_top); - glVertex2f(right, top); - @@ -675,7 +756,33 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp - glTexCoord2f(uv_left, uv_bottom); - glVertex2f(left, bottom); - glEnd(); -+ flipx = !flipx; +-} +- ++/* + static inline void intern_draw2(float left, float top, float right, float bottom, + float uv_left, float uv_top, + float uv_right, float uv_bottom, +@@ -182,50 +161,76 @@ + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } ++*/ + + void +-Surface::draw(float x, float y, float alpha, float angle, const Color& color, const Blend& blend, DrawingEffect effect) const ++Surface::draw(float x, float y, float alpha, float, const Color&, const Blend&, DrawingEffect effect) const + { +- glColor4f(1.0f, 1.0f, 1.0f, alpha); +- glBindTexture(GL_TEXTURE_2D, texture->get_handle()); +- +- intern_draw2(x, y, +- x + width, y + height, +- uv_left, uv_top, uv_right, uv_bottom, +- angle, +- color, +- blend, +- effect); ++ draw_part(0, 0, x, y, width, height, alpha, effect); } void @@ -693,34 +800,31 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp void Surface::draw_part(float src_x, float src_y, float dst_x, float dst_y, - float width, float height, float alpha, -+ float width, float height, float, ++ float width, float height, float , DrawingEffect effect) const { - float uv_width = uv_right - uv_left; - float uv_height = uv_bottom - uv_top; -- ++ //FIXME: support parameter "alpha" ++ SDL_Surface* surface = texture->getSurface(); + - float uv_left = this->uv_left + (uv_width * src_x) / this->width; - float uv_top = this->uv_top + (uv_height * src_y) / this->height; - float uv_right = this->uv_left + (uv_width * (src_x + width)) / this->width; - float uv_bottom = this->uv_top + (uv_height * (src_y + height)) / this->height; -- -- glColor4f(1.0f, 1.0f, 1.0f, alpha); -- glBindTexture(GL_TEXTURE_2D, texture->get_handle()); -- -- intern_draw(dst_x, dst_y, -- dst_x + width, dst_y + height, -- uv_left, uv_top, uv_right, uv_bottom, effect); -+ //FIXME: support parameter "alpha" -+ SDL_Surface* surface = texture->getSurface(); -+ + // get and check SDL_Surface + if (surface == 0) { + std::cerr << "Warning: Tried to draw NULL surface, skipped draw" << std::endl; + return; + } -+ + +- glColor4f(1.0f, 1.0f, 1.0f, alpha); +- glBindTexture(GL_TEXTURE_2D, texture->get_handle()); + SDL_Surface* transformedSurface = surface; -+ + +- intern_draw(dst_x, dst_y, +- dst_x + width, dst_y + height, +- uv_left, uv_top, uv_right, uv_bottom, effect); + if (flipx) effect = HORIZONTAL_FLIP; + + if (effect != NO_EFFECT) { @@ -764,10 +868,9 @@ diff -Naur supertux/src/video/surface.cpp supertux-nogl/src/video/surface.cpp + + SDL_BlitSurface(transformedSurface, &srcRect, screen, &dstRect); } - -diff -Naur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp ---- supertux/src/video/surface.hpp 2006-03-03 20:34:27.000000000 +0100 -+++ supertux-nogl/src/video/surface.hpp 2006-04-07 04:11:49.000000000 +0200 +diff -aur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp +--- supertux/src/video/surface.hpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/surface.hpp 2006-07-03 02:00:29.000000000 +0200 @@ -20,7 +20,9 @@ #ifndef __SURFACE_HPP__ #define __SURFACE_HPP__ @@ -775,10 +878,10 @@ diff -Naur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp +#include #include +#include + #include "math/vector.hpp" - class ImageTexture; - -@@ -35,6 +37,15 @@ + class Color; +@@ -37,6 +39,15 @@ }; /** @@ -794,7 +897,7 @@ diff -Naur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp * A rectangular image. * The class basically holds a reference to a texture with additional UV * coordinates that specify a rectangular area on this texture -@@ -46,18 +57,23 @@ +@@ -48,19 +59,26 @@ friend class Font; ImageTexture* texture; @@ -805,8 +908,11 @@ diff -Naur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp + bool flipx; + /** draw the surface on the screen, applying a ::DrawingEffect on-the-fly. Transformed Surfaces will be cached in ::transformedSurfaces */ + void draw(float x, float y, float alpha, float angle, const Color& color, const Blend& blend, DrawingEffect effect) const; ++ ++ /** draw the surface on the screen, applying a ::DrawingEffect on-the-fly. Transformed Surfaces will be cached in ::transformedSurfaces */ void draw(float x, float y, float alpha, DrawingEffect effect) const; -+ ++ + /** draw the surface on the screen, applying a ::DrawingEffect on-the-fly. Transformed Surfaces will be cached in ::transformedSurfaces */ void draw_part(float src_x, float src_y, float dst_x, float dst_y, float width, float height, @@ -824,10 +930,10 @@ diff -Naur supertux/src/video/surface.hpp supertux-nogl/src/video/surface.hpp public: Surface(const std::string& file); Surface(const std::string& file, int x, int y, int w, int h); -diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp ---- supertux/src/video/texture.cpp 2006-03-03 20:34:27.000000000 +0100 -+++ supertux-nogl/src/video/texture.cpp 2006-04-07 04:11:49.000000000 +0200 -@@ -20,7 +20,6 @@ +diff -aur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp +--- supertux/src/video/texture.cpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/texture.cpp 2006-07-03 02:00:29.000000000 +0200 +@@ -21,7 +21,6 @@ #include "texture.hpp" @@ -835,7 +941,7 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp #include #include "glutil.hpp" -@@ -29,81 +28,37 @@ +@@ -30,7 +29,7 @@ return (v & (v-1)) == 0; } @@ -844,13 +950,13 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp { assert(is_power_of_2(w)); assert(is_power_of_2(h)); - +@@ -38,23 +37,10 @@ this->width = w; this->height = h; -- + - assert_gl("before creating texture"); - glGenTextures(1, &handle); -- +- - try { - glBindTexture(GL_TEXTURE_2D, handle); - @@ -862,7 +968,6 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp - glDeleteTextures(1, &handle); - throw; - } -+ + surface = 0; } @@ -871,17 +976,13 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp { const SDL_PixelFormat* format = image->format; if(!is_power_of_2(image->w) || !is_power_of_2(image->h)) - throw std::runtime_error("image has no power of 2 size"); - if(format->BitsPerPixel != 24 && format->BitsPerPixel != 32) - throw std::runtime_error("image has no 24 or 32 bit color depth"); -- -+ +@@ -65,45 +51,14 @@ this->width = image->w; this->height = image->h; - assert_gl("before creating texture"); - glGenTextures(1, &handle); -- +- - try { - GLenum sdl_format; - if(format->BytesPerPixel == 3) @@ -899,7 +1000,7 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp - - assert_gl("creating texture"); - -- set_texture_params(); +- set_texture_params(); - } catch(...) { - glDeleteTextures(1, &handle); - throw; @@ -922,11 +1023,10 @@ diff -Naur supertux/src/video/texture.cpp supertux-nogl/src/video/texture.cpp - - assert_gl("set texture params"); } - -diff -Naur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp ---- supertux/src/video/texture.hpp 2006-03-03 20:34:27.000000000 +0100 -+++ supertux-nogl/src/video/texture.hpp 2006-04-07 04:11:49.000000000 +0200 -@@ -20,7 +20,7 @@ +diff -aur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp +--- supertux/src/video/texture.hpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/texture.hpp 2006-07-03 02:00:29.000000000 +0200 +@@ -21,7 +21,7 @@ #define __TEXTURE_HPP__ #include @@ -935,7 +1035,7 @@ diff -Naur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp /** * This class is a wrapper around a texture handle. It stores the texture width -@@ -30,8 +30,9 @@ +@@ -31,8 +31,9 @@ class Texture { protected: @@ -946,10 +1046,10 @@ diff -Naur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp unsigned int width; unsigned int height; -@@ -40,11 +41,6 @@ +@@ -41,11 +42,6 @@ Texture(SDL_Surface* surface, GLenum glformat); virtual ~Texture(); - + - GLuint get_handle() const - { - return handle; @@ -958,7 +1058,7 @@ diff -Naur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp unsigned int get_width() const { return width; -@@ -55,6 +51,14 @@ +@@ -56,6 +52,14 @@ return height; } @@ -973,10 +1073,10 @@ diff -Naur supertux/src/video/texture.hpp supertux-nogl/src/video/texture.hpp private: void set_texture_params(); }; -diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/texture_manager.cpp ---- supertux/src/video/texture_manager.cpp 2006-04-07 03:32:13.000000000 +0200 -+++ supertux-nogl/src/video/texture_manager.cpp 2006-04-07 04:11:49.000000000 +0200 -@@ -5,8 +5,6 @@ +diff -aur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/texture_manager.cpp +--- supertux/src/video/texture_manager.cpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/texture_manager.cpp 2006-07-03 02:00:29.000000000 +0200 +@@ -24,8 +24,6 @@ #include #include #include @@ -985,7 +1085,7 @@ diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/textur #include #include #include -@@ -126,12 +124,6 @@ +@@ -145,12 +143,6 @@ void TextureManager::save_textures() { @@ -998,7 +1098,7 @@ diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/textur for(Textures::iterator i = textures.begin(); i != textures.end(); ++i) { save_texture(*i); } -@@ -146,75 +138,16 @@ +@@ -165,74 +157,15 @@ { SavedTexture saved_texture; saved_texture.texture = texture; @@ -1020,7 +1120,7 @@ diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/textur size_t pixelssize = saved_texture.width * saved_texture.height * 4; saved_texture.pixels = new char[pixelssize]; -- +- - glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, - saved_texture.pixels); @@ -1041,11 +1141,11 @@ diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/textur - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); - glPixelStorei(GL_UNPACK_SKIP_IMAGES, 0); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -- +- - for(std::vector::iterator i = saved_textures.begin(); - i != saved_textures.end(); ++i) { - SavedTexture& saved_texture = *i; -- +- - GLuint handle; - glGenTextures(1, &handle); - assert_gl("creating texture handle"); @@ -1073,11 +1173,10 @@ diff -Naur supertux/src/video/texture_manager.cpp supertux-nogl/src/video/textur - saved_textures.clear(); } - -diff -Naur supertux/src/video/texture_manager.hpp supertux-nogl/src/video/texture_manager.hpp ---- supertux/src/video/texture_manager.hpp 2006-03-03 20:34:27.000000000 +0100 -+++ supertux-nogl/src/video/texture_manager.hpp 2006-04-07 04:11:49.000000000 +0200 -@@ -1,7 +1,7 @@ +diff -aur supertux/src/video/texture_manager.hpp supertux-nogl/src/video/texture_manager.hpp +--- supertux/src/video/texture_manager.hpp 2006-07-03 02:00:48.000000000 +0200 ++++ supertux-nogl/src/video/texture_manager.hpp 2006-07-03 02:00:29.000000000 +0200 +@@ -20,7 +20,7 @@ #ifndef __IMAGE_TEXTURE_MANAGER_HPP__ #define __IMAGE_TEXTURE_MANAGER_HPP__ @@ -1086,4 +1185,3 @@ diff -Naur supertux/src/video/texture_manager.hpp supertux-nogl/src/video/textur #include #include #include -