Talk:M2/Rendering

From wowdev
< Talk:M2
Revision as of 23:50, 4 December 2016 by Fallenoak (talk | contribs) (→‎MoP)
Jump to navigation Jump to search

D3D11_BLEND

typedef enum D3D11_BLEND { 
  D3D11_BLEND_ZERO              = 1,
  D3D11_BLEND_ONE               = 2,
  D3D11_BLEND_SRC_COLOR         = 3,
  D3D11_BLEND_INV_SRC_COLOR     = 4,
  D3D11_BLEND_SRC_ALPHA         = 5,
  D3D11_BLEND_INV_SRC_ALPHA     = 6,
  D3D11_BLEND_DEST_ALPHA        = 7,
  D3D11_BLEND_INV_DEST_ALPHA    = 8,
  D3D11_BLEND_DEST_COLOR        = 9,
  D3D11_BLEND_INV_DEST_COLOR    = 10,
  D3D11_BLEND_SRC_ALPHA_SAT     = 11,
  D3D11_BLEND_BLEND_FACTOR      = 14,
  D3D11_BLEND_INV_BLEND_FACTOR  = 15,
  D3D11_BLEND_SRC1_COLOR        = 16,
  D3D11_BLEND_INV_SRC1_COLOR    = 17,
  D3D11_BLEND_SRC1_ALPHA        = 18,
  D3D11_BLEND_INV_SRC1_ALPHA    = 19
} D3D11_BLEND;


3.3.5a Shader Buffer Layouts

Vertex

  • c10: vec4(diffuse.rgb, padding)
  • c11: vec4(ambient.rgb, padding)
  • c12: vec4(lightDir.xyz, padding) (lightDir is transformed by view matrix before upload to GPU)
  • c28: vec4(?, ?, ?, texWeight) (texWeight is the value from the animated texture weight track for batch)
  • c29: vec4(animColor.rgb, ?) (animColor is the value from the animated color track for batch)


Draw Layers

Not sure what to call these... layers? modes? passes?

  • 0: CM2SceneRender::DrawBatchProj
  • 1: CM2SceneRender::DrawPrepassBatch || CM2SceneRender::DrawBatch
  • 2: CM2SceneRender::DrawBatchDoodad
  • 3: CM2SceneRender::DrawRibbon
  • 4: CM2SceneRender::DrawParticle
  • 5: CM2SceneRender::DrawCallback


Shader Permute Selection

MoP

v35 = a3->skinSection->boneInfluences;

// 3-bit int stored in bits 29-31
v10 = (a3->renderInfo & 0xE0000000) >> 29;

if ( v10 == 2 ) {

  v44 = 4;

  // boneInfluences >= 1
  if ( v35 ) {
    v34 = 2;

    if ( v35 <= 2u )
      v34 = v35;

    v44 = 4 * v34;
  }

} else {

  v11 = 2;

  // boneInfluences <= 2
  if ( v35 <= 2u )
    v11 = v35;

  v44 = 4 * v11;

}

if ( lightingDisabledFromBlendingMode ) {

  v17 = 0;

} elsif ( localLightCount <= 2 ) {

  v17 = localLightCount + 1;

} else {
  
  v17 = 2 + 1;

}

// v16: use instancing (1)
// v17: light count? (0 - 3)

element->m_vertexShaderPermuteIdx =
    v45
  + v16
  + 4 * (((v15 >> 1) & 1) + 4 * (v44 + v17));

// v20: possibly 'use ssao' (1)
// v21: lighting enabled (1)
// v38: custom type (seems to only check for type 4)

element->m_pixelShaderPermuteIdx =
    v14
  + 4 * (CShaderEffect::s_usePcfFiltering + 2 * (v43 + 2 * (v21 + 2 * (a4 + 2 * (v20 + 2 * (v38 == 4))))));