setUniformVector takes length of array as argument, so partially full arrays can be passed to shader w/out wasting empty elements

This commit is contained in:
codeanticode
2012-09-12 20:15:59 +00:00
parent c38bd0cfeb
commit a109b1bc9b
4 changed files with 42 additions and 36 deletions

View File

@@ -431,31 +431,33 @@ public class PShader {
}
protected void setUniformVector(int loc, int[] vec, int ncoords) {
protected void setUniformVector(int loc, int[] vec, int ncoords,
int length) {
if (-1 < loc) {
if (ncoords == 1) {
pgl.uniform1iv(loc, vec.length, vec, 0);
pgl.uniform1iv(loc, length, vec, 0);
} else if (ncoords == 2) {
pgl.uniform2iv(loc, vec.length / 2, vec, 0);
pgl.uniform2iv(loc, length, vec, 0);
} else if (ncoords == 3) {
pgl.uniform3iv(loc, vec.length / 3, vec, 0);
pgl.uniform3iv(loc, length, vec, 0);
} else if (ncoords == 4) {
pgl.uniform3iv(loc, vec.length / 4, vec, 0);
pgl.uniform3iv(loc, length, vec, 0);
}
}
}
protected void setUniformVector(int loc, float[] vec, int ncoords) {
protected void setUniformVector(int loc, float[] vec, int ncoords,
int length) {
if (-1 < loc) {
if (ncoords == 1) {
pgl.uniform1fv(loc, vec.length, vec, 0);
pgl.uniform1fv(loc, length, vec, 0);
} else if (ncoords == 2) {
pgl.uniform2fv(loc, vec.length / 2, vec, 0);
pgl.uniform2fv(loc, length, vec, 0);
} else if (ncoords == 3) {
pgl.uniform3fv(loc, vec.length / 3, vec, 0);
pgl.uniform3fv(loc, length, vec, 0);
} else if (ncoords == 4) {
pgl.uniform4fv(loc, vec.length / 4, vec, 0);
pgl.uniform4fv(loc, length, vec, 0);
}
}
}