text: 
  namespace rw {
  namespace wdgl {
  
  // NOTE: This is not really RW OpenGL! It's specific to WarDrum's GTA ports
  
  void registerPlatformPlugins(void);
  
  struct AttribDesc
  {
  	// arguments to glVertexAttribPointer (should use OpenGL types here)
  	// Vertex = 0, TexCoord, Normal, Color, Weight, Bone Index, Extra Color
  	uint32 index;
  	// float = 0, byte, ubyte, short, ushort
  	int32 type;
  	bool32 normalized;
  	int32 size;
  	uint32 stride;
  	uint32 offset;
  };
  
  struct InstanceDataHeader : rw::InstanceDataHeader
  {
  	int32 numAttribs;
  	AttribDesc *attribs;
  	uint32 dataSize;
  	uint8 *data;
  
  	// needed for rendering
  	uint32 vbo;
  	uint32 ibo;
  };
  
  // only RW_OPENGL
  void uploadGeo(Geometry *geo);
  void setAttribPointers(InstanceDataHeader *inst);
  
  void packattrib(uint8 *dst, float32 *src, AttribDesc *a, float32 scale);
  void unpackattrib(float *dst, uint8 *src, AttribDesc *a, float32 scale);
  
  void *destroyNativeData(void *object, int32, int32);
  Stream *readNativeData(Stream *stream, int32 len, void *object, int32, int32);
  Stream *writeNativeData(Stream *stream, int32 len, void *object, int32, int32);
  int32 getSizeNativeData(void *object, int32, int32);
  void registerNativeDataPlugin(void);
  
  void printPipeinfo(Atomic *a);
  
  class ObjPipeline : public rw::ObjPipeline
  {
  public:
  	uint32 numCustomAttribs;
  	uint32 (*instanceCB)(Geometry *g, int32 i, uint32 offset);
  	void (*uninstanceCB)(Geometry *g);
  
  	ObjPipeline(uint32 platform);
  };
  
  ObjPipeline *makeDefaultPipeline(void);
  
  // Skin plugin
  
  void initSkin(void);
  Stream *readNativeSkin(Stream *stream, int32, void *object, int32 offset);
  Stream *writeNativeSkin(Stream *stream, int32 len, void *object, int32 offset);
  int32 getSizeNativeSkin(void *object, int32 offset);
  
  ObjPipeline *makeSkinPipeline(void);
  
  // MatFX plugin
  
  void initMatFX(void);
  ObjPipeline *makeMatFXPipeline(void);
  
  // Raster
  
  struct Texture : rw::Texture
  {
  	void upload(void);
  	void bind(int n);
  };
  
  extern int32 nativeRasterOffset;
  void registerNativeRaster(void);
  
  }
  }
  