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
@@ -6760,16 +6760,17 @@ public class PGraphicsOpenGL extends PGraphics {
setUniformMatrix(normalMatrixLoc, pgCurrent.glNormal);
}
setUniformValue(lightCountLoc, pgCurrent.lightCount);
setUniformVector(lightPositionLoc, pgCurrent.lightPosition, 4);
setUniformVector(lightNormalLoc, pgCurrent.lightNormal, 3);
setUniformVector(lightAmbientLoc, pgCurrent.lightAmbient, 3);
setUniformVector(lightDiffuseLoc, pgCurrent.lightDiffuse, 3);
setUniformVector(lightSpecularLoc, pgCurrent.lightSpecular, 3);
int count = pgCurrent.lightCount;
setUniformValue(lightCountLoc, count);
setUniformVector(lightPositionLoc, pgCurrent.lightPosition, 4, count);
setUniformVector(lightNormalLoc, pgCurrent.lightNormal, 3, count);
setUniformVector(lightAmbientLoc, pgCurrent.lightAmbient, 3, count);
setUniformVector(lightDiffuseLoc, pgCurrent.lightDiffuse, 3, count);
setUniformVector(lightSpecularLoc, pgCurrent.lightSpecular, 3, count);
setUniformVector(lightFalloffCoefficientsLoc,
pgCurrent.lightFalloffCoefficients, 3);
pgCurrent.lightFalloffCoefficients, 3, count);
setUniformVector(lightSpotParametersLoc,
pgCurrent.lightSpotParameters, 2);
pgCurrent.lightSpotParameters, 2, count);
}
@Override
+12 -10
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);
}
}
}
@@ -6760,16 +6760,17 @@ public class PGraphicsOpenGL extends PGraphics {
setUniformMatrix(normalMatrixLoc, pgCurrent.glNormal);
}
setUniformValue(lightCountLoc, pgCurrent.lightCount);
setUniformVector(lightPositionLoc, pgCurrent.lightPosition, 4);
setUniformVector(lightNormalLoc, pgCurrent.lightNormal, 3);
setUniformVector(lightAmbientLoc, pgCurrent.lightAmbient, 3);
setUniformVector(lightDiffuseLoc, pgCurrent.lightDiffuse, 3);
setUniformVector(lightSpecularLoc, pgCurrent.lightSpecular, 3);
int count = pgCurrent.lightCount;
setUniformValue(lightCountLoc, count);
setUniformVector(lightPositionLoc, pgCurrent.lightPosition, 4, count);
setUniformVector(lightNormalLoc, pgCurrent.lightNormal, 3, count);
setUniformVector(lightAmbientLoc, pgCurrent.lightAmbient, 3, count);
setUniformVector(lightDiffuseLoc, pgCurrent.lightDiffuse, 3, count);
setUniformVector(lightSpecularLoc, pgCurrent.lightSpecular, 3, count);
setUniformVector(lightFalloffCoefficientsLoc,
pgCurrent.lightFalloffCoefficients, 3);
pgCurrent.lightFalloffCoefficients, 3, count);
setUniformVector(lightSpotParametersLoc,
pgCurrent.lightSpotParameters, 2);
pgCurrent.lightSpotParameters, 2, count);
}
@Override
+12 -10
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);
}
}
}