Add extra waiver
[small3dlib.git] / todo.txt
blob20159e1e5786b05f0465f217c8242c5e874be991
1 features:
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.
7   
8 - Benchmarking in test.c.
10 - Test on big endien.
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
30                                                                  for PC == 2,
31                                                                  tried)
32 - function for computing normals and lighting
34 - triangle sorting:
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
57 - Z-buffer:
58   - full                                  DONE
59   - reduced (resolution and precision)    DONE
60   - more reduced (4-bit)
62 - MipMapping? Add triangle size to pixelInfo.  DONE
64 - perspective correction modes:
65   - none                                    DONE
66   - full                                    DONE
67   - approximate                             DONE
69 - predefined 3D shapes:
70   - cube                                    DONE
71   - sphere
72   - cylinder
73   - pyramid
74   - plane
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
85 - create demos:
86   - model viewer                                   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
91     are rendered)
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
100 bugs:
102 repeated:
104 - valgrind (and similar) checks
105 - optimize
106 - write tests/benchmarks