Author: Tim Felgentreff <[email protected]>
Branch: bitblt
Changeset: r190:617434096d25
Date: 2013-03-16 14:00 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/617434096d25/

Log:    fix setword/getword on W_Bitmap

diff --git a/spyvm/model.py b/spyvm/model.py
--- a/spyvm/model.py
+++ b/spyvm/model.py
@@ -554,12 +554,10 @@
     @jit.elidable
     def _at0_pure(self, space, index0, version):
         val = self.getword(index0)
-        print "Get: [%d] => %d" % (index0, val)
         return space.wrap_uint(val)
 
     def atput0(self, space, index0, w_value):
         word = space.unwrap_uint(w_value)
-        print "Set: [%d] => %d" % (index0, word)
         self.setword(index0, word)
         self.mutate()
 
@@ -572,7 +570,7 @@
         for i in xrange(32):
             red = self.pixelbuffer[pos]
             if red == '\0': # Black
-                word &= 1
+                word |= r_uint(1)
             word <<= 1
             pos += 4
         return word
@@ -580,9 +578,8 @@
     @jit.unroll_safe
     def setword(self, n, word):
         pixel_per_word = NATIVE_DEPTH / self._depth
-        word = r_uint(0)
         pos = n * pixel_per_word * 4
-        mask = 1
+        mask = r_uint(1)
         mask <<= 31
         for i in xrange(32):
             bit = mask & word
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -549,10 +549,6 @@
     if not isinstance(w_rcvr, model.W_PointersObject) or w_rcvr.size() < 15:
         raise PrimitiveFailedError
 
-    import time
-    start = time.time()
-    print "blitting"
-
     interp.perform(w_rcvr, "simulateCopyBits")
 
     w_dest_form = w_rcvr.fetch(interp.space, 0)
@@ -561,7 +557,6 @@
         assert isinstance(w_bitmap, model.W_DisplayBitmap)
         w_bitmap.display.blit()
 
-    print "blitting finshed after %d ms" % int((time.time() - start) * 1000)
     return w_rcvr
 
 @expose_primitive(BE_CURSOR, unwrap_spec=[object])
@@ -584,25 +579,28 @@
     depth = interp.space.unwrap_int(w_rcvr.fetch(interp.space, 3))
 
     w_prev_display = interp.space.objtable['w_display']
-    w_prev_bitmap = None
+    sdldisplay = None
+
     if w_prev_display:
         w_prev_bitmap = w_prev_display.fetch(interp.space, 0)
-    if isinstance(w_prev_bitmap, model.W_DisplayBitmap):
-        sdldisplay = w_prev_bitmap.display
-    else:
+        if isinstance(w_prev_bitmap, model.W_DisplayBitmap):
+            sdldisplay = w_prev_bitmap.display
+
+    if isinstance(w_bitmap, model.W_DisplayBitmap):
+        assert (sdldisplay is None) or (sdldisplay is w_bitmap.display)
+        sdldisplay = w_bitmap.display
+        w_display_bitmap = w_bitmap
+
+    if not sdldisplay:
         sdldisplay = display.SDLDisplay()
-    sdldisplay.set_video_mode(width, height, depth)
 
     if isinstance(w_bitmap, model.W_WordsObject):
         w_display_bitmap = 
model.W_DisplayBitmap(w_bitmap.getclass(interp.space), w_bitmap.size(), depth, 
sdldisplay)
         for idx, word in enumerate(w_bitmap.words):
             w_display_bitmap.setword(idx, word)
         w_rcvr.store(interp.space, 0, w_display_bitmap)
-    else:
-        assert isinstance(w_bitmap, model.W_DisplayBitmap)
-        assert w_bitmap.display is sdldisplay
-        w_display_bitmap = w_bitmap
 
+    sdldisplay.set_video_mode(width, height, depth)
     sdldisplay.set_pixelbuffer(w_display_bitmap.pixelbuffer)
     sdldisplay.blit()
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to