Index: samples/demo_blending.py
===================================================================
--- samples/demo_blending.py	(revision 0)
+++ samples/demo_blending.py	(revision 0)
@@ -0,0 +1,81 @@
+#
+# cocos2d
+# http://cocos2d.org
+#
+
+import sys
+import os
+sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
+
+from pyglet import image, font
+from pyglet.gl import *
+from pyglet.window import key
+
+from cocos.actions import *
+from cocos.director import director
+from cocos.layer import * 
+from cocos.scene import Scene
+from cocos.sprite import Sprite
+
+
+class FontLayer( Layer ):
+    def __init__( self ):
+        super( FontLayer, self ).__init__()
+
+        self.batch = pyglet.graphics.Batch()
+
+        self.text_title = pyglet.text.Label("Blending demo",
+            font_size=32,
+            x=5,
+            y=director.get_window_size()[1],
+            anchor_x=font.Text.LEFT,
+            anchor_y=font.Text.TOP,
+            batch=self.batch)
+
+    def draw( self ):
+        super( FontLayer, self).draw()
+        self.batch.draw()
+
+
+class SpriteLayer( Layer ):
+
+    is_event_handler = True     #: enable pyglet's events
+
+    def __init__( self, index=1 ):
+        super(SpriteLayer, self ).__init__()
+        self.index = index
+
+        self.image = pyglet.resource.image('grossini.png')
+
+        self.sprite1 = Sprite(self.image, blend_mode=Sprite.BLEND_STANDARD)
+        self.sprite1.x = director.get_window_size()[0] / 2 - 100
+        self.sprite1.y = director.get_window_size()[0] / 2
+        self.add( self.sprite1 )
+
+        self.sprite2 = Sprite(self.image, blend_mode=Sprite.BLEND_ADDITIVE)
+        self.sprite2.x = director.get_window_size()[0] / 2 + 100
+        self.sprite2.y = director.get_window_size()[0] / 2
+        self.add( self.sprite2 )
+
+    def on_key_release( self, keys, mod ):
+        # LEFT: go to previous scene
+        # RIGTH: go to next scene
+        # ENTER: restart scene
+        if keys == key.LEFT:
+            self.index -= 1
+            if self.index < 1:
+                self.index = len( tests )
+        elif keys == key.RIGHT:
+            self.index += 1
+            if self.index > len( tests ):
+                self.index = 1
+
+        if keys in (key.LEFT, key.RIGHT, key.ENTER):
+            director.replace( get_sprite_test( self.index ) )
+            return True
+
+
+if __name__ == "__main__":
+    director.init( resizable=True, caption='Cocos - Blending demo' )
+    director.run( Scene(ColorLayer(96, 0, 128, 255), FontLayer(), SpriteLayer()) )
+
Index: cocos/sprite.py
===================================================================
--- cocos/sprite.py	(revision 863)
+++ cocos/sprite.py	(working copy)
@@ -70,7 +70,9 @@
         sprite = Sprite('grossini.png')
     '''
 
-    def __init__( self, image, position=(0,0), rotation=0, scale=1, opacity = 255, color=(255,255,255), anchor = None ):
+    BLEND_STANDARD, BLEND_ADDITIVE = range(2)
+
+    def __init__( self, image, position=(0,0), rotation=0, scale=1, opacity = 255, color=(255,255,255), blend_mode = BLEND_STANDARD, anchor = None ):
         '''Initialize the sprite
 
         :Parameters:
@@ -131,7 +133,10 @@
         #: color of the sprite in R,G,B format where 0,0,0 is black and 255,255,255 is white
         self.color = color
 
+        #: blend mode: BLEND_STANDARD (use alpha value) or BLEND_ADDITIVE (use color overlay, ignore alpha)
+        self.blend_mode = blend_mode
 
+
     def contains(self, x, y):
         '''Test whether this (untransformed) Sprite contains the pixel coordinates
         given.
@@ -186,8 +191,15 @@
 
     image_anchor = property(_get_anchor, _set_anchor)
 
+    def setup_blending_mode(self):
+        if self.blend_mode == Sprite.BLEND_ADDITIVE:
+            glBlendFunc(GL_SRC_ALPHA, GL_ONE)
+        else:
+            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
     def draw(self):
         self._group.set_state()
+        self.setup_blending_mode()
         if self._vertex_list is not None:
             self._vertex_list.draw(GL_QUADS)
         self._group.unset_state()
