Commit Graph

210 Commits

Author SHA1 Message Date
nick black
3cfe88ee0c ncscale_e enumeration for ncvisuals #168 2019-12-19 22:20:18 -05:00
nick black
97ecbdb0e5
sigh, probably gotta kill DMCA lure 2019-12-18 05:31:29 -05:00
Nick Black
957549105b
Wide character rigor (#117) (#157)
* unidamage PoC
* add cell_load_simple()
* clear CELL_WIDEASIAN_MASK in cell_load()
* split out render code
* add CELL_SIMPLE_INITIALIZER
* widecolor: fix message plane
* widecolor: simplify color increments
* document wide character handling
* unit tests for wide obliteration #117
* widechar obliteration hardening #117
* widecolor -> widechomper, update man page
2019-12-18 04:38:43 -05:00
nick black
48adc31260 unit test for z-axis rendering #146 2019-12-16 23:20:13 -05:00
nick black
599b7a6d9a z-axis unit tests #71 2019-12-16 21:31:18 -05:00
nick black
dac4f78ee6 basic unit tests for z-axis #71 2019-12-16 21:31:18 -05:00
nick black
58cc6927ac 256-color cube is not ansi, don't muddy the waters 2019-12-16 21:31:18 -05:00
nick black
65858b4495 unit test 256-index quantizing #4 2019-12-16 21:31:18 -05:00
nick black
a916d929db
RGBtoANSI: fixup lower grey onversions, looks reasonable now #4 2019-12-15 23:13:13 -05:00
nick black
cfccd0c39c
RGBtoANSI unit test, fix up bases 2019-12-15 21:33:26 -05:00
Nick Black
2de07f8a48
Per-line damage map, ~50% increase in FPS on notcurses-demo (#144)
Implement a fairly conservative, line-granularity, two-level damage map. One on the overall notcurses object is dirtied by planar moves, creations, deletions, and resizes. One on each ncplane is dirtied by glyph output, media rendering, fades, and erasure. #83 This has some definite false positives: a hidden plane which moves will damage a bunch of lines unnecessarily. For now, don't do things like that :D.

Extra byte per line per plane, shouldn't be a problem.

Two new stats for cell elisions and emissions

Allow keypress to interrupt view-demo

ncvisual_stream() now allows a callback per frame

Allow ncvisual_open() to create its own, perfectly-sized, ncplane #128

Typical performance prior to this PR:

4655 renders, 18.3s total (0.000305s min, 0.196s max, 0.0039s avg 253.9 fps)
401046.505KB total (9.688KB min, 139.697KB max, 86.15KB avg)
Emits/elides: def 1082115/116196 fg 10547624/7236460 bg 10602717/6208644
 Elide rates: 9.70% 40.69% 36.93%
4680 renders, 18.4s total (0.000285s min, 0.15s max, 0.0039s avg 255.0 fps)
403078.188KB total (9.688KB min, 139.697KB max, 86.13KB avg)
Emits/elides: def 1088994/116196 fg 10604983/7267750 bg 10655426/6237472
 Elide rates: 9.64% 40.66% 36.92%
4699 renders, 17.8s total (0.000227s min, 0.192s max, 0.0038s avg 263.8 fps)
403266.907KB total (9.688KB min, 139.697KB max, 85.82KB avg)
Emits/elides: def 1086511/116196 fg 10601709/7359116 bg 10661910/6326744
 Elide rates: 9.66% 40.97% 37.24%

After this PR:

5625 renders, 15s total (9.36e-05s min, 0.187s max, 0.0027s avg 375.2 fps)
168365.640KB total (0.930KB min, 139.600KB max, 29.93KB avg)
Emits/elides: def 310575/116196 fg 4486002/4473416 bg 4116835/4630666
 Elide rates: 27.23% 49.93% 52.94%
Cells emitted; 9928000 elided: 12572000 (55.88%)
5642 renders, 14.2s total (9.17e-05s min, 0.154s max, 0.0025s avg 397.0 fps)
168669.009KB total (0.605KB min, 139.600KB max, 29.90KB avg)
Emits/elides: def 310819/116196 fg 4499833/4482134 bg 4118562/4652470
 Elide rates: 27.21% 49.90% 53.04%
Cells emitted; 9962160 elided: 12605840 (55.86%)
5650 renders, 14.3s total (0.000118s min, 0.143s max, 0.0025s avg 395.7 fps)
169461.884KB total (0.860KB min, 139.600KB max, 29.99KB avg)
Emits/elides: def 305431/116196 fg 4515396/4456376 bg 4149967/4613668
 Elide rates: 27.56% 49.67% 52.65%
Cells emitted; 9945200 elided: 12654800 (55.99%)

on netcurses-demo, we're eliding about half of the total cells via this damage map. that's pretty fucking sweet! FPS increase of about 50% -- I'll take that any day of the fuckin' week, boyo. w00t!

https://www.youtube.com/watch?v=XbGs_qK2PQA
2019-12-15 13:46:47 -05:00
nick black
91f74901c2
verify cell_load() of ascii results in simple #140 2019-12-14 18:02:58 -05:00
Nick Black
8bd8055f72
Distinct fg/bg alpha channels #139 (#141)
* improved alpha macros
* demo: use new alpha macros
* add ncplane_set_*_alpha()
* explicitly set fg for uniblock
* outro: background is a space #139
* distinct alpha channels for fg/bg #139
* rename 'background' cell to 'default' #142
* doc palette fades
2019-12-14 17:34:10 -05:00
Nick Black
ff463d464e
Channels API sanity #119 (#138)
* orthogonalize channel/channels/cells APIs #119
* sync README.md with new ncplane channels api #119
2019-12-14 05:33:34 -05:00
nick black
a1c90a347a
add ncplane_box() corner masking 2019-12-13 19:40:22 -05:00
nick black
6e49bbce45
panelreel: don't treat putc() return as bool #132 2019-12-13 15:28:11 -05:00
nick black
0001fa955d
on a wide enough screen, this test breaks 2019-12-12 17:05:17 -05:00
nick black
7c72b0ce83
emoji unit test 2019-12-12 16:14:01 -05:00
nick black
23f8a070b3
unit tests: don't try to close a NULL outfp_ 2019-12-12 09:08:06 -05:00
nick black
ca2f0471c3
setlocale(LC_ALL, "") everywhere 2019-12-12 08:59:16 -05:00
nick black
1821867e35
move outfp out of notcurses_options #130 2019-12-12 07:59:48 -05:00
nick black
64462a11ac
for real tho 2019-12-10 16:21:32 -05:00
nick black
206db6dedd
sgr unit tests 2019-12-10 08:50:32 -05:00
nick black
7eafdd6772
fix up unit testing sanity 2019-12-10 06:59:35 -05:00
Nick Black
0d2c43603b
Luigi in Mega Man world (#127)
* uniblock-demo: reset background to black
* warning about quantization
* some luigi love
* update cell documentation
* add unit test for move of stdplane
* MoveToLowerRight unit test
* ncplane_move_yx(): error to move stdscr
* better box permutations test
* luigi in megaman2 world
* stats: don't print 'em if we haven't got 'em
2019-12-10 06:02:49 -05:00
nick black
3085a5db31
fix up EmitWchar unit test 2019-12-08 14:26:35 -05:00
Nick Black
38a10d9065
Transparency via alpha channels (#122)
* outro: bevel message window's corners
* egcspool: use full 25 bits available for 32MB pools
* render: remove unused inheritance mask
* interfaces + unit tests for 2-bit alpha
* notcurses_*g_alpha() acccessors
* cell alpha + unit tests
* panelreel: support a background channel
* notcurses: transparency via alpha channel
* remove unused CELL_ALPHA_MASK
2019-12-08 13:00:19 -05:00
nick black
756eebc060
add ncplane_putwegc() and unit test #120 2019-12-07 23:00:18 -05:00
nick black
1b1729133c
add ncplane_putwstr(), add unit test #120 2019-12-07 20:37:25 -05:00
nick black
7566af57e3
introduce ncplane_set_[fb]g 2019-12-07 17:55:23 -05:00
nick black
8afcd04446
sync cell/ncplane fg/bg API naming 2019-12-06 22:45:08 -05:00
nick black
df93b67b4e
fix up subject of libav test 2019-12-06 14:41:49 -05:00
nick black
e1356a2183
install man pages 2019-12-05 10:12:47 -05:00
nick black
bacc69380a
uniblock: restore backgrounds 2019-12-05 04:18:43 -05:00
nick black
af7ca02f36 Decode input escape sequences to special keys #78
Add the necessary input buffer, non-blocking reads, escape trie,
and unit tests to support extended keys, including arrow keys.
Update notcurses-input to print Unicode Control Glyphs instead of
a blank space for control chars.
2019-12-04 23:46:24 -05:00
Nick Black
c0a1ee0f31
Spruce up slider demo, fix up uniblock demo #66 #72 (#112)
Slider demo: paint chunks in a pattern, then shuffle them up #72
Right-to-left unit tests #66
Fix up damage to uniblock demo using cup explicit cursor move #66
2019-12-04 10:00:23 -05:00
nick black
1bb114dbdc box unit tests: enlarge pattern #42 2019-12-04 04:50:26 -05:00
nick black
f40f8cfb15 use background in fade unit tests 2019-12-04 04:50:26 -05:00
nick black
ae711b7e75 h/vline gradient unit tests #42 2019-12-04 04:50:26 -05:00
nick black
b711eaeedd box gradient unit tests #42 2019-12-04 04:50:26 -05:00
nick black
bdc841e46e ncplane_box: support box mask ctlword #42 2019-12-04 04:50:26 -05:00
nick black
a55e02836b ncplane_box: accept ctlword (#42) 2019-12-04 04:50:26 -05:00
Nick Black
8e8cb92c54
Improved cell API #97 (#103)
* cell/ncplane: simplify box API (#97)
* widecolor: use new box api (#97)
* uniblock: use new box API #97
* intro: use new box api #97
* panelreel: use new box api
* boxdemo: use new box API #97
* sliding: use new box API #97
* maxcolor: use new box api #97
* factor out notcurses_channel_prep() #97
* maxcolor: use new channel API #97
* sliding: use new channel API #97
* intro: use new channel API #97
* new output functions with no need for a cell
* add ncplane_putegc() and ncplane_putsimple(). the former takes an EGC, the latter a simple char less than 0x80. (#97)
* cell_prime: directly load all parts of a cell with immediates
* widecolor: use new output API #97
* boxdemo: properly initialize cells
* slider: total time cap of 5 * delaydemo
* maxcolor: use new output API #97
2019-12-03 18:40:41 -05:00
nick black
e21594b4e9
ncplane_*_box_cells() -> cells_*_box() #97 2019-12-03 14:29:48 -05:00
nick black
415e238b3d transparent planes #10 2019-12-02 05:49:13 -05:00
nick black
2aadd096c0 lookin' good atl 2019-12-02 05:49:13 -05:00
nick black
be5ce9051d
outro 2019-12-02 05:42:10 -05:00
nick black
0e4080456c fade unit tests #40 2019-12-02 03:44:11 -05:00
nick black
999f33a2ee
0.3.0-pre 2019-12-01 20:56:42 -05:00
Nick Black
426f632300
Panelreels port #52 (#90)
Port of panelreels, unit tests, and panelreel-demo from outcurses #52.
Doesn't completely work yet, but is surprisingly close!
2019-12-01 17:48:38 -05:00
nick black
8e9ed2b8a1 libav tests: check dimensions 2019-12-01 15:29:59 -05:00
nick black
28fac736bb notcurses-view: stop() before printing error
implement ncvisual_render()
2019-12-01 15:29:59 -05:00
nick black
d106ebf0d3 libav: check for AVERROR_EOF #86 2019-12-01 15:29:59 -05:00
nick black
531340a145 libav: return averr to caller #86 2019-12-01 15:29:59 -05:00
Nick Black
a7d50b557d
ncplane_at_cursor (#76), CCCflag, nonblocking stdin (#78) (#84)
* put stdin into nonblocking mode, retry on short write to stdout #78
* wrap getc_blocking() around a poll #78
* get CCCflag from terminfo. stop clearing the screen in render/startup
* implement ncplane_at_cursor() #76
* ncplane_at_cursor() unit test for simples #76
* PlaneAtCursorComplex unit test #76
* PlaneAtCursorInsane() unit test #76
* nplane_at_cursor: return number of bytes, not just 0/-1
* uniblock-demo: add a bunch of pages from Unicode 12
* demo: make -d delay multiplier a float
* egcpool: check offset against poolsize in check_validity()
* notcurses_init(): set smkx/rmkx to NULL with pass_through_esc
* PlaneAtCursorAttrs unit test #76
* add ncplane_styles() accessor
2019-11-30 22:53:24 -05:00
nick black
9fe6c152a9 enhance SetStyles unit test 2019-11-29 05:55:41 -05:00
nick black
4cc0ce037d read terminfo entries for keypad #78 2019-11-29 05:55:41 -05:00
nick black
8c6d0495ee
input: decode special keys, call notcurses_resize() #79 2019-11-29 03:56:53 -05:00
nick black
e391bfbb81
input: add pass_through_esc option, otherwise run smkx #78 2019-11-29 03:26:37 -05:00
nick black
17d7d8a8c5
release guide 2019-11-28 22:21:16 -05:00
Nick Black
7f9ac490b0
ncplane_resize(), slider demo (#64) (#74)
* sliding: bounding box around puzzle
* slider: make moves, deleting planes #61
* implement z-index move functions
* demo: allow demos to be chosen via command-line option
* allow default bg/fg to be explicitly chosen
* ncplane_resize() unit test #64
* useful links
* slider: use random colors
* use find_above() in ncplace_destroy()
* ncplane_resize() work #64
2019-11-28 22:08:26 -05:00
nick black
742a27fd00 ncplane unit test tiling the screen #26 2019-11-28 15:58:53 -05:00
nick black
f65d168d83 notcurses_render(): call term_setstyles() for sgr stuff #11 2019-11-28 15:58:53 -05:00
nick black
d5cc65715e ncplane userptr routines + unit tests #26 2019-11-28 11:43:49 -05:00
nick black
5dfb07183c libav: throw an swscaler in the mix #61 2019-11-27 18:32:46 -05:00
nick black
d423978e1b run ncvisual_decode() in libav unit tests 2019-11-27 18:32:46 -05:00
nick black
cf557ff500 ncurses-view #61 2019-11-27 18:32:46 -05:00
nick black
3ef57d734e unit tests for egcpool removal #59 2019-11-27 18:32:46 -05:00
nick black
2080e0bff3 unit tests for exercised egcpool #59 2019-11-27 18:32:46 -05:00
Nick Black
ba648dbd74
What a miserable evening tracking #57 (#60)
* widecolor-demo: don't emit spaces
* notcurses_init: newline before splash
* boxdemo: ncplane_erase() on entry #58
* uniblock-demo: print even wide chars #49
2019-11-27 10:43:03 -05:00
nick black
f514fe234c switch demos to ncplane_rounded_box_cells() 2019-11-26 21:50:50 -05:00
nick black
728d4775b6
initialize nc_ in notcurses tests #54 2019-11-26 20:49:55 -05:00
nick black
9f334f88df
libav: don't require a notcurses ctx for tests #54 2019-11-26 20:40:28 -05:00
nick black
80519c92fa libav: add LoadVideo unit test #35 2019-11-26 20:23:40 -05:00
nick black
66432c37e1 libav: extract frame from AVFormatContext 2019-11-26 20:23:40 -05:00
nick black
f20e8fde4b add notcurses_image_open() #23 2019-11-26 20:23:40 -05:00
nick black
7aaa0fcce1
track wide char as reported by wcwidth(), add unit test #6 2019-11-26 07:14:44 -05:00
nick black
f67a97edfb
correctly handle ASCII + combining chars, add unit tests #36 2019-11-25 21:11:27 -05:00
nick black
94698a5982
add unit test for composed vs combined EGCs #36 2019-11-25 20:45:44 -05:00
nick black
0d1fbdff06 unit test for boxes outside planes #37 2019-11-25 19:52:11 -05:00
nick black
6f92ae92ab egcpool: unit tests for utf8 conversion #20 2019-11-25 13:40:43 -05:00
nick black
a2f4fae96a huh 2019-11-25 13:40:43 -05:00
nick black
ba08a6142e demo: call boxdemo 2019-11-24 18:38:27 -05:00
nick black
d400c79870 implement ncplane_box() and unit test #9 2019-11-24 18:38:27 -05:00
nick black
2b467c99af implement ncplane_vline() + unit test #9 2019-11-24 18:38:27 -05:00
nick black
e050770fde implement ncplane_hline() + unit test 2019-11-24 18:38:27 -05:00
nick black
0c262a3a6d implement ncplane_erase() #9 2019-11-24 18:38:27 -05:00
nick black
879009ff9a adapt test to new ncplane_putc() api 2019-11-24 16:11:35 -05:00
nick black
52e83dfcc2
Get UTF8 rendering properly #14 2019-11-24 14:00:48 -05:00
Nick Black
b93bcebf0b
Extended grapheme clusters (#15)
Introduce egcpool for attached storage
Hook up style support
Switch entirely to UTF-8 char from wchar_t (#14)
Pull out next EGC in cell_load (#14)
2019-11-24 12:36:46 -05:00
nick black
a509cb6320
someone set us up the bomb 2019-11-23 19:24:29 -05:00
nick black
e4f041f522
start moving to utf-8 from wchar_t #14 2019-11-23 18:34:06 -05:00
nick black
5129021480
add EmitWchar unit test 2019-11-23 12:52:09 -05:00
nick black
fd04c55d16
implement ncplane_putwstr #9 2019-11-23 12:28:42 -05:00
nick black
2f9821ce39
notcurses: interrogate terminfo for styles 2019-11-23 10:42:46 -05:00
Nick Black
7e92c8bb82
documentation and declarations (#13)
ncplane: flesh out API
ncplane: line and erase APIs
README.md: document differences from ncurses
notcurses_init(): print long term name
CMake: link librt into notcurses
cell: move functionality out to header
2019-11-23 09:05:32 -05:00
nick black
a8721df75a
ncplane: flesh out API 2019-11-22 22:47:12 -05:00
nick black
f07652f24b don't try to destroy nullptr ncplane in tests 2019-11-21 08:51:57 -05:00
nick black
c16b03cd9f ncplane: more basic unit testing 2019-11-21 08:51:57 -05:00
nick black
1fb1be6a4d ncplane: unit tests for rgb 2019-11-21 08:51:57 -05:00
nick black
691d3d97b8 some ncplane unit tests 2019-11-21 08:51:57 -05:00
nick black
a916c66052 introduce z-buffer of ncplanes 2019-11-21 08:51:57 -05:00
nick black
d3f9329737 notcurses_options: allow outfd to be specified 2019-11-21 08:51:57 -05:00
nick black
787c27a812
demo: always reset the terminal on error 2019-11-19 06:44:28 -05:00
nick black
0f6e19dd92
notcurses_setrgb(): plug into direct mode when RGB flag is set 2019-11-19 06:26:44 -05:00
nick black
8fe936ca4c
ftairs! we have discovered ftairs! 2019-11-19 05:33:38 -05:00
nick black
231be96714
skip tests if no TERM is defined 2019-11-18 20:57:33 -05:00
nick black
c1f4219dc1
notcurses_term_dimensions() + unit test 2019-11-17 10:25:40 -05:00
nick black
1fcae27627
just the basics 2019-11-17 09:53:59 -05:00
nick black
70df86ba17
version string, notcurses_version() 2019-11-17 05:04:41 -05:00