mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user