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