[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f77943: CogVM source as per VMMaker.oscog-nice.3170/eem.3171

Eliot Miranda noreply at github.com
Thu Feb 24 19:07:08 UTC 2022


  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: f77943115bbb8e55fc1adeaf54f483ecc6024bc6
      https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f77943115bbb8e55fc1adeaf54f483ecc6024bc6
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  Date:   2022-02-24 (Thu, 24 Feb 2022)

  Changed paths:
    M src/plugins/BitBltPlugin/BitBltPlugin.c

  Log Message:
  -----------
  CogVM source as per VMMaker.oscog-nice.3170/eem.3171

BitBltPlugin:

Revise the 3 new BitBlt rules again
(see https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505)

- use a proper division by 255 (factor alpha/255) in alphaScale:with: instead of approximate factor alpha/256 previously
- use a proper rounding (by adding 16r80 before the division by 255) in alphaScale:with:
- split the unscale ops in 3 separate r/g/b channels, otherwise, when grouping rb, the division by alpha will leak red bits not only on green components but also on blue
- fixup the carry used for saturating the rbg components in case of 16rFF overflow in alphaUnscale:with:

Note: division by 255 can be checked thru this snippet (should answer 0):

	(0 to: 16rFF squared) inject: 0 into:
		[:max :num |
		| rat |
		rat := num + 16r80. "+ 16r80 for rounding"
		rat := rat + (rat - 1 >> 8 bitAnd: 16rFF) >> 8 bitAnd: 16rFF. "divide by 255"
		((num/255) rounded - rat) abs max: max].

Fix alphaBlendUnscaled; some bits were leaking in the neighbour color.

Use the FastCPrimitiveFlag on primitivePixelValueAt for a 38% speedup.




More information about the Vm-dev mailing list