Difference between revisions of "THQ Material (RW Section)"

From GTAMods Wiki
Jump to navigation Jump to search
(Structure)
Line 16: Line 16:
 
   uint32 renderProps
 
   uint32 renderProps
 
    
 
    
 +
  int32 AlphaTestFunc
 
   int32 AlphaTestRef
 
   int32 AlphaTestRef
 
   bool ZTest
 
   bool ZTest
Line 26: Line 27:
 
   RwCullMode FaceCullMode
 
   RwCullMode FaceCullMode
 
    
 
    
   AlphaTestRef = ((renderProps << 1) & 0xFF000000)) >> 24;
+
  AlphaTestFunc = (renderProps & 0x7800) >> 11;
   ZTest = renderProps & 0x800000;
+
   AlphaTestRef = (renderProps & 0x7F8000) >> 15;
   ZWrite = ((renderProps << 9) & 0x00800000)) >> 17;
+
   ZTest = (renderProps & 0x800000) >> 17;
 +
   ZWrite = (renderProps << 9) & 0x800000) >> 17;
 
   SrcBlend = (renderProps & 0x78) >> 3;
 
   SrcBlend = (renderProps & 0x78) >> 3;
 
   DstBlend = (renderProps & 0x780) >> 7;
 
   DstBlend = (renderProps & 0x780) >> 7;
Line 36: Line 38:
 
     AlphaEnabled = FALSE
 
     AlphaEnabled = FALSE
 
   else
 
   else
 +
  {
 
     AlphaEnabled = TRUE
 
     AlphaEnabled = TRUE
 +
   
 +
    if (renderProps & 0x4000000)
 +
      FaceCullIndex = 2;
 +
  }
 
    
 
    
 
   switch( FaceCullIndex )
 
   switch( FaceCullIndex )

Revision as of 02:51, 7 December 2023

THQ Material (Custom)
RenderWare Stream Section
Vendor THQ
Module Plug-In
Module ID 0x00CAFE
Identifier 0x45
Chunk ID 0x00CAFE45
Versions All
Hierarchy
Parents:
Material (Extension), Atomic (Extension, see below)
Children:
None
Extensions:
None
File Format

The custom material extension was developed by THQ to attach geometric rendering properties to a material, using alpha referencing, z-test flags, blend functions, and culling, used for the known game Jimmy Neutron: Attack of the Twonkies.

Structure

{
 uint32 header
 int32 sectionSize
 uint32 renderProps
 
 int32 AlphaTestFunc
 int32 AlphaTestRef
 bool ZTest
 bool ZWrite
 int32 SrcBlend
 int32 DestBlend
 int32 FaceCullIndex
 
 RwBool AlphaEnabled
 RwCullMode FaceCullMode
 
 AlphaTestFunc = (renderProps & 0x7800) >> 11;
 AlphaTestRef = (renderProps & 0x7F8000) >> 15;
 ZTest = (renderProps & 0x800000) >> 17;
 ZWrite = (renderProps << 9) & 0x800000) >> 17;
 SrcBlend = (renderProps & 0x78) >> 3;
 DstBlend = (renderProps & 0x780) >> 7;
 FaceCullIndex = renderProps & 0x7;
 
 if (DstBlend == rwBLENDZERO)
   AlphaEnabled = FALSE
 else
 {
   AlphaEnabled = TRUE
   
   if (renderProps & 0x4000000)
      FaceCullIndex = 2;
 }
 
 switch( FaceCullIndex )
   {
       case 0:
       {
           FaceCullMode = rwCULLMODECULLNONE;
           break;
       }
 
       case 1:
       {
           FaceCullMode = rwCULLMODECULLBACK;
           break;
       }
 
       case 2:
       {
           FaceCullMode = rwCULLMODECULLFRONT;
           break;
       }
   }
}