Class MaterialInstance
- java.lang.Object
-
- com.google.android.filament.MaterialInstance
-
public class MaterialInstance extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classMaterialInstance.BooleanElementstatic classMaterialInstance.FloatElementstatic classMaterialInstance.IntElementstatic classMaterialInstance.StencilFacestatic classMaterialInstance.StencilOperationOperations that control how the stencil buffer is updated.
-
Constructor Summary
Constructors Constructor Description MaterialInstance(Engine engine, long nativeMaterialInstance)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static MaterialInstanceduplicate(MaterialInstance other, java.lang.String name)Creates a newMaterialInstance(long)using anotherMaterialInstance(long)as a template for initialization.Material.CullingModegetCullingMode()Returns the face culling mode.floatgetMaskThreshold()Gets the minimum alpha value a fragment must have to not be discarded when the blend mode is MASKEDMaterialgetMaterial()java.lang.StringgetName()longgetNativeObject()floatgetSpecularAntiAliasingThreshold()Gets the clamping threshold used to suppress estimation errors when applying specular anti-aliasing.floatgetSpecularAntiAliasingVariance()Gets the screen space variance of the filter kernel used when applying specular anti-aliasing.booleanisColorWriteEnabled()Returns whether color write is enabled.booleanisDepthCullingEnabled()Returns whether depth culling is enabled.booleanisDepthWriteEnabled()Returns whether depth write is enabled.booleanisDoubleSided()Returns whether double-sided lighting is enabled when the parent Material has double-sided capability.booleanisStencilWriteEnabled()Returns whether stencil write is enabled.voidsetColorWrite(boolean enable)Overrides the default color-buffer write state that was set on the material.voidsetCullingMode(Material.CullingMode mode)Overrides the default triangle culling state that was set on the material.voidsetDepthCulling(boolean enable)Overrides the default depth testing state that was set on the material.voidsetDepthWrite(boolean enable)Overrides the default depth-buffer write state that was set on the material.voidsetDoubleSided(boolean doubleSided)Enables or disables double-sided lighting if the parent Material has double-sided capability, otherwise prints a warning.voidsetMaskThreshold(float threshold)Overrides the minimum alpha value a fragment must have to not be discarded when the blend mode is MASKED.voidsetParameter(java.lang.String name, boolean x)Sets the value of a bool parameter.voidsetParameter(java.lang.String name, boolean x, boolean y)Sets the value of a bool2 parameter.voidsetParameter(java.lang.String name, boolean x, boolean y, boolean z)Sets the value of a bool3 parameter.voidsetParameter(java.lang.String name, boolean x, boolean y, boolean z, boolean w)Sets the value of a bool4 parameter.voidsetParameter(java.lang.String name, float x)Sets the value of a float parameter.voidsetParameter(java.lang.String name, float x, float y)Sets the value of a float2 parameter.voidsetParameter(java.lang.String name, float x, float y, float z)Sets the value of a float3 parameter.voidsetParameter(java.lang.String name, float x, float y, float z, float w)Sets the value of a float4 parameter.voidsetParameter(java.lang.String name, int x)Sets the value of an int parameter.voidsetParameter(java.lang.String name, int x, int y)Sets the value of an int2 parameter.voidsetParameter(java.lang.String name, int x, int y, int z)Sets the value of a int3 parameter.voidsetParameter(java.lang.String name, int x, int y, int z, int w)Sets the value of a int4 parameter.voidsetParameter(java.lang.String name, Colors.RgbaType type, float r, float g, float b, float a)Sets the color of the given parameter on this material's default instance.voidsetParameter(java.lang.String name, Colors.RgbType type, float r, float g, float b)Sets the color of the given parameter on this material's default instance.voidsetParameter(java.lang.String name, MaterialInstance.BooleanElement type, boolean[] v, int offset, int count)Set a bool parameter array by name.voidsetParameter(java.lang.String name, MaterialInstance.FloatElement type, float[] v, int offset, int count)Set a float parameter array by name.voidsetParameter(java.lang.String name, MaterialInstance.IntElement type, int[] v, int offset, int count)Set an int parameter array by name.voidsetParameter(java.lang.String name, Texture texture, TextureSampler sampler)Sets a texture and sampler parameter on this material's default instance.voidsetPolygonOffset(float scale, float constant)Sets a polygon offset that will be applied to all renderables drawn with this material instance.voidsetScissor(int left, int bottom, int width, int height)Set-up a custom scissor rectangle; by default it is disabled.voidsetSpecularAntiAliasingThreshold(float threshold)Sets the clamping threshold used to suppress estimation errors when applying specular anti-aliasing.voidsetSpecularAntiAliasingVariance(float variance)Sets the screen space variance of the filter kernel used when applying specular anti-aliasing.voidsetStencilCompareFunction(TextureSampler.CompareFunction func)Sets the stencil comparison function for both front and back-facing polygons.voidsetStencilCompareFunction(TextureSampler.CompareFunction func, MaterialInstance.StencilFace face)Sets the stencil comparison function (default isTextureSampler.CompareFunction.ALWAYS).voidsetStencilOpDepthFail(MaterialInstance.StencilOperation op)Sets the depth fail operation for both front and back-facing polygons.voidsetStencilOpDepthFail(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)Sets the depth fail operation (default isMaterialInstance.StencilOperation.KEEP).voidsetStencilOpDepthStencilPass(MaterialInstance.StencilOperation op)Sets the depth-stencil pass operation for both front and back-facing polygons.voidsetStencilOpDepthStencilPass(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)Sets the depth-stencil pass operation (default isMaterialInstance.StencilOperation.KEEP).voidsetStencilOpStencilFail(MaterialInstance.StencilOperation op)Sets the stencil fail operation for both front and back-facing polygons.voidsetStencilOpStencilFail(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)Sets the stencil fail operation (default isMaterialInstance.StencilOperation.KEEP).voidsetStencilReadMask(int readMask)Sets the stencil read mask for both front and back-facing polygons.voidsetStencilReadMask(int readMask, MaterialInstance.StencilFace face)Sets the stencil read mask (default is 0xFF).voidsetStencilReferenceValue(int value)Sets the stencil reference value for both front and back-facing polygons.voidsetStencilReferenceValue(int value, MaterialInstance.StencilFace face)Sets the stencil reference value (default is 0).voidsetStencilWrite(boolean enable)Enables or Disable stencil writesvoidsetStencilWriteMask(int writeMask)Sets the stencil write mask for both front and back-facing polygons.voidsetStencilWriteMask(int writeMask, MaterialInstance.StencilFace face)Sets the stencil write mask (default is 0xFF).voidunsetScissor()Returns the scissor rectangle to its default disabled setting.
-
-
-
Constructor Detail
-
MaterialInstance
public MaterialInstance(Engine engine, long nativeMaterialInstance)
-
-
Method Detail
-
duplicate
@NonNull public static MaterialInstance duplicate(@NonNull MaterialInstance other, java.lang.String name)
Creates a newMaterialInstance(long)using anotherMaterialInstance(long)as a template for initialization. The newMaterialInstance(long)is an instance of the sameMaterialof the template instance and must be destroyed just like any otherMaterialInstance(long).- Parameters:
other- AMaterialInstance(long)to use as a template for initializing a new instancename- A name for the newMaterialInstance(long)or nullptr to use the template's name- Returns:
- A new
MaterialInstance(long)
-
getMaterial
@NonNull public Material getMaterial()
- Returns:
- the
Materialassociated with this instance
-
getName
@NonNull public java.lang.String getName()
- Returns:
- the name associated with this instance
-
setParameter
public void setParameter(@NonNull java.lang.String name, boolean x)Sets the value of a bool parameter.- Parameters:
name- the name of the material parameterx- the value of the material parameter
-
setParameter
public void setParameter(@NonNull java.lang.String name, float x)Sets the value of a float parameter.- Parameters:
name- the name of the material parameterx- the value of the material parameter
-
setParameter
public void setParameter(@NonNull java.lang.String name, int x)Sets the value of an int parameter.- Parameters:
name- the name of the material parameterx- the value of the material parameter
-
setParameter
public void setParameter(@NonNull java.lang.String name, boolean x, boolean y)Sets the value of a bool2 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second component
-
setParameter
public void setParameter(@NonNull java.lang.String name, float x, float y)Sets the value of a float2 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second component
-
setParameter
public void setParameter(@NonNull java.lang.String name, int x, int y)Sets the value of an int2 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second component
-
setParameter
public void setParameter(@NonNull java.lang.String name, boolean x, boolean y, boolean z)Sets the value of a bool3 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third component
-
setParameter
public void setParameter(@NonNull java.lang.String name, float x, float y, float z)Sets the value of a float3 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third component
-
setParameter
public void setParameter(@NonNull java.lang.String name, int x, int y, int z)Sets the value of a int3 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third component
-
setParameter
public void setParameter(@NonNull java.lang.String name, boolean x, boolean y, boolean z, boolean w)Sets the value of a bool4 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third componentw- the value of the fourth component
-
setParameter
public void setParameter(@NonNull java.lang.String name, float x, float y, float z, float w)Sets the value of a float4 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third componentw- the value of the fourth component
-
setParameter
public void setParameter(@NonNull java.lang.String name, int x, int y, int z, int w)Sets the value of a int4 parameter.- Parameters:
name- the name of the material parameterx- the value of the first componenty- the value of the second componentz- the value of the third componentw- the value of the fourth component
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull Texture texture, @NonNull TextureSampler sampler)Sets a texture and sampler parameter on this material's default instance.Note: Depth textures can't be sampled with a linear filter unless the comparison mode is set to COMPARE_TO_TEXTURE.
- Parameters:
name- The name of the material texture parametertexture- The texture to set as parametersampler- The sampler to be used with this texture
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull MaterialInstance.BooleanElement type, @NonNull boolean[] v, @IntRange(from=0L) int offset, @IntRange(from=1L) int count)Set a bool parameter array by name.- Parameters:
name- name of the parameter array as defined by this Materialtype- the number of components for each individual parameterv- array of values to set to the named parameter arrayoffset- the number of elements invto skipcount- the number of elements in the parameter array to setFor example, to set a parameter array of 4 bool4s:
boolean[] a = new boolean[4 * 4]; instance.setParameter("param", MaterialInstance.BooleanElement.BOOL4, a, 0, 4);
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull MaterialInstance.IntElement type, @NonNull int[] v, @IntRange(from=0L) int offset, @IntRange(from=1L) int count)Set an int parameter array by name.- Parameters:
name- name of the parameter array as defined by this Materialtype- the number of components for each individual parameterv- array of values to set to the named parameter arrayoffset- the number of elements invto skipcount- the number of elements in the parameter array to setFor example, to set a parameter array of 4 int4s:
int[] a = new int[4 * 4]; instance.setParameter("param", MaterialInstance.IntElement.INT4, a, 0, 4);
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull MaterialInstance.FloatElement type, @NonNull float[] v, @IntRange(from=0L) int offset, @IntRange(from=1L) int count)Set a float parameter array by name.- Parameters:
name- name of the parameter array as defined by this Materialtype- the number of components for each individual parameterv- array of values to set to the named parameter arrayoffset- the number of elements invto skipcount- the number of elements in the parameter array to setFor example, to set a parameter array of 4 float4s:
float[] a = new float[4 * 4]; material.setDefaultParameter("param", MaterialInstance.FloatElement.FLOAT4, a, 0, 4);
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull Colors.RgbType type, float r, float g, float b)Sets the color of the given parameter on this material's default instance.- Parameters:
name- the name of the material color parametertype- whether the color is specified in the linear or sRGB spacer- red componentg- green componentb- blue component
-
setParameter
public void setParameter(@NonNull java.lang.String name, @NonNull Colors.RgbaType type, float r, float g, float b, float a)Sets the color of the given parameter on this material's default instance.- Parameters:
name- the name of the material color parametertype- whether the color is specified in the linear or sRGB spacer- red componentg- green componentb- blue componenta- alpha component
-
setScissor
public void setScissor(@IntRange(from=0L) int left, @IntRange(from=0L) int bottom, @IntRange(from=0L) int width, @IntRange(from=0L) int height)Set-up a custom scissor rectangle; by default it is disabled.The scissor rectangle gets clipped by the View's viewport, in other words, the scissor cannot affect fragments outside of the View's Viewport.
Currently the scissor is not compatible with dynamic resolution and should always be disabled when dynamic resolution is used.
- Parameters:
left- left coordinate of the scissor box relative to the viewportbottom- bottom coordinate of the scissor box relative to the viewportwidth- width of the scissor boxheight- height of the scissor box- See Also:
unsetScissor(),View.setViewport(com.google.android.filament.Viewport),View.setDynamicResolutionOptions(com.google.android.filament.View.DynamicResolutionOptions)
-
unsetScissor
public void unsetScissor()
Returns the scissor rectangle to its default disabled setting.Currently the scissor is not compatible with dynamic resolution and should always be disabled when dynamic resolution is used.
-
setPolygonOffset
public void setPolygonOffset(float scale, float constant)Sets a polygon offset that will be applied to all renderables drawn with this material instance. The value of the offset is scale * dz + r * constant, where dz is the change in depth relative to the screen area of the triangle, and r is the smallest value that is guaranteed to produce a resolvable offset for a given implementation. This offset is added before the depth test. Warning: using a polygon offset other than zero has a significant negative performance impact, as most implementations have to disable early depth culling. DO NOT USE unless absolutely necessary.- Parameters:
scale- scale factor used to create a variable depth offset for each triangleconstant- scale factor used to create a constant depth offset for each triangle
-
setMaskThreshold
public void setMaskThreshold(float threshold)
Overrides the minimum alpha value a fragment must have to not be discarded when the blend mode is MASKED. Defaults to 0.4 if it has not been set in the parent Material. The specified value should be between 0 and 1 and will be clamped if necessary.- See Also:
- Blending and transparency: maskThreshold
-
getMaskThreshold
public float getMaskThreshold()
Gets the minimum alpha value a fragment must have to not be discarded when the blend mode is MASKED
-
setSpecularAntiAliasingVariance
public void setSpecularAntiAliasingVariance(float variance)
Sets the screen space variance of the filter kernel used when applying specular anti-aliasing. The default value is set to 0.15. The specified value should be between 0 and 1 and will be clamped if necessary.
-
getSpecularAntiAliasingVariance
public float getSpecularAntiAliasingVariance()
Gets the screen space variance of the filter kernel used when applying specular anti-aliasing.
-
setSpecularAntiAliasingThreshold
public void setSpecularAntiAliasingThreshold(float threshold)
Sets the clamping threshold used to suppress estimation errors when applying specular anti-aliasing. The default value is set to 0.2. The specified value should be between 0 and 1 and will be clamped if necessary.
-
getSpecularAntiAliasingThreshold
public float getSpecularAntiAliasingThreshold()
Gets the clamping threshold used to suppress estimation errors when applying specular anti-aliasing.
-
setDoubleSided
public void setDoubleSided(boolean doubleSided)
Enables or disables double-sided lighting if the parent Material has double-sided capability, otherwise prints a warning. If double-sided lighting is enabled, backface culling is automatically disabled.- See Also:
- Rasterization: doubleSided
-
isDoubleSided
public boolean isDoubleSided()
Returns whether double-sided lighting is enabled when the parent Material has double-sided capability.
-
setCullingMode
public void setCullingMode(@NonNull Material.CullingMode mode)Overrides the default triangle culling state that was set on the material.- See Also:
- Rasterization: culling
-
getCullingMode
@NonNull public Material.CullingMode getCullingMode()
Returns the face culling mode.
-
setColorWrite
public void setColorWrite(boolean enable)
Overrides the default color-buffer write state that was set on the material.- See Also:
- Rasterization: colorWrite
-
isColorWriteEnabled
public boolean isColorWriteEnabled()
Returns whether color write is enabled.
-
setDepthWrite
public void setDepthWrite(boolean enable)
Overrides the default depth-buffer write state that was set on the material.- See Also:
- Rasterization: depthWrite
-
isDepthWriteEnabled
public boolean isDepthWriteEnabled()
Returns whether depth write is enabled.
-
setStencilWrite
public void setStencilWrite(boolean enable)
Enables or Disable stencil writes
-
isStencilWriteEnabled
public boolean isStencilWriteEnabled()
Returns whether stencil write is enabled.
-
setDepthCulling
public void setDepthCulling(boolean enable)
Overrides the default depth testing state that was set on the material.- See Also:
- Rasterization: depthCulling
-
isDepthCullingEnabled
public boolean isDepthCullingEnabled()
Returns whether depth culling is enabled.
-
setStencilCompareFunction
public void setStencilCompareFunction(TextureSampler.CompareFunction func, MaterialInstance.StencilFace face)
Sets the stencil comparison function (default isTextureSampler.CompareFunction.ALWAYS).It's possible to set separate stencil comparison functions; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the comparison function(s) updated by this call.
- Parameters:
func- the stencil comparison functionface- the faces to update the comparison function for
-
setStencilCompareFunction
public void setStencilCompareFunction(TextureSampler.CompareFunction func)
Sets the stencil comparison function for both front and back-facing polygons.
-
setStencilOpStencilFail
public void setStencilOpStencilFail(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)
Sets the stencil fail operation (default isMaterialInstance.StencilOperation.KEEP).The stencil fail operation is performed to update values in the stencil buffer when the stencil test fails.
It's possible to set separate stencil fail operations; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the stencil fail operation(s) updated by this call.
- Parameters:
op- the stencil fail operationface- the faces to update the stencil fail operation for
-
setStencilOpStencilFail
public void setStencilOpStencilFail(MaterialInstance.StencilOperation op)
Sets the stencil fail operation for both front and back-facing polygons.
-
setStencilOpDepthFail
public void setStencilOpDepthFail(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)
Sets the depth fail operation (default isMaterialInstance.StencilOperation.KEEP).The depth fail operation is performed to update values in the stencil buffer when the depth test fails.
It's possible to set separate depth fail operations; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the depth fail operation(s) updated by this call.
- Parameters:
op- the depth fail operationface- the faces to update the depth fail operation for
-
setStencilOpDepthFail
public void setStencilOpDepthFail(MaterialInstance.StencilOperation op)
Sets the depth fail operation for both front and back-facing polygons.
-
setStencilOpDepthStencilPass
public void setStencilOpDepthStencilPass(MaterialInstance.StencilOperation op, MaterialInstance.StencilFace face)
Sets the depth-stencil pass operation (default isMaterialInstance.StencilOperation.KEEP).The depth-stencil pass operation is performed to update values in the stencil buffer when both the stencil test and depth test pass.
It's possible to set separate depth-stencil pass operations; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the depth-stencil pass operation(s) updated by this call.
- Parameters:
op- the depth-stencil pass operationface- the faces to update the depth-stencil operation for
-
setStencilOpDepthStencilPass
public void setStencilOpDepthStencilPass(MaterialInstance.StencilOperation op)
Sets the depth-stencil pass operation for both front and back-facing polygons.
-
setStencilReferenceValue
public void setStencilReferenceValue(@IntRange(from=0L,to=255L) int value, MaterialInstance.StencilFace face)Sets the stencil reference value (default is 0).The stencil reference value is the left-hand side for stencil comparison tests. It's also used as the replacement stencil value when
MaterialInstance.StencilOperationisMaterialInstance.StencilOperation.REPLACE.It's possible to set separate stencil reference values; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the reference value(s) updated by this call.
- Parameters:
value- the stencil reference value (only the least significant 8 bits are used)face- the faces to update the reference value for
-
setStencilReferenceValue
public void setStencilReferenceValue(@IntRange(from=0L,to=255L) int value)Sets the stencil reference value for both front and back-facing polygons.
-
setStencilReadMask
public void setStencilReadMask(@IntRange(from=0L,to=255L) int readMask, MaterialInstance.StencilFace face)Sets the stencil read mask (default is 0xFF).The stencil read mask masks the bits of the values participating in the stencil comparison test- both the value read from the stencil buffer and the reference value.
It's possible to set separate stencil read masks; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the stencil read mask(s) updated by this call.
- Parameters:
readMask- the read mask (only the least significant 8 bits are used)face- the faces to update the read mask for
-
setStencilReadMask
public void setStencilReadMask(@IntRange(from=0L,to=255L) int readMask)Sets the stencil read mask for both front and back-facing polygons.- See Also:
setStencilReadMask(int, StencilFace)
-
setStencilWriteMask
public void setStencilWriteMask(@IntRange(from=0L,to=255L) int writeMask, MaterialInstance.StencilFace face)Sets the stencil write mask (default is 0xFF).The stencil write mask masks the bits in the stencil buffer updated by stencil operations.
It's possible to set separate stencil write masks; one for front-facing polygons, and one for back-facing polygons. The face parameter determines the stencil write mask(s) updated by this call.
- Parameters:
writeMask- the write mask (only the least significant 8 bits are used)face- the faces to update the read mask for
-
setStencilWriteMask
public void setStencilWriteMask(int writeMask)
Sets the stencil write mask for both front and back-facing polygons.- See Also:
setStencilWriteMask(int, StencilFace)
-
getNativeObject
public long getNativeObject()
-
-