softwareRenderer.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef SRENDERER_H
  2. #define SRENDERER_H
  3. #include "rasterizer.h"
  4. #include "buffer.h"
  5. #include "model.h"
  6. #include "camera.h"
  7. class SoftwareRenderer {
  8. public:
  9. //Dummy Constructor / Destructor
  10. SoftwareRenderer();
  11. ~SoftwareRenderer();
  12. //Creates all buffers and preps everything for for rendering
  13. bool startUp(int w, int h);
  14. void shutDown();
  15. //Overview:
  16. //01.-Gets pointers to render data form mesh
  17. //02.-Builds MVP
  18. //03.-Iterates through all triangle faces
  19. //04.-Runs backface culling algo
  20. //05.-Applies vertex shader per vertex
  21. //06.-Performs clipping of triangles outside frustrum
  22. //07.-Applies perspective divide
  23. //08.-Sends to triangle rasterizer
  24. //09.-NDC -> viewport transform
  25. //10.-Iterates through triangle bounding box
  26. //11.-Calculates barycentric coordinates
  27. //12.-Culls pixels outside of triangle or screen
  28. //13.-Runs fragment shader
  29. //14.-zBuffer update
  30. //15.-Writes to frame buffer
  31. //16.-Swap buffer
  32. void drawTriangularMesh(Model * currentModel);
  33. void clearBuffers();
  34. //Returns pixel buffer
  35. Buffer<Uint32>* getRenderTarget();
  36. void setCameraToRenderFrom(Camera * camera);
  37. private:
  38. //Buffer methods
  39. bool createBuffers(int w, int h);
  40. //Primitive level methods
  41. void buildTri(Vector3i &f, Vector3f *trianglePrim, std::vector<Vector3f> &vals);
  42. void perspectiveDivide(Vector3f *clippedVertices);
  43. //Culling and clipping methods
  44. bool backFaceCulling(Vector3f *trianglePrim, Vector3f &viewDir);
  45. bool clipTriangles(Vector3f *clipSpaceVertices);
  46. //Pointer to the scene's target camera
  47. Camera * mCamera;
  48. bool startUpComplete = false;
  49. Buffer<float> * zBuffer;
  50. Buffer<Uint32> * pixelBuffer;
  51. };
  52. #endif