#ifndef __OpenCSG__scissor_memo_h__
#define __OpenCSG__scissor_memo_h__
#include "opencsgConfig.h"
#include "area.h"
#include "channelManager.h"
#include <vector>
namespace OpenCSG {
class ScissorMemo {
public:
ScissorMemo();
void store(Channel);
void recall(Channel);
void enableScissor() const;
void disableScissor() const;
bool isDepthBoundsTestEnabled() const;
void enableDepthBounds() const;
void enableDepthBoundsBack() const;
void enableDepthBoundsFront() const;
void disableDepthBounds() const;
void setIntersected(const std::vector<Primitive*>& primitives);
void setCurrent(const std::vector<Primitive*>& primitives);
const NDCVolume& getIntersectedArea() const;
const NDCVolume& getCurrentArea() const;
protected:
void calculateArea();
private:
ScissorMemo(const ScissorMemo&);
ScissorMemo& operator=(const ScissorMemo&);
NDCVolume mIntersection;
NDCVolume mCurrent;
NDCVolume mArea;
std::vector<NDCVolume> mScissor;
bool mUseDepthBoundsTest;
};
}
#endif