3 - Replace assets with completely original ones, rerender images/animations.
5 - Add optional functions (macro defs.) that get called during various rendering
6 steps, to e.g. be able to analyze and visualize rendering step by step.
8 - Benchmarking in test.c.
12 - Optional OpenGL acceleration, perhaps a separate header file with the same
13 API. How this can work:
15 Have a new accelerated render scene function that in the first pass uses OGL
16 to render info about pixels (barycentric, depth, ...) to a 2D "screen" array
17 (g buffer), then in the second pass loop over these pixels and on each
18 rendered pixel call the user pixel funct. Basically deferred rendering in
19 which the first pass is done with OGL.
21 - Helper functions for e.g. retrieving and caching UV coords etc. Maybe these
22 should be in a separate file? DONE
24 - objtool: An option to parse material groups and generate an array of
25 per-triangle material indices. DONE
27 - PC == 2 (and possibly 1) could likely be accelerated by not using interpolate
28 functions, but rather FastLerStates for the values recomputed after each
29 row segment. DONE (doesn't work
32 - function for computing normals and lighting
35 - back-to-front (slower, better memory efficiency) DONE
36 - front-to-back (faster, but needs 1bit stencil buffer) DONE
38 - function to set/clear stencil buffer -- can be useful
40 - function to map one point in 3D space to screen, along with size (for mapping
41 billboards/sprites etc.) DONE
43 - Optimize persp. correction!
45 - Create and use the same function for determining CW/CCW AND left/right vertex
46 determination in triangle drawing. DONE
48 - Check (and possibly fix) if any barycentric coord ever exceeds the range
49 <0,255> due to rounding errors etc. DONE
51 - dithered barycentric interpolation function that is faster than normal
52 interpolation -- it will randomly picky one of three values, with greater
53 probabilities at greater coords
55 - option to disable baycentric coordinates computing DONE
59 - reduced (resolution and precision) DONE
60 - more reduced (4-bit)
62 - MipMapping? Add triangle size to pixelInfo. DONE
64 - perspective correction modes:
69 - predefined 3D shapes:
76 - Depth computation during rasterization -- this should be an optional thing,
77 specified with a define (S3L_COMPUTE_DEPTH), which may be turned on
78 automatically for some modes (e.g. Z-buffer). It should be computed by the
79 fast lerp and passed in the PixelInfo struct. DONE
81 - Python tool to convert obj to C array DONE
83 - Python tool to convert texture images to C array DONE
87 - game-like demo (GTA-style, Quake style etc.) DONE
88 - offline HQ (lerp texuring, normal mapping, reflections, ...) rendering
89 to PPM image file DONE
90 - test offline rendering of a high-poly model (see how very small tris
93 - drawModel: create an option that would use a cache to not transform the same
94 point twice DONE (doesn't work, tried)
96 - Optional rendering stats (FPS, rendered triangles, ...).
98 - profiling functions for optimization
104 - valgrind (and similar) checks
106 - write tests/benchmarks