Blame |
Last modification |
View Log
| RSS feed
package com.gebauz.bauzoid.graphics.shader;
import java.nio.FloatBuffer;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.BufferUtils;
import com.gebauz.bauzoid.math.Matrix4;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.Vector3;
import com.gebauz.bauzoid.math.Vector4;
/** Encapsulates a shader uniform variable. */
public class ShaderUniform
{
private ShaderProgram mShader
;
private String mName
;
//private int mHandle;
/** Cache so that it does not need to be recreated every time. */
private FloatBuffer mMatrixCache =
null;
/** Constructor. */
public ShaderUniform
(ShaderProgram shader,
String name
/*, int handle*/)
{
mShader = shader
;
mName = name
;
//mHandle = handle;
mMatrixCache = BufferUtils.
newFloatBuffer(16);
}
/** Set a boolean value. */
public final void set
(boolean value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform1i(handle,
(value
? 1 :
0));
}
/** Set an integer. */
public final void set
(int value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform1i(handle, value
);
}
/** Set a float value. */
public final void set
(float value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform1f(handle, value
);
}
/** Set a Vector2 value. */
public final void set
(Vector2 value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform2f(handle, value.
x, value.
y);
}
/** Set a Vector3 value. */
public final void set
(Vector3 value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform3f(handle, value.
x, value.
y, value.
z);
}
/** Set a Vector4 value. */
public final void set
(Vector4 value
)
{
int handle = mShader.
getUniformHandle(mName
);
Gdx.
gl20.
glUniform4f(handle, value.
x, value.
y, value.
z, value.
w);
}
/** Set a 4x4 Matrix. */
public final void set
(Matrix4 value
)
{
int handle = mShader.
getUniformHandle(mName
);
float[] m = value.
toGLMatrix();
mMatrixCache.
clear();
BufferUtils.
copy(m, mMatrixCache, m.
length,
0);
Gdx.
gl20.
glUniformMatrix4fv(handle,
1,
false, mMatrixCache
);
/* float[] m = value.toGLMatrix();
FloatBuffer fb = BufferUtils.newFloatBuffer(16);
BufferUtils.copy(m, fb, 16, 0);
Gdx.gl20.glUniformMatrix4fv(handle, 1, false, fb);
*/
}
}