#pragma once #include "RenderingRun.h" /** @brief Base abstract class __declspec( dllexport ) that defines a rendering process of a light volume texture. Light volumes are used when self shadowing of particle systems should be simulated. Each layer of the volume represents the amount of transmitted light. The current implementation uses four grayscale layers, and places these layers to the four channel of the light volume texture. */ class __declspec( dllexport ) LightVolumeRenderingRun : virtual public RenderingRun { public: /** @brief Constructor. @param startFrame adds an offset to the current frame number to help evenly distribute updates between frames @param updateInterval update frequency @param resolution the resolution of the light volume texture @param textureDepth the number of layers (should be set to 1) */ LightVolumeRenderingRun(unsigned long startFrame, unsigned long updateInterval, unsigned int resolution, unsigned int textureDepth) :RenderingRun(startFrame, updateInterval) { this->resolution = resolution; this->textureDepth = textureDepth; } virtual ~LightVolumeRenderingRun(){} protected: //inherited virtual void updateFrame(unsigned long frameNum) = 0; /** @brief Creates a light volume map. */ virtual inline void createLightVolumeMap() = 0; /** @brief the resolution of the light volume map */ unsigned int resolution; /** @brief number of layers (should be 1) */ unsigned int textureDepth; };