

#pragma once

#include <osg/Export>

#include <string>

namespace osg
{
   class GLExtensions;

   class OSG_EXPORT GlDebuggingState
   {
   public:
      static bool debuggingEnabled(void);
      static void setDebuggingEnabled(bool val);
   protected:
      static bool theDebuggingEnabled;
   };

   class OSG_EXPORT GlScopedDebugGroup
   {
   public:
      GlScopedDebugGroup(const GLExtensions* ext, unsigned int id, const char* message);
      virtual ~GlScopedDebugGroup();


   protected:
      GlScopedDebugGroup();
      const GLExtensions* ext;
   };

   class OSG_EXPORT GlDebugGroup
   {
   public:
      GlDebugGroup(unsigned int id, const char* message);
      virtual ~GlDebugGroup();

      virtual void setId(unsigned int id);
      virtual unsigned int id(void) const;

      virtual void setMessage(const char* message);
      virtual const std::string& message(void) const;

      virtual void start(const GLExtensions* ext);
      virtual void stop(const GLExtensions* ext);

   protected:
      GlDebugGroup();
      unsigned int myId;
      std::string myMessage;

   };
}
