A new version of GraphicsTests was added to project The Inbox:
http://source.squeak.org/inbox/GraphicsTests-nice.57.mcz ==================== Summary ==================== Name: GraphicsTests-nice.57 Author: nice Time: 27 December 2020, 7:13:22.58338 pm UUID: 72c4e0a0-c603-4537-81e6-7c9812d95062 Ancestors: GraphicsTests-pre.55 Add tests for new alpha compositing rules. See https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 Those tests require a newer VM (or at least a newer BitBlt plugin - post VMMaker.oscog-nice.2909). This is the 2nd attempt with typo corrected: Uncaled => Unscaled Hence, GraphicsTests-nice.56 can be thrown away. =============== Diff against GraphicsTests-pre.55 =============== Item was added: + ----- Method: BitBltTest>>testAlphaCompositingUnscaled (in category 'tests') ----- + testAlphaCompositingUnscaled + "self run: #testAlphaCompositingUnscaled" + + | fSrc fDst eps | + fSrc := Form extent: 1@1 depth: 32. + fDst := Form extent: 1@1 depth: 32. + eps := 0.5 / 255. + 0 to: 255 do:[:srcA | + 0 to: 255 do:[:dstA | + | sColor dColor bb result a r b | + sColor := Color blue alpha: srcA / 255.0. + dColor := Color red alpha: dstA / 255.0. + fSrc colorAt: 0@0 put: sColor. + fDst colorAt: 0@0 put: dColor. + bb := BitBlt toForm: fDst. + bb sourceForm: fSrc. + bb combinationRule: Form blendAlphaUnscaled. + bb copyBits. + result := fDst colorAt: 0@0. + a := 1 - (srcA/255) * dstA + srcA / 255.0. + a = 0 + ifFalse: + [r := 1 - (srcA/255) * dColor red + (srcA/255 * sColor red) / a. + b := 1 - (srcA/255) * dColor blue + (srcA/255 * sColor blue) / a. + self assert: (result red - r) abs < eps. + self assert: (result green = 0). + self assert: (result blue - b) abs < eps]. + self assert: (result alpha - a) abs < eps]]! Item was added: + ----- Method: BitBltTest>>testAlphaCompositingUnscaled2 (in category 'tests') ----- + testAlphaCompositingUnscaled2 + "self run: #testAlphaCompositingUnscaled2" + + | fSrc fDst eps | + fSrc := Form extent: 1@1 depth: 32. + fDst := Form extent: 1@1 depth: 32. + eps := 0.5 / 255. + 0 to: 255 do:[:srcA | + 0 to: 255 do:[:dstA | + | sColor dColor bb result a r g b | + sColor := (Color r: 0.75 g: 0.5 b: 0) alpha: srcA / 255.0. + dColor := (Color r: 0.0 g: 0.75 b: 0.5) alpha: dstA / 255.0. + fSrc colorAt: 0@0 put: sColor. + fDst colorAt: 0@0 put: dColor. + bb := BitBlt toForm: fDst. + bb sourceForm: fSrc. + bb combinationRule: Form blendAlphaUnscaled. + bb copyBits. + result := fDst colorAt: 0@0. + a := 1 - (srcA/255) * dstA + srcA / 255.0. + a = 0 + ifFalse: + [r := 1 - (srcA/255) * dColor red + (srcA/255 * sColor red) / a. + g := 1 - (srcA/255) * dColor green + (srcA/255 * sColor green) / a. + b := 1 - (srcA/255) * dColor blue + (srcA/255 * sColor blue) / a. + self assert: (result red - r) abs < eps. + self assert: (result green - g) abs < eps. + self assert: (result blue - b) abs < eps]. + self assert: (result alpha - a) abs < eps]]! Item was added: + ----- Method: BitBltTest>>testAlphaScale (in category 'tests') ----- + testAlphaScale + "self run: #testAlphaScale" + + | fSrc fDst eps | + fSrc := Form extent: 1@1 depth: 32. + fDst := Form extent: 1@1 depth: 32. + eps := 0.5 / 255. + 0 to: 255 do:[:dstA | + | dColor bb result a r g b | + dColor := (Color r: 0.25 g: 0.75 b: 0.5) alpha: dstA / 255.0. + fDst colorAt: 0@0 put: dColor. + bb := BitBlt toForm: fDst. + bb sourceForm: fSrc. "source is ignored" + bb combinationRule: Form alphaScale. + bb copyBits. + result := fDst colorAt: 0@0. + a := dColor alpha. + r := dColor alpha * dColor red. + g := dColor alpha * dColor green. + b := dColor alpha * dColor blue. + self assert: (result red - r) abs < eps. + self assert: (result green - g) abs < eps. + self assert: (result blue - b) abs < eps. + self assert: (result alpha - a) abs < eps]! Item was added: + ----- Method: BitBltTest>>testAlphaUnscale (in category 'tests') ----- + testAlphaUnscale + "self run: #testAlphaUnscale" + + | fSrc fDst eps | + fSrc := Form extent: 1@1 depth: 32. + fDst := Form extent: 1@1 depth: 32. + eps := 0.5 / 255. + 1 to: 255 do:[:dstA | + | dColor bb result a r g b | + dColor := (Color r: 0.25 g: 0.75 b: 0.5) alpha: dstA / 255.0. + fDst colorAt: 0@0 put: dColor. + bb := BitBlt toForm: fDst. + bb sourceForm: fSrc. "source is ignored" + bb combinationRule: Form alphaUnscale. + bb copyBits. + result := fDst colorAt: 0@0. + a := dColor alpha. + r := dColor red / dColor alpha min: 1.0. + g := dColor green / dColor alpha min: 1.0. + b := dColor blue / dColor alpha min: 1.0. + self assert: (result red - r) abs < eps. + self assert: (result green - g) abs < eps. + self assert: (result blue - b) abs < eps. + self assert: (result alpha - a) abs < eps]! |
Free forum by Nabble | Edit this page |