[squeak-dev] The Trunk: Graphics-nice.536.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Aug 21 15:36:50 UTC 2022
Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-nice.536.mcz
==================== Summary ====================
Name: Graphics-nice.536
Author: nice
Time: 21 August 2022, 5:36:40.736262 pm
UUID: a4930d0f-a408-724e-b9e0-4eb4841607e3
Ancestors: Graphics-nice.535
Further accelerate Color creation from 8 bits components.
For this we pre-multiply the constants by the destination shift - 8, so as to omit the right shift >> 8 followed by the left shift << Red/GreenShift.
- RedShift = 20 bits, 16r403 >> (20-8) = 16r403000
- GreenShift = 10 bits, 16r403 >> (10-8) = 16r100C
=============== Diff against Graphics-nice.535 ===============
Item was changed:
----- Method: Color>>setRed8:green8:blue8: (in category 'private') -----
setRed8: r green8: g blue8: b
"Initialize this color's r, g, and b components to the given values in the range [0..255].
Use an optimized operation rather than a slow division"
"
self assert: ((0 to: 255) allSatisfy: [:e | (e*1023/255) rounded = (e * 16r403 + 16r81 >> 8)]).
"
ComponentMax = 1023 ifFalse: [^self setRed: r / 255 green: g / 255 blue: b / 255].
rgb == nil ifFalse: [self attemptToMutateError].
+ rgb := (r* 16r403000 + 16r81000 bitAnd: 16r3FF00000 "ComponentMask << RedShift" )
+ + (g* 16r100C + 16r204 bitAnd: 16rFFC00 "ComponentMask << GreenShift" )
+ + (b* 16r403 + 16r81 >> 8).
- rgb := ((r* 16r403 + 16r81 >> 8) bitShift: RedShift)
- + ((g* 16r403 + 16r81 >> 8) bitShift: GreenShift)
- + ((b* 16r403 + 16r81 >> 8)).
cachedDepth := nil.
cachedBitPattern := nil.!
Item was changed:
----- Method: Color>>setRed:green:blue:range: (in category 'private') -----
setRed: r green: g blue: b range: range
"Initialize this color's r, g, and b components to the given values in the range [0..r]."
+ range = ComponentMax ifTrue: [^self setPrivateRed: r green: g blue: b].
range = 255 ifTrue: [^self setRed8: r green8: g blue8: b].
^ self setRed: r / range green: g / range blue: b / range!
Item was changed:
DisplayMedium subclass: #Form
instanceVariableNames: 'bits width height depth offset'
classVariableNames: 'CompressOnSnapshot'
poolDictionaries: ''
category: 'Graphics-Display Objects'!
+ !Form commentStamp: 'nice 5/3/2020 18:04' prior: 0!
- !Form commentStamp: 'cbc 5/5/2017 10:07' prior: 0!
A rectangular array of pixels, used for holding images. All pictures, including character images are Forms. The depth of a Form is how many bits are used to specify the color at each pixel. The actual bits are held in a Bitmap, whose internal structure is different at each depth. Class Color allows you to deal with colors without knowing how they are actually encoded inside a Bitmap.
The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million.
Forms are indexed starting at 0 instead of 1; thus, the top-left pixel of a Form has coordinates 0 at 0.
Forms are combined using BitBlt. See the comment in class BitBlt. Forms that repeat many times to fill a large destination are InfiniteForms.
colorAt: x at y Returns the abstract Color at this location
displayAt: x at y shows this form on the screen
displayOn: aMedium at: x at y shows this form in a Window, a Form, or other DisplayMedium
fillColor: aColor Set all the pixels to the color.
edit launch an editor to change the bits of this form.
pixelValueAt: x at y The encoded color. The encoding depends on the depth.
+ Details about internal format for Bitmap:
+ Pixels are organised left to right, top to bottom, that is as a contiguous serie of lines.
+ Each pixel is made of a fixed quantity of bits (depth).
+ Thus a Bitmap can be viewed as a rectangular area of size (width*depth x height) in bits.
+ However, the beginning of each line in the bitmap must fall on a 32-bit word boundary.
+ Thus the actual bitSize of a line is rounded up to next multiple of 32.
+ The Bitmap may somehow have unsued bits near the end of each line.
+
+ Note: If you want to hook up other external forms/displayScreens, please look at the (successful) Graphics-External package in http://www.squeaksource.com/Balloon3D.
+
+ !
- Note: If you want to hook up other external forms/displayScreens, please look at the (successful) Graphics-External package in http://www.squeaksource.com/Balloon3D.!
More information about the Squeak-dev
mailing list
|