Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1051 chris 1
package com.gebauz.bauzoid.graphics.shader;
2
 
3
import java.nio.FloatBuffer;
4
 
5
import com.badlogic.gdx.Gdx;
6
import com.badlogic.gdx.utils.BufferUtils;
7
import com.gebauz.bauzoid.math.Matrix4;
8
import com.gebauz.bauzoid.math.Vector2;
9
import com.gebauz.bauzoid.math.Vector3;
10
import com.gebauz.bauzoid.math.Vector4;
11
 
12
/** Encapsulates a shader uniform variable. */
13
public class ShaderUniform
14
{
15
        private ShaderProgram mShader;
16
        private String mName;
17
        //private int mHandle;
18
 
19
        /** Cache so that it does not need to be recreated every time. */
20
        private FloatBuffer mMatrixCache = null;
21
 
22
        /** Constructor. */
23
        public ShaderUniform(ShaderProgram shader, String name/*, int handle*/)
24
        {
25
                mShader = shader;
26
                mName = name;          
27
                //mHandle = handle;
28
                mMatrixCache = BufferUtils.newFloatBuffer(16);
29
        }
30
 
31
        /** Set a boolean value. */
32
        public final void set(boolean value)
33
        {
34
                int handle = mShader.getUniformHandle(mName);
35
 
36
                Gdx.gl20.glUniform1i(handle, (value ? 1 : 0));         
37
        }
38
 
39
        /** Set an integer. */
40
        public final void set(int value)
41
        {
42
                int handle = mShader.getUniformHandle(mName);
43
 
44
                Gdx.gl20.glUniform1i(handle, value);
45
        }
46
 
47
        /** Set a float value. */
48
        public final void set(float value)
49
        {
50
                int handle = mShader.getUniformHandle(mName);
51
 
52
                Gdx.gl20.glUniform1f(handle, value);
53
        }
54
 
55
        /** Set a Vector2 value. */
56
        public final void set(Vector2 value)
57
        {
58
                int handle = mShader.getUniformHandle(mName);
59
 
60
                Gdx.gl20.glUniform2f(handle, value.x, value.y);
61
        }
62
 
63
        /** Set a Vector3 value. */
64
        public final void set(Vector3 value)
65
        {
66
                int handle = mShader.getUniformHandle(mName);
67
 
68
                Gdx.gl20.glUniform3f(handle, value.x, value.y, value.z);
69
        }
70
 
71
        /** Set a Vector4 value. */
72
        public final void set(Vector4 value)
73
        {
74
                int handle = mShader.getUniformHandle(mName);
75
 
76
                Gdx.gl20.glUniform4f(handle, value.x, value.y, value.z, value.w);
77
        }      
78
 
79
        /** Set a 4x4 Matrix. */
80
        public final void set(Matrix4 value)
81
        {
82
                int handle = mShader.getUniformHandle(mName);
83
 
84
                float[] m = value.toGLMatrix();
85
                mMatrixCache.clear();
86
                BufferUtils.copy(m, mMatrixCache, m.length, 0);
87
                Gdx.gl20.glUniformMatrix4fv(handle, 1, false, mMatrixCache);
88
 
89
/*              float[] m = value.toGLMatrix();
90
                FloatBuffer fb = BufferUtils.newFloatBuffer(16);
91
                BufferUtils.copy(m, fb, 16, 0);
92
                Gdx.gl20.glUniformMatrix4fv(handle, 1, false, fb);
93
                */
94
        }
95
}
96
 
97