【发布时间】:2014-02-02 13:10:20
【问题描述】:
我做的对吗?我基本上是想执行某个void方法。
public abstract class Uniforms {
public static void setUniformMatrix4(final UniformLocation uniformLocation, final boolean transpose, final Matrix4f matrix4f) {
setUniformImpl(uniformLocation, u -> GL20.glUniformMatrix4(uniformLocation.getLocation(), transpose, matrix4f.asFloatBuffer()));
}
public static void setUniformMatrix4(final UniformLocation uniformLocation, final boolean transpose, final FloatBuffer matrix4fFloatBuffer) {
setUniformImpl(uniformLocation, u -> GL20.glUniformMatrix4(uniformLocation.getLocation(), transpose, matrix4fFloatBuffer));
}
public static void setUniform(final UniformLocation uniformLocation, final float value) {
setUniformImpl(uniformLocation, u -> GL20.glUniform1f(uniformLocation.getLocation(), value));
}
public static void setUniform(final UniformLocation uniformLocation, final int value) {
setUniformImpl(uniformLocation, u -> GL20.glUniform1i(uniformLocation.getLocation(), value));
}
private static void setUniformImpl(final UniformLocation uniformLocation, final Consumer<UniformLocation> consumer) {
Program oldProgram = Program.getUsing();
for (Program program : Program.getPrograms()) {
if (program.usesUniform(uniformLocation)) {
program.use();
consumer.accept(uniformLocation);
}
}
if (oldProgram != null) {
oldProgram.use();
}
}
}
【问题讨论】:
-
是的,它看起来不错,您为什么认为有问题?
-
@assylias 因为我不确定是否应该这样使用 lambda,所以
Consumer<T>通常会消耗T。但是在我的情况下,我正在传递的u没有被使用。我可能认为我需要什么不消耗也不产生什么的东西? -
@Downvoter:请说明原因。
-
也许反对票是因为不清楚您的问题是什么。但他们应该留下评论。不过,您之前的评论确实澄清了这个问题。