TEST-STRCMP4CODES

From SimsWiki
Revision as of 08:36, 7 September 2007 by Niol (Talk | contribs)

Jump to: navigation, search

EP0-TS2 0xCD7FE87A 0x1C0532FA 0x9149CD43 0xFF002DC8

  1. particles
  1. Various standard shaders for particle systems.


  1. StandardParticlesMaterial
  2. The standard shader for billboard-style particles.
  3. This is referenced from the effects manager.

setb stdPMDoAlphaMask true setb stdPMDoDepthWrite false setb stdPMDoDepthTest true setb stdPMAdditive false setb stdPMModulate false setb stdPMInvertDepth false setb stdPMDebugFill false

set stdParticleCompositeTexture ""

define StandardParticlesMaterial()

  material
     # put ourselves two layers above the standard, plus
     # transparent, because we don't write Z, and anything
     # that renders after us will stomp on us.
     if (varExists(stdPMLayer))
     shader -layer $stdPMLayer
     else
     shader -layer ($stdMatLayer * 8 + 7)   # 7 for alpha blend
     endif
     
        vertexFormatPred position 0 true
        vertexFormatPred texcoord 0 true
        vertexFormatPred color    0 true
        vertexFormatPred blendindices  0 false
        vertexFormatPred targetindices 0 false
        
        numLightsPred environmentCube (numLightsOfType(environmentCube))
        pass -fixedFunction
           create LightingStatesNoStdLights()
           ffPerVertexColor -enable true -diff vertexDiffuse
           
           if $stdPMDebugFill
              alphaBlend srcFactor(one) add dstFactor(zero)
           elseif $stdPMAdditive
              alphaBlend srcFactor(srcAlpha) add dstFactor(one)
           elseif $stdPMModulate
              alphaBlend srcFactor(destColor) add dstFactor(zero)
           else
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
           endif
              
           depthTest $stdPMDoDepthTest -enableDepthWrite $stdPMDoDepthWrite
           if ($stdPMInvertDepth)
              depthTestFunction acceptIfGreater
           endif
           
           if (not $stdPMDebugFill)
              alphaTest $stdPMDoAlphaMask 1
              alphaTestFunction acceptIfGreaterOrEqual     # is this the default? remove if so...
           endif
           # the particle system takes care of whether lighting is applied,
           # by setting kGeomSkipIllumination appropriately.
           if (numLightsOfType(environmentCube) > 0)
              colorScalar (1, 1, 1, 1) -applyTextureLightColor 0 0
           endif
           
           fillmode $stdMatFillMode  # so we pick up on wireframe.
           cullmode none
           create LightingStatesNoStdLights()
           
           stage
              texture $stdParticleTexture
              
              textureAddressing clamp clamp
              textureBlend multiply(texture diffuse) multiply(texture diffuse)
           end
           
           if (strcmp("$stdParticleCompositeTexture", "()") != 0)
              # alpha composite over the top
              stage
                 texture $stdParticleCompositeTexture
                 
                 textureAddressing clamp clamp
                 ffTextureCoordsSource 0
  
                 textureBlend lerpTextureAlpha(texture outRegister) select(outRegister)
              end
           elseif (numLightsOfType(environmentCube) > 0)
              # multiply in environment tint.
              # We could do this more cheaply in the particle streaming code, where there
              # is already an overall colour multiplier for the per-vertex colour, but we
              # can't access the lights from there.
              # We don't (yet) support particle "lighting" with composite particles.
              stage
                 textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister)
              end            
           endif
        end
     end
     
     
     
     # since particles tend to be transparent, the fallback will be to not draw them.
     shader 
      
     end #shader
     
     
     
     
  end

enddef


  1. StandardParticleModelMaterial
  2. The standard shader for model (shape)-based particles.
  3. Respects a subset (basically phong-shaded textured) of the
  4. standard material parameters.
  1. aliasshader StandardParticleModelMaterial StandardMaterial

define StandardParticleModelMaterial()

  material
     # TODO: do ltScale properly; but we'll probably move this functionality into
     # standard material before we tackle that.
     set ltScale 2
     
     attributes
        attribute color float3
        attribute alpha float1
        attribute scale float1
     end


     shader -layer ($stdMatLayer * 8 + 7)   # 7 for alpha blend
        vertexFormatPred position 0 true
        vertexFormatPred texcoord 0 true
        vertexFormatPred blendindices  0 false
        vertexFormatPred targetindices 0 false
        
        create DetermineHardwareSupport()
        pass -fixedFunction
           ffMatCoef -amb ($stdMatDiffCoef * (1 / $ltScale).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (1 / $ltScale).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (1 / $ltScale).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
           addSpecular true
           
           # normalize normals because of scale
           create LightingStatesParam(true false)
           
           # We should be able to call StandardShaderFBAlphaState here, but
           # because this wasn't done originally, there are a bunch of existing
           # materials that have blend set to "none" where they should be set to
           # "blend".
           if (strcmp("${stdMatAlphaBlendMode}", "additive") = 0)
              alphaBlend srcFactor(srcAlpha) add dstFactor(one)
              depthTest true -enableDepthWrite false
           else
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
              depthTest true -enableDepthWrite true
           endif
           
           alphaTest $stdMatAlphaTestEnabled $stdMatAlphaRefValue
           alphaTestFunction acceptIfGreaterOrEqual              
           colorScalar @color @alpha
           
           ffScaleModelTransform @scale
           
           fillmode $stdMatFillMode
           stage               
              create StandardShaderTextureState(Base)
                             
              # outRegister is previous stage. For first stage, diffuse.
              if $stdMatBaseTextureAlphaReplicate
                 textureBlend multiplyScale${ltScale}(texture:alphaReplicate outRegister) multiply(texture outRegister)
              else
                 textureBlend multiplyScale${ltScale}(texture outRegister) multiply(texture outRegister)
              endif
           end                        
           
           stage
              textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister)
           end 
        end
        
        if (strcmp("${stdMatEnvCubeMode}", "reflection") = 0)
           pass -fixedFunction
              create LightingStatesParam(true false)
  
              alphaBlend srcFactor(one) add dstFactor(one)
              ffScaleModelTransform @scale
              colorScalar $stdMatEnvCubeCoef 1
              fillmode $stdMatFillMode
              
              stage
                 if ($cubeMapSupport)
                    create StandardShaderEnvCubeMapState(fromReflectionVector)
                    textureBlend multiply(texture colorScalar) select(texture)
                 else
                    textureBlend select(colorScalar) select(colorScalar)
                 endif
              end
           end
        endif         
     end
     
     
     # non textured opaque fallback.
     shader -layer ($stdMatLayer * 8)
        pass -fixedFunction
           create LightingStatesParam(true false)
              ffScaleModelTransform @scale
              colorScalar @color @alpha
              ffMatCoef -amb ($stdMatDiffCoef * (0.5).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (0.5).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (0.5).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
  
           stage
              textureBlend multiplyScale2(diffuse colorScalar) select(colorScalar)
           end
           
        end
     
     end
     
     # do-nothing fallback
    
     shader
     end
     
  end

enddef


  1. Various standard shaders for particle systems.


  1. StandardParticlesMaterial
  2. The standard shader for billboard-style particles.
  3. This is referenced from the effects manager.

setb stdPMDoAlphaMask true setb stdPMDoDepthWrite false setb stdPMDoDepthTest true setb stdPMAdditive false setb stdPMModulate false setb stdPMInvertDepth false setb stdPMDebugFill false

set stdParticleCompositeTexture ""

define StandardParticlesMaterial()

  material
     # put ourselves two layers above the standard, plus
     # transparent, because we don't write Z, and anything
     # that renders after us will stomp on us.
     if (varExists(stdPMLayer))
     shader -layer $stdPMLayer
     else
     shader -layer ($stdMatLayer * 8 + 7)   # 7 for alpha blend
     endif
     
        vertexFormatPred position 0 true
        vertexFormatPred texcoord 0 true
        vertexFormatPred color    0 true
        vertexFormatPred blendindices  0 false
        vertexFormatPred targetindices 0 false
        
        numLightsPred environmentCube (numLightsOfType(environmentCube))
        pass -fixedFunction
           create LightingStatesNoStdLights()
           ffPerVertexColor -enable true -diff vertexDiffuse
           
           if $stdPMDebugFill
              alphaBlend srcFactor(one) add dstFactor(zero)
           elseif $stdPMAdditive
              alphaBlend srcFactor(srcAlpha) add dstFactor(one)
           elseif $stdPMModulate
              alphaBlend srcFactor(destColor) add dstFactor(zero)
           else
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
           endif
              
           depthTest $stdPMDoDepthTest -enableDepthWrite $stdPMDoDepthWrite
           if ($stdPMInvertDepth)
              depthTestFunction acceptIfGreater
           endif
           
           if (not $stdPMDebugFill)
              alphaTest $stdPMDoAlphaMask 1
              alphaTestFunction acceptIfGreaterOrEqual     # is this the default? remove if so...
           endif
           # the particle system takes care of whether lighting is applied,
           # by setting kGeomSkipIllumination appropriately.
           if (numLightsOfType(environmentCube) > 0)
              colorScalar (1, 1, 1, 1) -applyTextureLightColor 0 0
           endif
           
           fillmode $stdMatFillMode  # so we pick up on wireframe.
           cullmode none
           create LightingStatesNoStdLights()
           
           stage
              texture $stdParticleTexture
              
              textureAddressing clamp clamp
              textureBlend multiply(texture diffuse) multiply(texture diffuse)
           end
           
           if (strcmp("$stdParticleCompositeTexture", "()") != 0)
              # alpha composite over the top
              stage
                 texture $stdParticleCompositeTexture
                 
                 textureAddressing clamp clamp
                 ffTextureCoordsSource 0
  
                 textureBlend lerpTextureAlpha(texture outRegister) select(outRegister)
              end
           elseif (numLightsOfType(environmentCube) > 0)
              # multiply in environment tint.
              # We could do this more cheaply in the particle streaming code, where there
              # is already an overall colour multiplier for the per-vertex colour, but we
              # can't access the lights from there.
              # We don't (yet) support particle "lighting" with composite particles.
              stage
                 textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister)
              end            
           endif
        end
     end
     
     
     
     # since particles tend to be transparent, the fallback will be to not draw them.
     shader 
      
     end #shader
     
     
     
     
  end

enddef


  1. StandardParticleModelMaterial
  2. The standard shader for model (shape)-based particles.
  3. Respects a subset (basically phong-shaded textured) of the
  4. standard material parameters.
  1. aliasshader StandardParticleModelMaterial StandardMaterial

define StandardParticleModelMaterial()

  material
     # TODO: do ltScale properly; but we'll probably move this functionality into
     # standard material before we tackle that.
     set ltScale 2
     
     attributes
        attribute color float3
        attribute alpha float1
        attribute scale float1
     end


     shader -layer ($stdMatLayer * 8 + 7)   # 7 for alpha blend
        vertexFormatPred position 0 true
        vertexFormatPred texcoord 0 true
        vertexFormatPred blendindices  0 false
        vertexFormatPred targetindices 0 false
        
        create DetermineHardwareSupport()
        pass -fixedFunction
           ffMatCoef -amb ($stdMatDiffCoef * (1 / $ltScale).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (1 / $ltScale).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (1 / $ltScale).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
           addSpecular true
           
           # normalize normals because of scale
           create LightingStatesParam(true false)
           
           # We should be able to call StandardShaderFBAlphaState here, but
           # because this wasn't done originally, there are a bunch of existing
           # materials that have blend set to "none" where they should be set to
           # "blend".
           if (strcmp("${stdMatAlphaBlendMode}", "additive") = 0)
              alphaBlend srcFactor(srcAlpha) add dstFactor(one)
              depthTest true -enableDepthWrite false
           else
              alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha)
              depthTest true -enableDepthWrite true
           endif
           
           alphaTest $stdMatAlphaTestEnabled $stdMatAlphaRefValue
           alphaTestFunction acceptIfGreaterOrEqual              
           colorScalar @color @alpha
           
           ffScaleModelTransform @scale
           
           fillmode $stdMatFillMode
           stage               
              create StandardShaderTextureState(Base)
                             
              # outRegister is previous stage. For first stage, diffuse.
              if $stdMatBaseTextureAlphaReplicate
                 textureBlend multiplyScale${ltScale}(texture:alphaReplicate outRegister) multiply(texture outRegister)
              else
                 textureBlend multiplyScale${ltScale}(texture outRegister) multiply(texture outRegister)
              endif
           end                        
           
           stage
              textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister)
           end 
        end
        
        if (strcmp("${stdMatEnvCubeMode}", "reflection") = 0)
           pass -fixedFunction
              create LightingStatesParam(true false)
  
              alphaBlend srcFactor(one) add dstFactor(one)
              ffScaleModelTransform @scale
              colorScalar $stdMatEnvCubeCoef 1
              fillmode $stdMatFillMode
              
              stage
                 if ($cubeMapSupport)
                    create StandardShaderEnvCubeMapState(fromReflectionVector)
                    textureBlend multiply(texture colorScalar) select(texture)
                 else
                    textureBlend select(colorScalar) select(colorScalar)
                 endif
              end
           end
        endif         
     end
     
     
     # non textured opaque fallback.
     shader -layer ($stdMatLayer * 8)
        pass -fixedFunction
           create LightingStatesParam(true false)
              ffScaleModelTransform @scale
              colorScalar @color @alpha
              ffMatCoef -amb ($stdMatDiffCoef * (0.5).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (0.5).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (0.5).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower
  
           stage
              textureBlend multiplyScale2(diffuse colorScalar) select(colorScalar)
           end
           
        end
     
     end
     
     # do-nothing fallback
    
     shader
     end
     
  end

enddef

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox