Subversion Repositories AndroidProjects

Rev

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

        }
}