Rev 787 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tao.OpenGl;
using BauzoidNET.math;
#pragma warning disable 0618
namespace BauzoidNET.graphics.shader
{
public class ShaderUniform
{
private ShaderProgram mShader;
private String mName;
/** Cache so that it does not need to be recreated every time. */
//private FloatBuffer mMatrixCache = null;
/** Constructor. */
public ShaderUniform(ShaderProgram shader, String name)
{
mShader = shader;
mName = name;
//mMatrixCache = BufferUtils.newFloatBuffer(16);
}
/** Set a boolean value. */
public void set(bool value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform1i(handle, (value ? 1 : 0));
}
/** Set an integer. */
public void set(int value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform1i(handle, value);
}
/** Set a float value. */
public void set(float value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform1f(handle, value);
}
/** Set a Vector2 value. */
public void set(Vector2 value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform2f(handle, value.x, value.y);
}
/** Set a Vector3 value. */
public void set(Vector3 value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform3f(handle, value.x, value.y, value.z);
}
/** Set a Vector4 value. */
public void set(Vector4 value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniform4f(handle, value.x, value.y, value.z, value.w);
}
/** Set a 4x4 Matrix. */
public void set(Matrix4 value)
{
int handle = mShader.getUniformHandle(mName);
Gl.glUniformMatrix4fv(handle, 1, Gl.GL_FALSE, value.toGLMatrix());
/*float[] m = value.toGLMatrix();
mMatrixCache.clear();
BufferUtils.copy(m, mMatrixCache, m.length, 0);
Gl.glUniformMatrix4fv(handle, 1, false, mMatrixCache);*/
}
}
}