rendering-in-cgi/Assignments/Assignment3/application_integrator.h
2024-06-26 16:50:43 +02:00

42 lines
1.2 KiB
C++

#pragma once
#include "helper.hpp"
#include "distribution.hpp"
#include "sampler.h"
#define NUM_CHAINS 20
class ApplicationIntegrator: public Application {
public:
ApplicationIntegrator(int argc, char** argv, const std::string& name);
virtual ~ApplicationIntegrator() = default;
protected:
virtual void render(int* pixels, int width, int height, float time, const ISPCCamera& camera) override;
virtual void drawGUI() override;
virtual void resetRender() override;
bool bMetropolis = false;
void mltRender(int* pixels, int width, int height, float time, const ISPCCamera& camera);
void mcRender(int* pixels, int width, int height, float time, const ISPCCamera& camera);
/* renders a single screen tile */
void mcRenderTile(int taskIndex, int threadIndex, int* pixels, const unsigned int width,
const unsigned int height, const float time, const ISPCCamera& camera, const int numTilesX,
const int numTilesY);
std::atomic<size_t> accepted = 0;
std::atomic<size_t> luminance_count = 0;
float large_step_global_luminance = 0.0;
std::mutex large_step_global_luminance_mutex;
MLTRandomSampler chains[NUM_CHAINS];
float last_l[NUM_CHAINS];
int chain_lengths = 100000;
float small_step_size = 0.01;
float large_step_probability = 0.02;
};