54   fMSCoverageSamples (0),
 
   75   static const std::string eh(
"TGLFBO::Init ");
 
   78   if (!GLEW_EXT_framebuffer_object)
 
   80      throw std::runtime_error(eh + 
"GL_EXT_framebuffer_object extension required for FBO.");
 
   90      if (nw != w || nh != 
h)
 
   99   if (ms_samples > 0 && ! GLEW_EXT_framebuffer_multisample)
 
  103         Info(eh.c_str(), 
"GL implementation does not support multi-sampling for FBOs.");
 
  117   glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &maxSize);
 
  118   if (w > maxSize || 
h > maxSize)
 
  120      throw std::runtime_error(eh + 
Form(
"maximum size supported by GL implementation is %d.", maxSize));
 
  127      if (GLEW_NV_framebuffer_multisample_coverage)
 
  130         glGetIntegerv(GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV, &n_modes);
 
  132         glGetIntegerv(GL_MULTISAMPLE_COVERAGE_MODES_NV, modes);
 
  134         for (
int i = 0; i < n_modes; ++i)
 
  150         Info(eh.c_str(), 
"InitStandard (no multi-sampling).");
 
  155   GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
 
  157   glBindFramebufferEXT (GL_FRAMEBUFFER_EXT,  0);
 
  158   glBindTexture        (GL_TEXTURE_2D,       0);
 
  162      case GL_FRAMEBUFFER_COMPLETE_EXT:
 
  164            printf(
"%sConstructed TGLFBO ... all fine.\n", eh.c_str());
 
  166      case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
 
  168         throw std::runtime_error(eh + 
"Constructed TGLFBO not supported, choose different formats.");
 
  172         throw std::runtime_error(eh + 
"Constructed TGLFBO is not complete, unexpected error.");
 
  219      glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 
fFrameBuffer);
 
  220      glBlitFramebufferEXT(0, 0, 
fW, 
fH, 0, 0, 
fW, 
fH, GL_COLOR_BUFFER_BIT, GL_NEAREST);
 
  223   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 
  231   glPushAttrib(GL_TEXTURE_BIT);
 
  233   glEnable(GL_TEXTURE_2D);
 
  237      glMatrixMode(GL_TEXTURE);
 
  240      glMatrixMode(GL_MODELVIEW);
 
  251      glMatrixMode(GL_TEXTURE);
 
  253      glMatrixMode(GL_MODELVIEW);
 
  263   glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 
fFrameBuffer);
 
  302   glGenRenderbuffersEXT(1, &
id);
 
  303   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 
id);
 
  310         glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, 
fMSSamples, format, 
fW, 
fH);
 
  314      glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, format, 
fW, 
fH);
 
  317   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, 
type, GL_RENDERBUFFER_EXT, 
id);
 
  329   glGenTextures(1, &
id);
 
  331   glBindTexture(GL_TEXTURE_2D, 
id);
 
  332   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
 
  333   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
  334   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 
  335   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 
  336   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 
fW, 
fH, 0, GL_RGBA,
 
  337                GL_UNSIGNED_BYTE, NULL);
 
  339   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
 
  340                             GL_TEXTURE_2D, 
id, 0);
 
void Info(const char *location, const char *msgfmt,...)
 
char * Form(const char *fmt,...)
 
static Bool_t fgMultiSampleNAWarned
 
void Unbind()
Unbind the frame-buffer object.
 
void UnbindTexture()
Unbind texture.
 
UInt_t CreateAndAttachRenderBuffer(Int_t format, Int_t type)
 
virtual ~TGLFBO()
Destructor.
 
void Init(int w, int h, int ms_samples=0)
Acquire GL resources for given width, height and number of multi-sampling samples.
 
UInt_t CreateAndAttachColorTexture()
Initialize color-texture and attach it to current FB.
 
void Bind()
Bind the frame-buffer object.
 
static void SetRescaleToPow2(Bool_t r)
Set state of fgRescaleToPow2 static member.
 
static Bool_t GetRescaleToPow2()
Return state of fgRescaleToPow2 static member.
 
void Release()
Release the allocated GL resources.
 
void BindTexture()
Bind texture.
 
static Bool_t fgRescaleToPow2
 
Double_t Log2(Double_t x)
 
Int_t CeilNint(Double_t x)