Difference between revisions of "VTable"

From GTAMods Wiki
Jump to navigation Jump to search
(Added proper vtable pointer values.)
Line 50: Line 50:
 
|rage::phBoundGeometry|| 0x69AAF4|| Bounding geometry definition
 
|rage::phBoundGeometry|| 0x69AAF4|| Bounding geometry definition
 
|-
 
|-
|rage::phBoundCurvedGeometry|| 0x69B41C|| Bounding cu7rved geometry definition
+
|rage::phBoundCurvedGeometry|| 0x69B41C|| Bounding curved geometry definition
 
|-
 
|-
 
|rage::evtSet|| 0x6A4678||  
 
|rage::evtSet|| 0x6A4678||  

Revision as of 03:05, 12 August 2009

VTable Description

  • At its simplest, a VTable is an array of pointers to functions. VTables are sometimes referred to as VFTables (or Virtual Function Tables) or VMTs (Virtual Method Tables). Any class/struct object with virtual methods contains an internal pointer to a VTable. The VTable layout is implementation dependent, and may frequently contain type metadata (to support DynamicCast) and correction factors needed to support MultipleInheritance.
  • GTA:IV's resource data files often contain structures that are a direct memory dump of a complete class/structure in memory. These classes are sometimes virtual classes and often contain a VTable pointer in them. When the data is loaded into memory, the data is relocated and VTable pointer is corrected to the proper one by the game. It is important to note that the VTable pointer value will change depending on the exact build/version of the resource compiler used. They are a helpful indicator to identify data structures in files. However, that's all they are -- indicators.

Documentation

The following VTable pointer are valid for files generated by the GTA:IV resource compilers:

Class Name Value (Hex) Description
gtaDrawable 0x695254 Drawable objects (WDR file)
gtaFragType 0x695238 Frag objects (WFT file)
rage::pgDictionary<gtaDrawable> 0x6953A4 Collection of drawable objects (WDD file)
rage::pgDictionary<rage::grcTexturePC> 0x695384 Collection of texture objects (WTD file)
rage::pgDictionary<rage::grcTexture> 0x6A08A0 Collection of texture objects (used for WDR texture references)
rage::fragDrawable 0x6A32DC Drawables in Frag objects (WFT drawable)
rage::grmShaderGroup 0x6B1644 Collection of shader definitions
rage::grmShaderFx 0x6B223C Shader definition
rage::grmModel 0x6B0234 Drawable model
rage::grmGeometry 0x6B48F4 Drawable geometry
rage::grcVertexBufferD3D 0x6BBAD8 Vertex buffer
rage::grcIndexBufferD3D 0x6BB870 Index buffer
rage::grcTexture 0x6B675C Texture definition (for externally defined textures)
rage::grcTexturePC 0x6B1D94 Texture definition
rage::phArchetypeDamp 0x69A5BC
rage::phBoundComposite 0x69BBEC Collection of bounding definitions
rage::phBoundBox 0x69D56C Bounding box definition
rage::phBoundGeometry 0x69AAF4 Bounding geometry definition
rage::phBoundCurvedGeometry 0x69B41C Bounding curved geometry definition
rage::evtSet 0x6A4678

The following was written by a nub and needs review:

Possible values of a VTable

Name Decimal Hex Description
DrawableModel 6902356 0x54526900 WDR Header
DrawableDictionary 6902692 0xA4536900 WDD Header
Geometry 7031028 0xF4486B00 Start of Geometry
VertexBuffer 7060184 0xD8BA6B00 Start of VertexBuffer
IndexBuffer 7059568 0x70B86B00 Start of IndexBuffer
ShaderGroup 7018052 0x44166B00 Start of ShaderGroup
Shader 7021116 0x3C226B00 Start of Shader
Boundries 6902624 0x60536900 WBD Header
TextureDictionary 6949024 0xA0086A00 WTD Header

This section is incomplete. You can help by fixing and expanding it.