World: r3wp
[rebcode] Rebcode discussion
older newer | first last |
Cyphre 24-Oct-2005 [689] | so probably final version: rgba-to-int: rebcode [r g b a][ lsl a 24 lsl r 16 lsl g 8 or a r or a g or a b return a ] |
BrianH 24-Oct-2005 [690] | There might be a problem with arithmetic overflow if a < 127, as lsl a 24 would result in a negative integer, but I may be wrong here. Still, why risk it? |
Rebolek 24-Oct-2005 [691] | >> rgba-to-int 255 255 255 255 == -1 |
BrianH 24-Oct-2005 [692] | Kru, which version did you use? |
Rebolek 24-Oct-2005 [693] | last one |
BrianH 24-Oct-2005 [694] | Cool, it works the way I thought it would :) |
Cyphre 24-Oct-2005 [695x2] | BTW negative integer doesn't matter when changing pixels in IMAGE! |
>> to-integer to-binary 255.255.255.255 == -1 | |
Rebolek 24-Oct-2005 [697] | but to integer! to binary! [issue!] is not same as rgba-to-int |
Cyphre 24-Oct-2005 [698] | OTOH the pixelformat of accesing IMAGE! in RebCode id ARGB |
Rebolek 24-Oct-2005 [699] | >> rgba-to-int 255 255 255 1 == 33554431 >> to-integer to binary! 255.255.255.1 == -255 |
Cyphre 24-Oct-2005 [700x3] | >> to-integer to-binary 1.255.255.255 == 33554431 |
ALPHA is the first component | |
(in Rebcode) | |
BrianH 24-Oct-2005 [703] | Really? |
Cyphre 24-Oct-2005 [704] | rgba-to-int: rebcode [r g b a][ lsl a 24 lsl r 16 lsl g 8 or a r or a g or a b return a ] draw-pix: rebcode [r g b a][ apply a rgba-to-int [r g b a] poke img 1 a ] update-pixel: does [ do draw-pix col/1 col/2 col/3 col/4 probe img show i ] col: 0.0.0.0 img: make image! 1x1 view layout [ backcolor black i: image img 100x100 scroller 200x16 [ col/1: to-integer face/data * 255 update-pixel ] scroller 200x16 [ col/2: to-integer face/data * 255 update-pixel ] scroller 200x16 [ col/3: to-integer face/data * 255 update-pixel ] scroller 200x16 [ col/4: to-integer face/data * 255 update-pixel ] ] |
Rebolek 24-Oct-2005 [705] | not if you do PICK on image! |
BrianH 24-Oct-2005 [706] | I mean in regular REBOL code. |
Volker 24-Oct-2005 [707] | I guess Cyphre has a good qualification for such statements ;) |
Cyphre 24-Oct-2005 [708] | I REBOL the pixelformat is RGBA due to tuple! behaviour (you can left the last value of tupple == opaque pixel) |
Rebolek 24-Oct-2005 [709] | So another coversion needed :) |
Cyphre 24-Oct-2005 [710x2] | In REBCODE you are accessing image! internally so the pixelformat is ARGB. |
Kru: yes, in Rebol there is conversion done. In Rebcode you are at full speed ;) | |
Rebolek 24-Oct-2005 [712] | Cypher, have you looked at the apply problem? |
Cyphre 24-Oct-2005 [713] | not yet |
BrianH 24-Oct-2005 [714] | There's an apply problem? |
Rebolek 24-Oct-2005 [715] | trying to reproduce the problem I've just crashed REBOL with CRASH Should not happen |
Cyphre 24-Oct-2005 [716] | Maybe not a problem, but overhead? |
Rebolek 24-Oct-2005 [717] | And REBOL ate all memory |
Cyphre 24-Oct-2005 [718] | can you post the code? |
Ladislav 24-Oct-2005 [719] | yes, show us! |
Rebolek 24-Oct-2005 [720x2] | two testing functions: |
>> mulr: rebcode [a][mul a 2 return a] >> mull: rebcode [a][loop 10000000 [apply a mulr [a]] return a] | |
Cyphre 24-Oct-2005 [722] | From my tests calling a REBCODE function (or subroutine) using APPLY is by 100% slower than reusing the same code. |
Rebolek 24-Oct-2005 [723] | first test: xt: now/time/precise loop 10000000 [mulr 2] now/time/precise - xt |
Cyphre 24-Oct-2005 [724] | Is that neccessary? |
Rebolek 24-Oct-2005 [725x3] | second test: xt: now/time/precise mull 2 now/time/precise - xt |
ssecond does has some problem | |
does=test | |
Volker 24-Oct-2005 [728] | Is it neccessary to tune that, or would macro-expansion do? faster anyway. How big may rebcode-parts be? |
Rebolek 24-Oct-2005 [729] | hunderts lines of rebcode in my case :) |
Volker 24-Oct-2005 [730] | Not much memory then! But much work :) |
Rebolek 24-Oct-2005 [731] | 1GB is not enough for ten milions multiplications? :) |
Cyphre 24-Oct-2005 [732x3] | It looks like APPLY inside a LOOP is causing those problems. |
This need to be fixed. | |
(I meant inside Rebcode LOOP) | |
Rebolek 24-Oct-2005 [735] | if I lower number of loops to 1 000 000, there's no crash and the difference between direct and apply version is not so big, some 5% (but still remember, that in the apply version, there's loop inside rebcode and it's way faster than rebol's loop, so apply is still slowing it down) |
Cyphre 24-Oct-2005 [736x3] | I think it eat too much memory. |
It looks like some memory leak. | |
time: func [b /local start] [ start: now/precise do b print ["Time:" difference now/precise start] ] rgba-to-int: rebcode [r g b a][ lsl a 24 lsl r 16 lsl g 8 or a r or a g or a b return a ] draw-pix: rebcode [r g b a][ apply a rgba-to-int [r g b a] return a ] draw-pix2: rebcode [r g b a][ loop 1000000 [ apply a rgba-to-int [r g b a] ] return a ] probe stats recycle time [loop 1000000 [draw-pix 255 255 255 255]] probe stats recycle time [loop 1000000 [rgba-to-int 255 255 255 255]] probe stats recycle time [draw-pix2 255 255 255 255] probe stats | |
older newer | first last |