#ifndef DEPTHOFFIELDSHADER_H #define DEPTHOFFIELDSHADER_H #include "camera/camera.h" #include #include "renderer/renderer.h" #include "scene/simplescene.h" class DOFRenderer : public Renderer { static void renderThread(const Scene *scene, const Camera *camera, Texture *image, const DOFRenderer *renderer, int width, int widthStep, int widthOffset, int height, int heightStep, int heightOffset, std::atomic *k, const int stepSize); public: // Constructor DOFRenderer(float _aperture, int _secondaryRayCount, float _focalLength); ~DOFRenderer() override = default; //Render Functions Texture renderImage(Scene const &scene, Camera const &camera, int width, int height) override; // DOF sampler Color sample(const Ray &ray, const Scene& scene, const Camera& camera) const; private: float aperture, focalLength; int numSamples; static std::random_device rd; static std::mt19937 gen; }; #endif