123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- Namespace mojo3d
- #rem monkeydoc The Material class.
- #end
- Class Material Extends Resource
-
- enum Attrib
- Position=1
- Normal=2
- Color=4
- TexCoord0=8
- TexCoord1=16
- Tangent=32
- Weights=64
- Bones=128
- End
-
-
- #rem monkeydoc Creates a copy of the material.
- #end
- Method Copy:Material() abstract
-
- #rem monkeydoc Material name.
- #end
- Property Name:String()
-
- Return _name
-
- Setter( name:String )
-
- _name=name
- End
-
- Property ShaderName:String()
-
- Return _shaderName
-
- Setter( name:String )
-
- If name=_shaderName Return
-
- _shaderName=name
-
- Invalidate()
- End
-
- Property AttribMask:Int()
-
- Return _attribMask
- Setter( mask:Int )
-
- If mask=_attribMask Return
-
- _attribMask=mask
-
- Invalidate()
- End
-
- Property SelfIlluminated:Bool()
-
- Return _selfillum
-
- Setter( selfillum:Bool )
-
- If selfillum=_selfillum Return
-
- _selfillum=selfillum
- End
-
- #Rem monkeydoc The material blendmode.
- #End
- Property BlendMode:BlendMode()
-
- Return _blendMode
-
- Setter( mode:BlendMode )
-
- _blendMode=mode
- End
-
- #Rem monkeydoc The material cullmode.
- #End
- Property CullMode:CullMode()
-
- Return _cullMode
-
- Setter( mode:CullMode )
-
- _cullMode=mode
- End
-
- #rem monkeydoc The material texture matrix.
- #end
- Property TextureMatrix:AffineMat3f()
-
- Return Uniforms.GetAffineMat3f( "TextureMatrix" )
-
- Setter( matrix:AffineMat3f )
-
- Uniforms.SetAffineMat3f( "TextureMatrix",matrix )
- End
-
- #rem monkeydoc Translates the texture matrix.
- #end
- Method TranslateTextureMatrix( tv:Vec2f )
-
- TextureMatrix=TextureMatrix.Translate( tv )
- End
-
- Method TranslateTextureMatrix( tx:Float,ty:Float )
-
- TextureMatrix=TextureMatrix.Translate( tx,ty )
- End
- #rem monkeydoc Rotates the texture matrix.
- #end
- Method RotateTextureMatrix( angle:Float )
-
- TextureMatrix=TextureMatrix.Rotate( angle )
- End
-
- #rem monkeydoc Scales the texture matrix.
- #end
- Method ScaleTextureMatrix( sv:Vec2f )
-
- TextureMatrix=TextureMatrix.Scale( sv )
- End
-
- Method ScaleTextureMatrix( sx:Float,sy:Float )
-
- TextureMatrix=TextureMatrix.Scale( sx,sy )
- End
-
- #Rem monkeydoc @hidden The material uniforms.
-
- TODO: Should really be protected...
- #End
- Property Uniforms:UniformBlock()
-
- Return _uniforms
- End
- #rem monkeydoc Gets material's shader for rendering.
- #end
- Method GetRenderShader:Shader()
-
- Validate()
-
- Return _shader
- End
-
- Function LoadTexture:Texture( path:String,textureFlags:TextureFlags,flipy:Bool=False )
-
- Local scene:=Scene.GetCurrent()
-
- Return scene.LoadTexture( path,textureFlags,flipy )
- End
-
- Function LoadTexture:Texture( path:String,name:String,textureFlags:TextureFlags,flipy:Bool=False )
-
- Local scene:=Scene.GetCurrent()
-
- Local texture:=scene.LoadTexture( path+"/"+name+".png",textureFlags,flipy )
-
- If Not texture texture=scene.LoadTexture( path+"/"+name+".jpg",textureFlags,flipy )
-
- Return texture
- End
-
- Protected
-
- Method OnValidate() Virtual
- End
-
- Method Invalidate()
-
- _shader=Null
- End
-
- Method New()
- _name="Material"
- _attribMask=1
- _blendMode=BlendMode.Opaque
- _cullMode=CullMode.Back
- _selfillum=False
- _uniforms=New UniformBlock( 3,True )
-
- TextureMatrix=New AffineMat3f
- End
-
- Method New( material:Material )
-
- _name=material._name
- _shaderName=material._shaderName
- _attribMask=material._attribMask
- _blendMode=material._blendMode
- _cullMode=material._cullMode
- _selfillum=material._selfillum
- _shader=material._shader
- _dirty=material._dirty
- _uniforms=New UniformBlock( material._uniforms )
- TextureMatrix=material.TextureMatrix
- End
-
- Method AddInstance()
- Local scene:=Scene.GetCurrent()
-
- If scene.Editing scene.Jsonifier.AddInstance( Self,New Variant[0] )
- End
-
- Method AddInstance( args:Variant[] )
-
- Local scene:=Scene.GetCurrent()
-
- If scene.Editing scene.Jsonifier.AddInstance( Self,args )
- End
-
- Method AddInstance( material:Material )
-
- Local scene:=Scene.GetCurrent()
-
- If scene.Editing scene.Jsonifier.AddInstance( Self,New Variant[]( material ) )
- End
-
- Private
- Field _name:String
- Field _shaderName:String
- Field _attribMask:Int
- Field _selfillum:Bool
- Field _cullMode:CullMode
- Field _blendMode:BlendMode
- Field _uniforms:UniformBlock
- Field _shader:Shader
- Field _dirty:Bool=True
-
- Method Validate()
-
- If _shader Return
- Local defs:=Renderer.GetCurrent().ShaderDefs
-
- defs+=";MX2_ATTRIBMASK "+_attribMask
-
- Local shaderName:=_shaderName ?Else "materials/default"
-
- _shader=mojo.graphics.Shader.Open( shaderName,defs )
- End
-
- End
|