package loon.opengl.d3d.materials; import loon.LTexture; public class TextureAttribute extends Material.Attribute { public final static String DiffuseAlias = "diffuseTexture"; public final static long Diffuse = register(DiffuseAlias); public final static String SpecularAlias = "specularTexture"; public final static long Specular = register(SpecularAlias); public final static String BumpAlias = "bumpTexture"; public final static long Bump = register(BumpAlias); public final static String NormalAlias = "normalTexture"; public final static long Normal = register(NormalAlias); protected static long Mask = Diffuse | Specular | Bump | Normal; public final static boolean is(final long mask) { return (mask & Mask) != 0; } public static TextureAttribute createDiffuse(final LTexture texture) { return new TextureAttribute(Diffuse, texture); } public static TextureAttribute createSpecular(final LTexture texture) { return new TextureAttribute(Specular, texture); } public final TextureDescriptor textureDescription; public TextureAttribute(final long type, final TextureDescriptor textureDescription) { super(type); if (!is(type)){ throw new RuntimeException("Invalid type specified"); } this.textureDescription = textureDescription; } public TextureAttribute(final long type) { this(type, new TextureDescriptor()); } public TextureAttribute(final long type, final LTexture texture) { this(type, new TextureDescriptor(texture)); } public TextureAttribute(final TextureAttribute copyFrom) { this(copyFrom.type, copyFrom.textureDescription); } @Override public Material.Attribute cpy () { return new TextureAttribute(this); } @Override protected boolean equals (Material.Attribute other) { return ((TextureAttribute)other).textureDescription.equals(textureDescription); } }