Commit Graph

15 Commits

Author SHA1 Message Date
Stephen Heumann
af7b5b8119 Do raw drawing incrementally while data is being received.
This currently disables the support for skipping invisible pixels. It is generally not very important, since raw drawing speed usually is not the bottleneck.
2016-09-05 17:22:10 -05:00
Stephen Heumann
d281a30f98 Use less ugly (and faster) code for content origin calculations.
Specifically, use a union rather than pointer-based type punning to convert the Long value returned by GetContentOrigin() to a Point. This makes for more readable code and should also generate somewhat better assembly code.
2016-05-28 23:58:04 -05:00
Stephen Heumann
e1288f7e1b Small refactoring to reduce boilerplate code
DoReadTCP automatically disposes the old read buffer handle before doing the read, and then locks the new read buffer handle before returning. This removes the need for most explicit locking/unlocking of the handle. A macro is provided to dispose of the handle earlier (useful in a few cases where it may be big, and another read isn't immediately performed).

Also, set displayInProgress to FALSE in NextRect, rather than in code for each encoding.
2016-05-28 21:59:35 -05:00
Stephen Heumann
1b4d47b690 Speed up raw drawing by calling EventAvail and SystemTask less often.
They are now called only every 16 lines, instead of every line. This is enough to maintain reasonable responsiveness, while providing a measurable speedup.
2016-05-20 23:09:40 -05:00
Stephen Heumann
aa38f6d209 Use faster assembly routine for 320-mode raw pixel decoding too.
The assembly code for the 640-mode and 320-mode routines is moved to a macro so it can be shared between them.
2016-05-20 22:08:05 -05:00
Stephen Heumann
9e401f4a83 Switch to using faster assembly routine (instead of C) for 640-mode pixel decoding loop. 2016-05-14 17:30:44 -05:00
Stephen Heumann
12999358b5 Use a static (instead of dynamically allocated) buffer for SHR pixels generated from raw decoding.
The program code is moved to a separate segment to make room for the buffer.
2016-05-13 21:44:12 -05:00
Stephen Heumann
141739c985 Clean up headers and make things static where appropriate.
Also include a few missing prototypes, which could possibly fix bugs.
2016-05-13 20:19:27 -05:00
Stephen Heumann
c6389c9925 Optimize 640 mode raw decoding for case where consecutive blocks of 4 pixels are the same.
This is also a win provided it can use the optimized case over ~40% of the time.
2015-09-28 22:48:23 -05:00
Stephen Heumann
2f13669a2f Optimize 320-mode raw pixel decoding for the case where two consecutive pairs of pixels are the same.
This is only a win if we can use the optimized case a reasonable proportion of the time (~40% or more), but that should be the case for most real screen images.

The equality comparisons are written with XORs because that produces better assembly code.
2015-09-28 20:53:45 -05:00
Stephen Heumann
3c069bc35d Raw decoding optimization: Do operations using 16 bits where possible.
This saves a few instructions that were being used to switch to 8-bit mode or mask values down to 8 bits.
2015-09-26 22:16:04 -05:00
Stephen Heumann
f810cb3799 Optimize the core loops for decoding raw pixels a little, in particular deferring increments to the end. 2015-09-26 14:26:05 -05:00
Stephen Heumann
ebf5297779 Switch to standard indentation of closing braces 2015-09-23 20:56:33 -05:00
Stephen Heumann
ab3210adb0 Consistently use spaces for indentation 2015-09-23 20:26:03 -05:00
Stephen Heumann
31ff375570 Post-1.0b1 work in progress from 2004.
This contains partial code for displaying the cursor locally.
2015-09-23 19:40:17 -05:00