Revision history for Graphics-Framebuffer 1.00 2004 First version, released privately only, as part of a Perl media player project called "SuperSparky". 4.02 Dec 29, 2013 Public CPAN release. This is considerably more advanced than the one distributed as part of the media player. 4.03 March 20, 2014 Minor changes to the CPAN package 4.05 April 14, 2014 Documentation updates. POD section revamped. 4.06 July 19, 2014 Added better testing Added framebuffer emulation mode for test running on systems without a hardware framebuffer. It draws to a 640x480x32 virtual screen in memory. You can dump this screen to a file. 4.07 July 23, 2014 Fixed calculation error in string size allocation for emulation mode. Fixed fill 'flood' typo. Fixed pixel class documentation. It was incorrect. Added more tests for most used classes. 4.08 July 25, 2014 Added additional information to the documentation for the new emulation mode. No actual code changes made. 4.09 November 26, 2014 Added more FBIOCTL flags to make ready for future hardware accellerated updates. No promises here, but heck, this entire module was an exercise in "can it be done in Perl?" Also fixed a code comment that was mislabeled. 4.10 May 10, 2015 Added the ability to customize the framebuffer file path. Thanks Markus Maier. Added aliases to "set_mode" Some minor documentation fixes. 4.11 July 03, 2015 Numerous changes. Changed ttf_print box_mode to return everything needed to call itself again. Added a 'COLOR_ORDER' setting to the "new" parameters. 1=RGB and 0=BGR. The default is BGR. Added more comments to the code Added 'reset' as an alias to 'attributes_reset'. Just for people with different tastes. Hardened the code further against undefined values. Added more documentation Tested on Raspberry PI2, and works great! Odroid XU3, not so much... Circle/ellipse clipping weirdness remains. I should have that addressed in the next release. 4.12 July 05, 2015 Minor POD fix There was a POD error that caused it to fail testing, although it would have worked fine if installed. No new functionality in this release, just that one issue fixed. 4.13 July 06, 2015 Changed the tests to only test against a memory buffer. The tests get screwed up by the Test::Harness' output (which can't be squelched apparently). So instead of testing on the real framebuffer, I force the tests on a pseudo memory buffer. I believe I have fixed the clipping issues, especially the ones with filled ellipses and circles. It was related to blit_write. There are some minor optimizations, although likely not obvious. 4.14 July 07, 2015 Fixed borked plot test. Functionality of the module is fine. The test was broken. 4.15 July 07, 2015 Optimizations! I have optimized the draw_arc routine, and in the process made it properly work with XOR mode as well. It only draws what it hasn't drawn before. Which makes it quite faster (although still not a speed demon). 4.16 July 14, 2015 Bug fixes Fill is now fixed. This sucker still uses stack memory like it's going out of style. You have been warned. Filled polygons now, as long as they aren't overly complicated, and the borders do not cross. It uses a history buffer when drawing and then uses it to draw a series of horizontal lines to "fill" the polygon. This fill is very fast as a result. 'line' added for an alternate way of drawing a line. It's essentially a combination of plot > drawto under the hood. Warnings have been completely turned off. We don't want warnings to mess up your pretty graphics. Crashable code is in an eval, so who cares? Generally warnings begin happening when Perl has done a variable garbage collection, and the memory mapping to the framebuffer is borked. Fortunately, the module now recovers from this and remaps it. Clipping is quicker and more robust. Documentation has been updated / fixed where appropriate. 4.17 July 14, 2015 Fixed bugs as a result of some typos. Sorry about that. This affected the draw_arc and ellipse routines. Made poly arcs draw with lines instead of single pixels. That fills in the errors left by high granularity. Added the constants 'ARC', 'PIE', and 'POLY_ARC' to make drawing arcs easier to code. 4.18 July 14, 2015 Added new arc drawing methods. See the POD docs (man) for details. 4.19 July 16, 2015 Fixed the POD errors on test. I could swear I tested that. Oh well. 4.20 July 16, 2015 Removed the harmless leftover SCREEN2 code. Since that variable no longer existed, the code skips by it. 4.21 July 16, 2015 Ugh, I left "Data::Dumper::Simple" in the previous version. Build was borking on machines without it. Sorry folks. I try to leave out all debugging code to keep the module as fast as possible, but I missed this one. 4.22 July 21, 2015 I added a new mode to the framebuffer engine. Typically the module uses a memory mapped method to draw to the framebuffer. It's fast, but on some systems, this may be unstable. In such cases, you have the option of telling the drawing engine to use a file handle mode instead. File handle mode is a little slower, so use this mode only if necessary. See the manual for specifics. 4.23 July 21, 2015 Modified the testing to stop failing too easy. It's really not catestrophic if a test fails. Testing kind of interferes with the output anyway. Consolided the tests into one single "primitives" test. ARM Mali GPUs now work. I found the problem was the framebuffer driver was returning some bogus data, and was throwing off the calculations for drawing. Which caused crazy numbers to be sent to the mmap call, and thus fail. Now an override can be sent when initializing the module to fix this. Yes, this means that this module now works on the Odroid XU3! The scripts in the "examples" directory can be put into MALI mode by simply passing "mali" on the command line. I added a boxfill for hardware accelerated cards. It's automatic when called by box/rbox in the API. It only works with filled boxes in normal and XOR mode. If hardware accelerated filled boxes aren't working, then you can disable them by setting (assume $fb is your object variable) $fb->{'accel_flags'} = 0 Oh, and blitcopy is hardware accelerated in normal mode only as well, if your video card supports it. 4.24 July 23, 2015 Vertical Gradents for boxes, ellipses, circles, and polygons added. See the documentation for details. See the "examples" directory for... well... examples. Polygon fills fixed. No more gaps. Go easy on the complex filled polygons though. Sometimes you get better results by making a complex filled polygon out of smaller simple ones. Updated the examples with up-to-date tests. Added "UNMASK_MODE" to the documentation. Sorry about not having it in there in the first place. I also added the shortcut method "unmask_mode". Added "angle_line" method for drawing lines at specific angles. 5.00 July 31, 2015 Major version update. So many things have been added and optimized, that it warrants a full version number upgrade. 'replace_color' is VERY fast if clipping is reset (off) 'pie_arc' has been changed. It uses the same fill routine that the polygon fill uses. Thus it draws a lot faster with no more gaps. Granularity is not as important. The value of 0.01 for granularity should work for most uses (unless you have a 4K screen). 'fill' Is a lot faster, and uses considerably less memory now. I knew I'd get it down. New 'monochrome' method that takes any image data and makes it greyscale. Using it with the blit methods should be handy. TrueType font rendering is improved. It has a default font setting, which you can change when you instantiate the framebuffer. It also takes a new parameter 'wscale' to scale the width of the text. It takes decimal values between 1 (inclusive) to 0 (exclusive). 1 is normal, and smaller values squeeze the text. Color conversions are a bit better for 16 bit framebuffers. Added 'cubic_bezier' curves! Yes, you can be a spline master now. More friendlier named methods that are aliases to others. Due to the extra features, two more prerequisite modules are required. On that note, I removed the need for Switch.pm. It turns out it's flakey and starts to give bizarre errors, not to mention I realized it has a performance penalty. So yes, this module is a little bit faster now as a result. Boxes can have rounded corners in frame, filled, and gradient filled modes, if you desire. Just add the parameter 'radius' to the method call. Polygons with rounded corners are not ready. I am still having trouble with them, but they will be added eventually. This new version comes with a splash screen, which can be turned off. The scripts in the 'examples' directory have been updated to reflect the new additions. They should be very helpful in getting you started. Please read the manual for info on the new additions.