// @(#)root/gl:$Id$
// Author:  Matevz Tadel, Feb 2007

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGLSelectBuffer
#define ROOT_TGLSelectBuffer

#include <Rtypes.h>

class TGLSelectRecordBase;

#include <vector>

/**************************************************************************/
// TGLSelectBuffer
/**************************************************************************/

class TGLSelectBuffer
{
protected:
   Int_t   fBufSize;  // Size of buffer.
   UInt_t* fBuf;      // Actual buffer.

   Int_t   fNRecords; // Number of records as returned by glRenderMode.

   typedef std::pair<UInt_t, UInt_t*>  RawRecord_t;
   typedef std::vector<RawRecord_t>   vRawRecord_t;

   vRawRecord_t fSortedRecords;

   static Int_t fgMaxBufSize;

public:
   TGLSelectBuffer();
   virtual ~TGLSelectBuffer();

   Int_t   GetBufSize()  const { return fBufSize; }
   UInt_t* GetBuf()      const { return fBuf; }
   Int_t   GetNRecords() const { return fNRecords; }

   Bool_t CanGrow();
   void   Grow();

   void ProcessResult(Int_t glResult);

   UInt_t* RawRecord(Int_t i) { return fSortedRecords[i].second; }

   Int_t   SelectRecord(TGLSelectRecordBase& rec, Int_t i);

   ClassDef(TGLSelectBuffer, 0) // OpenGL select buffer with depth sorting.
};

#endif
 TGLSelectBuffer.h:1
 TGLSelectBuffer.h:2
 TGLSelectBuffer.h:3
 TGLSelectBuffer.h:4
 TGLSelectBuffer.h:5
 TGLSelectBuffer.h:6
 TGLSelectBuffer.h:7
 TGLSelectBuffer.h:8
 TGLSelectBuffer.h:9
 TGLSelectBuffer.h:10
 TGLSelectBuffer.h:11
 TGLSelectBuffer.h:12
 TGLSelectBuffer.h:13
 TGLSelectBuffer.h:14
 TGLSelectBuffer.h:15
 TGLSelectBuffer.h:16
 TGLSelectBuffer.h:17
 TGLSelectBuffer.h:18
 TGLSelectBuffer.h:19
 TGLSelectBuffer.h:20
 TGLSelectBuffer.h:21
 TGLSelectBuffer.h:22
 TGLSelectBuffer.h:23
 TGLSelectBuffer.h:24
 TGLSelectBuffer.h:25
 TGLSelectBuffer.h:26
 TGLSelectBuffer.h:27
 TGLSelectBuffer.h:28
 TGLSelectBuffer.h:29
 TGLSelectBuffer.h:30
 TGLSelectBuffer.h:31
 TGLSelectBuffer.h:32
 TGLSelectBuffer.h:33
 TGLSelectBuffer.h:34
 TGLSelectBuffer.h:35
 TGLSelectBuffer.h:36
 TGLSelectBuffer.h:37
 TGLSelectBuffer.h:38
 TGLSelectBuffer.h:39
 TGLSelectBuffer.h:40
 TGLSelectBuffer.h:41
 TGLSelectBuffer.h:42
 TGLSelectBuffer.h:43
 TGLSelectBuffer.h:44
 TGLSelectBuffer.h:45
 TGLSelectBuffer.h:46
 TGLSelectBuffer.h:47
 TGLSelectBuffer.h:48
 TGLSelectBuffer.h:49
 TGLSelectBuffer.h:50
 TGLSelectBuffer.h:51
 TGLSelectBuffer.h:52
 TGLSelectBuffer.h:53
 TGLSelectBuffer.h:54
 TGLSelectBuffer.h:55
 TGLSelectBuffer.h:56
 TGLSelectBuffer.h:57
 TGLSelectBuffer.h:58
 TGLSelectBuffer.h:59
 TGLSelectBuffer.h:60