• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.graphics.g3d.attributes;
18 
19 import com.badlogic.gdx.graphics.GL20;
20 import com.badlogic.gdx.graphics.g3d.Attribute;
21 import com.badlogic.gdx.math.MathUtils;
22 import com.badlogic.gdx.utils.NumberUtils;
23 
24 public class BlendingAttribute extends Attribute {
25 	public final static String Alias = "blended";
26 	public final static long Type = register(Alias);
27 
is(final long mask)28 	public final static boolean is (final long mask) {
29 		return (mask & Type) == mask;
30 	}
31 
32 	/** Whether this material should be considered blended (default: true). This is used for sorting (back to front instead of front
33 	 * to back). */
34 	public boolean blended;
35 	/** Specifies how the (incoming) red, green, blue, and alpha source blending factors are computed (default: GL_SRC_ALPHA) */
36 	public int sourceFunction;
37 	/** Specifies how the (existing) red, green, blue, and alpha destination blending factors are computed (default:
38 	 * GL_ONE_MINUS_SRC_ALPHA) */
39 	public int destFunction;
40 	/** The opacity used as source alpha value, ranging from 0 (fully transparent) to 1 (fully opaque), (default: 1). */
41 	public float opacity = 1.f;
42 
BlendingAttribute()43 	public BlendingAttribute () {
44 		this(null);
45 	}
46 
BlendingAttribute(final boolean blended, final int sourceFunc, final int destFunc, final float opacity)47 	public BlendingAttribute (final boolean blended, final int sourceFunc, final int destFunc, final float opacity) {
48 		super(Type);
49 		this.blended = blended;
50 		this.sourceFunction = sourceFunc;
51 		this.destFunction = destFunc;
52 		this.opacity = opacity;
53 	}
54 
BlendingAttribute(final int sourceFunc, final int destFunc, final float opacity)55 	public BlendingAttribute (final int sourceFunc, final int destFunc, final float opacity) {
56 		this(true, sourceFunc, destFunc, opacity);
57 	}
58 
BlendingAttribute(final int sourceFunc, final int destFunc)59 	public BlendingAttribute (final int sourceFunc, final int destFunc) {
60 		this(sourceFunc, destFunc, 1.f);
61 	}
62 
BlendingAttribute(final boolean blended, final float opacity)63 	public BlendingAttribute (final boolean blended, final float opacity) {
64 		this(blended, GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, opacity);
65 	}
66 
BlendingAttribute(final float opacity)67 	public BlendingAttribute (final float opacity) {
68 		this(true, opacity);
69 	}
70 
BlendingAttribute(final BlendingAttribute copyFrom)71 	public BlendingAttribute (final BlendingAttribute copyFrom) {
72 		this(copyFrom == null ? true : copyFrom.blended, copyFrom == null ? GL20.GL_SRC_ALPHA : copyFrom.sourceFunction,
73 			copyFrom == null ? GL20.GL_ONE_MINUS_SRC_ALPHA : copyFrom.destFunction, copyFrom == null ? 1.f : copyFrom.opacity);
74 	}
75 
76 	@Override
copy()77 	public BlendingAttribute copy () {
78 		return new BlendingAttribute(this);
79 	}
80 
81 	@Override
hashCode()82 	public int hashCode () {
83 		int result = super.hashCode();
84 		result = 947 * result + (blended ? 1 : 0);
85 		result = 947 * result + sourceFunction;
86 		result = 947 * result + destFunction;
87 		result = 947 * result + NumberUtils.floatToRawIntBits(opacity);
88 		return result;
89 	}
90 
91 	@Override
compareTo(Attribute o)92 	public int compareTo (Attribute o) {
93 		if (type != o.type) return (int)(type - o.type);
94 		BlendingAttribute other = (BlendingAttribute)o;
95 		if (blended != other.blended) return blended ? 1 : -1;
96 		if (sourceFunction != other.sourceFunction) return sourceFunction - other.sourceFunction;
97 		if (destFunction != other.destFunction) return destFunction - other.destFunction;
98 		return (MathUtils.isEqual(opacity, other.opacity)) ? 0 : (opacity < other.opacity ? 1 : -1);
99 	}
100 }
101