# RasterIver, a GPU Accelerated Rendering Engine
#### RasterIver?
Rasterizer + Iver = RasterIver
### Requirements
#### To Run
- SDL2
- SDL2 TTF
- OpenCL Runtimes
#### To Build
- SDL2
- SDL2 TTF
- OpenCL Developer Libraries
- ROCm if using AMD
- CUDA if using NVIDIA
# Todo
- [x] make todo list
- [ ] function to request a mesh. I.E., request a number of polygons/verticies (maybe from presets? planes, cubes, idk) and be able to edit them on the fly. Useful for dynamic terrain or something like that
- [x] texture support
- [x] fix interpolation issue with UV maps (and probably normals and Z values too)
- [ ] fix horribly named variables in request object functions
- [ ] include rasteriver.h in the kernels for better code updatability
- [ ] make kernels not be in strings (read the file at compile time and put it inside rasteriver.c as a string? put it in a header like how it is now?)
- [ ] change all iterator variables in for loops to have "i_" before it's variable name
- [ ] add descriptions to RI functions
- [ ] make a function call stack to review where errors happen or just debug stuff
- [ ] optimize object memory usage by not loading object data multiple times when the same object is requested
- [ ] add checks for invalid/nonexistant files (files like object files & texture files)
- [x] perspective
- [x] euler rotation
- [ ] quaternion rotation
- [ ] sheer transform (and other fancy ones?)
- [ ] simple lighting using normals
- [ ] complex lighting using rays for shadows and stuff
- [ ] polygon clipping by subdividing
- [x] flag for using CPU instead of GPU
- [ ] actually acurate FPS cap
- [ ] make a function to return a pointer to the last SDL_event (or copy it doesnt really matter)
- [ ] make an option for multiple cameras, or defining a camera. I want to be able to write it to a "texture" in menory and have objects use it as their texture
- [ ] add materials/shaders that define unlit, lit, textures, and whatever else. Maybe have shader kernels? I have no idea how you would implement that but it sounds cool
- [ ] make the returned array from RI_RequestObjects easier to write to I.E., not a 1D array. Maybe have it so you could do objects[obj #].x_position or something like that. I wonder if I could implement functions with that, too, so you could do objects.get_first_element()
- [ ] object higherarchies (maybe not. This is moving towards game engine territory. Once I get this into a working release, I'll start working on a game engine)
- [ ] deltaTime variable or function. (function that returns pointer? function that returns the last deltatime value?)