bool ProcessedFFMaterial::setupPass( SceneState *state, const SceneGraphData &sgData, U32 pass )
{
   PROFILE_SCOPE( ProcessedFFMaterial_SetupPass );

   // Make sure we have a pass
   if(pass >= mPasses.size())
      return false;

   _setRenderState( state, sgData, pass );

   // Bind our textures
   setTextureStages( state, sgData, pass );
   return true;
}
Exemple #2
0
//
// Runtime / rendering
//
bool ProcessedShaderMaterial::setupPass( SceneRenderState *state, const SceneData &sgData, U32 pass )
{
   PROFILE_SCOPE( ProcessedShaderMaterial_SetupPass );

   // Make sure we have the pass
   if(pass >= mPasses.size())
   {
      // If we were rendering instanced data tell
      // the device to reset that vb stream.
      if ( mInstancingState )
         GFX->setVertexBuffer( NULL, 1 );

      return false;
   }

   _setRenderState( state, sgData, pass );

   // Set shaders
   ShaderRenderPassData* rpd = _getRPD(pass);
   if( rpd->shader )
   {
      GFX->setShader( rpd->shader );
      GFX->setShaderConstBuffer(_getShaderConstBuffer(pass));      
      _setShaderConstants(state, sgData, pass);      

      // If we're instancing then do the initial step to get
      // set the vb pointer to the const buffer.
      if ( mInstancingState )
         stepInstance();
   }
   else
   {
      GFX->disableShaders();
      GFX->setShaderConstBuffer(NULL);
   } 

   // Set our textures
   setTextureStages( state, sgData, pass );
   _setTextureTransforms(pass);

   return true;
}
void 
Surface::setRenderState(const DWORD in_stateType, const DWORD in_state)
{
   AssertFatal(pD3DDevice2Vector[deviceMinorId] != NULL,
               "No device to set renderstate to...");

   switch (in_stateType) {
     case D3DRENDERSTATE_TEXTUREHANDLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.textureHandle);
      break;
     case D3DRENDERSTATE_TEXTUREADDRESS:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.textureAddress);
      break;
     case D3DRENDERSTATE_TEXTUREPERSPECTIVE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.texturePerspective);
      break;
     case D3DRENDERSTATE_WRAPU:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.wrapU);
      break;
     case D3DRENDERSTATE_WRAPV:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.wrapV);
      break;
     case D3DRENDERSTATE_ZENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.zEnable);
      break;
     case D3DRENDERSTATE_FILLMODE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.fillMode);
      break;
     case D3DRENDERSTATE_SHADEMODE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.shadeMode);
      break;
     case D3DRENDERSTATE_ZWRITEENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.zWriteEnable);
      break;
     case D3DRENDERSTATE_ALPHATESTENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.alphaTestEnable);
      break;
     case D3DRENDERSTATE_SRCBLEND:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.srcBlend);
      break;
     case D3DRENDERSTATE_DESTBLEND:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.destBlend);
      break;
     case D3DRENDERSTATE_TEXTUREMAPBLEND:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.textureMapBlend);
      break;
     case D3DRENDERSTATE_CULLMODE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.cullMode);
      break;
     case D3DRENDERSTATE_ZFUNC:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.zFunc);
      break;
     case D3DRENDERSTATE_ALPHAREF:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.alphaRef);
      break;
     case D3DRENDERSTATE_ALPHAFUNC:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.alphaFunc);
      break;
     case D3DRENDERSTATE_FOGENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.fogEnable);
      break;
     case D3DRENDERSTATE_ZVISIBLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.zVisible);
      break;
     case D3DRENDERSTATE_FOGCOLOR:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.fogColor);
      break;
     case D3DRENDERSTATE_COLORKEYENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.colorKeyEnable);
      break;
     case D3DRENDERSTATE_TEXTUREMAG:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.textureMag);
      break;
     case D3DRENDERSTATE_TEXTUREMIN:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.textureMin);
      break;

      // Special NOTE: 3DFx does not support specifically setting the blend
      //  enable for just the alpha blending at this time.  Use the big gun...
      //
     case D3DRENDERSTATE_BLENDENABLE:
      _setRenderState(in_stateType, in_state,
                      (DWORD*)&renderState.blendEnable);
      break;
     case D3DRENDERSTATE_ALPHABLENDENABLE:
      _setRenderState(D3DRENDERSTATE_BLENDENABLE, in_state,
                      (DWORD*)&renderState.alphaBlendEnable);
      break;


     default:
      AssertWarn(0, "Unknown render state set...");
      break;
   }
}