Skip to content

Experimenting with trying to write an efficient software rendering using multi-threading and SIMD intrinsics.

Notifications You must be signed in to change notification settings

ArthurKValladares/SoftwareRendering

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Software Rendering

CPU-only Software Rendererer, using hand-rolled SIMD types, and concurrency structures (i.e thread Pool, thread-safe queue, etc. Includes some simple debug features like wireframe drawing, overdraw display, depth buffer display, etc. Only supports obj models, and basic materials/diffuse textures. In orde to efficiently rasterize a larger number of triangles, we partition the screen space into several tiles and sort the triangles into their respective tiles, so the work of rasterizing them (using an efficient scanline technique) can be easily multi-treaded.

Model Rendering

teapot box

Wireframe Rendering

teapot_w box_w

Overdraw Indicator

Pixels in green were only written to once, pixels in red were written to more than once, either due the pixel being occluded by a triangle closer to the camera in the rendering process, or due to the edges of two connected triangles occupying overlapping pixels. teapot_o

Depth Buffer Rendering

teapot_d

Building and Running

We provide a build.bat script for building on Windows, and a build.sh file for building on MacOS. The output files are saved to ${project_dir}/build.

About

Experimenting with trying to write an efficient software rendering using multi-threading and SIMD intrinsics.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published