features: - presets that can be optionally selected and will configure other constants (e.g. a "low memory sort strategy" will turn z-buffer off and turn back-to-front sorting on). - function for computing normals and lighting - triangle sorting: - back-to-front (slower, better memory efficiency) DONE - front-to-back (faster, but needs 1bit stencil buffer) DONE - function to set/clear stencil buffer -- can be useful - dithered barycentric interpolation function that is faster than normal interpolation -- it will randomly picky one of three values, with greater probabilities at greater coords - option to disable baycentric coordinates computing DONE - Z-buffer: - full DONE - reduced (resolution and precision) DONE - more reduced (4-bit) - MipMapping? Add triangle size to pixelInfo. DONE - perspective correction modes: - none DONE - full DONE - triangle subdivision (each triangle side will be subdivided after reaching a defined length, which will be measured by Chebyshev or similarly fast distance). - also offer some approximation function? - predefined 3D shapes: - cube DONE - sphere - cylinder - pyramid - plane - Depth computation during rasterization -- this should be an optional thing, specified with a define (S3L_COMPUTE_DEPTH), which may be turned on automatically for some modes (e.g. Z-buffer). It should be computed by the fast lerp and passed in the PixelInfo struct. DONE - Python tool to convert obj to C array DONE - create demos - drawModel: create an option that would use a cache to not transform the same point twice - Optional rendering stats (FPS, rendered triangles, ...). - profiling functions for optimization bugs: - Determining CW/CCW for a triangle is not 100% exact, sometimes leaves holes in models (some very thin triangles)! repeated: - valgrind (and similar) checks - optimize - write tests/benchmarks