pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3890 - in trunk/pingus/src: . display


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3890 - in trunk/pingus/src: . display
Date: Mon, 21 Jul 2008 20:33:10 +0200

Author: grumbel
Date: 2008-07-21 20:33:09 +0200 (Mon, 21 Jul 2008)
New Revision: 3890

Modified:
   trunk/pingus/src/display/framebuffer_surface.hpp
   trunk/pingus/src/display/opengl_framebuffer_surface_impl.cpp
   trunk/pingus/src/display/opengl_framebuffer_surface_impl.hpp
   trunk/pingus/src/display/sdl_framebuffer_surface_impl.cpp
   trunk/pingus/src/display/sdl_framebuffer_surface_impl.hpp
   trunk/pingus/src/sprite.cpp
   trunk/pingus/src/sprite.hpp
   trunk/pingus/src/sprite_impl.cpp
   trunk/pingus/src/sprite_impl.hpp
Log:
Added a to_surface() call

Modified: trunk/pingus/src/display/framebuffer_surface.hpp
===================================================================
--- trunk/pingus/src/display/framebuffer_surface.hpp    2008-07-21 17:21:46 UTC 
(rev 3889)
+++ trunk/pingus/src/display/framebuffer_surface.hpp    2008-07-21 18:33:09 UTC 
(rev 3890)
@@ -18,6 +18,7 @@
 #define HEADER_FRAMEBUFFER_SURFACE_HPP
 
 #include <boost/smart_ptr.hpp>
+#include "surface.hpp"
 #include "../math/size.hpp"
 
 class FramebufferSurfaceImpl
@@ -28,6 +29,7 @@
 
   virtual int get_width()  const =0;
   virtual int get_height() const =0;
+  virtual Surface to_surface() const =0; 
 };
 
 /** */
@@ -48,6 +50,7 @@
 
   operator bool() const { return impl.get() != 0; }
 
+  Surface to_surface() const { return impl->to_surface(); }
 private:
   boost::shared_ptr<FramebufferSurfaceImpl> impl;
 };

Modified: trunk/pingus/src/display/opengl_framebuffer_surface_impl.cpp
===================================================================
--- trunk/pingus/src/display/opengl_framebuffer_surface_impl.cpp        
2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/display/opengl_framebuffer_surface_impl.cpp        
2008-07-21 18:33:09 UTC (rev 3890)
@@ -76,5 +76,11 @@
   // Unbind the texture
   glBindTexture(GL_TEXTURE_2D, 0);
 }
+
+Surface
+OpenGLFramebufferSurfaceImpl::to_surface() const
+{
+  return Surface();
+}
 
 /* EOF */

Modified: trunk/pingus/src/display/opengl_framebuffer_surface_impl.hpp
===================================================================
--- trunk/pingus/src/display/opengl_framebuffer_surface_impl.hpp        
2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/display/opengl_framebuffer_surface_impl.hpp        
2008-07-21 18:33:09 UTC (rev 3890)
@@ -44,6 +44,8 @@
   GLuint get_handle() const { return handle; }
   Size get_texture_size() const { return texture_size; }
   Size get_size() const { return size; }
+
+  Surface to_surface() const;
 };
 
 #endif

Modified: trunk/pingus/src/display/sdl_framebuffer_surface_impl.cpp
===================================================================
--- trunk/pingus/src/display/sdl_framebuffer_surface_impl.cpp   2008-07-21 
17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/display/sdl_framebuffer_surface_impl.cpp   2008-07-21 
18:33:09 UTC (rev 3890)
@@ -29,4 +29,28 @@
   SDL_FreeSurface(surface);
 }
 
-/* EOF */
+Surface
+SDLFramebufferSurfaceImpl::to_surface() const
+{
+  //  Convert the surface to a format usable for the Blitter code
+  SDL_Surface* convert; 
+  if (SDL_BYTEORDER == SDL_BIG_ENDIAN) 
+    {
+      convert = SDL_CreateRGBSurface(SDL_SWSURFACE,
+                                     surface->w, surface->h, 32,
+                                     0xff000000, 0x00ff0000, 0x0000ff00, 
0x000000ff);
+    }
+  else
+    {
+      convert = SDL_CreateRGBSurface(SDL_SWSURFACE,
+                                     surface->w, surface->h, 32,
+                                     0x000000ff, 0x0000ff00, 0x00ff0000, 
0xff000000);
+    }
+
+  SDL_SetAlpha(surface, 0, 0); // FIXME: Do we have to reset this?
+  SDL_BlitSurface(surface, 0, convert, 0);
+
+  return Surface(surface);
+}
+
+  /* EOF */

Modified: trunk/pingus/src/display/sdl_framebuffer_surface_impl.hpp
===================================================================
--- trunk/pingus/src/display/sdl_framebuffer_surface_impl.hpp   2008-07-21 
17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/display/sdl_framebuffer_surface_impl.hpp   2008-07-21 
18:33:09 UTC (rev 3890)
@@ -34,6 +34,8 @@
   int get_height() const { return surface->h; }
 
   SDL_Surface* get_surface() const { return surface; }
+
+  Surface to_surface() const;
 };
 
 #endif

Modified: trunk/pingus/src/sprite.cpp
===================================================================
--- trunk/pingus/src/sprite.cpp 2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/sprite.cpp 2008-07-21 18:33:09 UTC (rev 3890)
@@ -204,5 +204,14 @@
       impl->offset = calc_origin(origin, impl->frame_size) - Vector2i(x, y);
     }
 }
+
+Surface
+Sprite::to_surface() const
+{
+  if (impl.get())
+    return impl->to_surface();
+  else
+    return Surface();
+}
 
 /* EOF */

Modified: trunk/pingus/src/sprite.hpp
===================================================================
--- trunk/pingus/src/sprite.hpp 2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/sprite.hpp 2008-07-21 18:33:09 UTC (rev 3890)
@@ -60,6 +60,8 @@
   void finish();
   operator bool();
 
+  Surface to_surface() const;
+
 private:
   boost::shared_ptr<SpriteImpl> impl;
 };

Modified: trunk/pingus/src/sprite_impl.cpp
===================================================================
--- trunk/pingus/src/sprite_impl.cpp    2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/sprite_impl.cpp    2008-07-21 18:33:09 UTC (rev 3890)
@@ -128,5 +128,11 @@
 {
   finished = true;
 }
+
+Surface
+SpriteImpl::to_surface() const
+{
+  return framebuffer_surface.to_surface();
+}
 
 /* EOF */

Modified: trunk/pingus/src/sprite_impl.hpp
===================================================================
--- trunk/pingus/src/sprite_impl.hpp    2008-07-21 17:21:46 UTC (rev 3889)
+++ trunk/pingus/src/sprite_impl.hpp    2008-07-21 18:33:09 UTC (rev 3890)
@@ -57,6 +57,8 @@
 
   void restart();
   void finish();
+
+  Surface to_surface() const;
 };
 
 #endif





reply via email to

[Prev in Thread] Current Thread [Next in Thread]