//
//  Vrml 97 library
//  Copyright (C) 1998 Chris Morley
//
//  %W% %G%
//  VrmlNodeTexture.h

#ifndef  _VRMLNODETEXTURE_
#define  _VRMLNODETEXTURE_

#include "VrmlNode.h"
#include "VrmlSFString.h"

class VrmlNodePixelTexture;
class VrmlNodeImageTexture;

class VrmlNodeTexture : public VrmlNode {

public:

  // Define the fields of Texture nodes
  static VrmlNodeType *defineType(VrmlNodeType *t);

  VrmlNodeTexture(VrmlScene *s);
  virtual ~VrmlNodeTexture();

  virtual VrmlNodeTexture* toTexture() const;

  virtual int nComponents() = 0;
  virtual int width() = 0;
  virtual int height() = 0;
  virtual int nFrames() = 0;
  virtual unsigned char* pixels() = 0;

  //similar to the VrmlNode calls, but placed here, cause they make more sense here.
  virtual VrmlNodePixelTexture*	toPixelTexture() const { return NULL; }
  virtual VrmlNodeImageTexture*	toImageTexture() const { return NULL; }

  void addToScene( VrmlScene *scene, const char *relativeUrl )
    { d_scene = scene; d_relativeUrl.set( relativeUrl ); }

protected:

  VrmlSFString d_relativeUrl;

};

#endif // _VRMLNODETEXTURE_

