/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
******************************************************************************/
package com.badlogic.gdx.graphics.g3d.materials;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.utils.Pool;
public class BlendingAttribute extends MaterialAttribute {
/** if BlendingAttribute name is translucent then default tranparency mechanism is used in shader */
public static final String translucent = "translucent";
public int blendSrcFunc;
public int blendDstFunc;
protected BlendingAttribute() {
}
/**
* Utility constuctor for basic transparency blendSrcFunc = GL10.GL_SRC_ALPHA blendDstFunc =
* GL10.GL_ONE_MINUS_SRC_ALPHA
*
* @param name
*/
public BlendingAttribute(String name) {
this(name, GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
public BlendingAttribute(String name, int srcFunc, int dstFunc) {
super(name);
blendSrcFunc = srcFunc;
blendDstFunc = dstFunc;
}
@Override
public void bind() {
Gdx.gl.glBlendFunc(blendSrcFunc, blendDstFunc);
}
@Override
public void bind(ShaderProgram program) {
Gdx.gl.glBlendFunc(blendSrcFunc, blendDstFunc);
}
@Override
public MaterialAttribute copy() {
return new BlendingAttribute(this.name, this.blendSrcFunc, this.blendDstFunc);
}
@Override
public void set(MaterialAttribute attr) {
BlendingAttribute blendAttr = (BlendingAttribute) attr;
name = blendAttr.name;
blendDstFunc = blendAttr.blendDstFunc;
blendSrcFunc = blendAttr.blendSrcFunc;
}
private final static Pool<BlendingAttribute> pool = new Pool<BlendingAttribute>() {
@Override
protected BlendingAttribute newObject() {
return new BlendingAttribute();
}
};
@Override
public MaterialAttribute pooledCopy() {
BlendingAttribute attr = pool.obtain();
attr.set(this);
return attr;
}
@Override
public void free() {
if (isPooled)
pool.free(this);
}
}