#ifndef AliEveTPCSector2DGL_H
#define AliEveTPCSector2DGL_H
#include <TGLObject.h>
class TGLViewer;
class TGLScene;
#include <EveDet/AliEveTPCSectorData.h>
class AliEveTPCSector2D;
class AliEveTPCSector2DGL : public TGLObject
{
public:
AliEveTPCSector2DGL();
virtual ~AliEveTPCSector2DGL();
virtual Bool_t SetModel(TObject* obj, const Option_t* opt=0);
virtual void SetBBox();
virtual Bool_t SupportsSecondarySelect() const { return kTRUE; }
virtual void ProcessSelection(TGLRnrCtx & rnrCtx, TGLSelectRecord & rec);
static void TraceStepsUp (const AliEveTPCSectorData::SegmentInfo& s);
static void TraceStepsDown(const AliEveTPCSectorData::SegmentInfo& s);
protected:
virtual void DirectDraw(TGLRnrCtx & rnrCtx) const;
void LoadPadrow(AliEveTPCSectorData::RowIterator& iter, Int_t row, Int_t colOff) const;
void CreateTexture() const;
void DisplayTexture(const AliEveTPCSectorData::SegmentInfo& seg,
Int_t startCol, Int_t startRow) const;
void DisplayQuads(const AliEveTPCSectorData::SegmentInfo& seg,
Int_t startCol, Int_t startRow) const;
void DisplayNamedQuads(const AliEveTPCSectorData::SegmentInfo& seg,
Int_t startCol, Int_t startRow) const;
void DisplayFrame() const;
UChar_t* GetRowCol(Int_t row, Int_t col) const;
AliEveTPCSector2D *fSector;
mutable AliEveTPCSectorData *fSectorData;
mutable UChar_t *fImage;
mutable UInt_t fTexture;
mutable UInt_t fRTS;
static const Int_t fgkTextureWidth;
static const Int_t fgkTextureHeight;
static const Int_t fgkTextureByteSize;
private:
AliEveTPCSector2DGL(const AliEveTPCSector2DGL&);
AliEveTPCSector2DGL& operator=(const AliEveTPCSector2DGL&);
ClassDef(AliEveTPCSector2DGL, 0);
};
inline UChar_t* AliEveTPCSector2DGL::GetRowCol(Int_t row, Int_t col) const
{
return fImage + 4*(row*fgkTextureWidth + col);
}
#endif