Subversion Repositories AndroidProjects

Rev

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);*/

            }
    }
}