
com.gempukku.libgdx.graph.plugin.lighting3d.producer.DirectionalLightShaderNodeBuilder Maven / Gradle / Ivy
package com.gempukku.libgdx.graph.plugin.lighting3d.producer;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.ObjectSet;
import com.gempukku.libgdx.graph.plugin.lighting3d.Lighting3DEnvironment;
import com.gempukku.libgdx.graph.plugin.lighting3d.Lighting3DPrivateData;
import com.gempukku.libgdx.graph.shader.BasicShader;
import com.gempukku.libgdx.graph.shader.GraphShader;
import com.gempukku.libgdx.graph.shader.GraphShaderContext;
import com.gempukku.libgdx.graph.shader.ShaderContext;
import com.gempukku.libgdx.graph.shader.ShaderFieldType;
import com.gempukku.libgdx.graph.shader.UniformRegistry;
import com.gempukku.libgdx.graph.shader.builder.CommonShaderBuilder;
import com.gempukku.libgdx.graph.shader.node.ConfigurationCommonShaderNodeBuilder;
import com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput;
public class DirectionalLightShaderNodeBuilder extends ConfigurationCommonShaderNodeBuilder {
public DirectionalLightShaderNodeBuilder() {
super(new DirectionalLightShaderNodeConfiguration());
}
@Override
protected ObjectMap buildCommonNode(boolean designTime, String nodeId, final JsonValue data, ObjectMap inputs, ObjectSet producedOutputs, CommonShaderBuilder commonShaderBuilder, GraphShaderContext graphShaderContext, GraphShader graphShader) {
final int index = data.getInt("index");
ObjectMap result = new ObjectMap<>();
if (producedOutputs.contains("direction")) {
String name = "u_directionalLightDirection" + index;
commonShaderBuilder.addUniformVariable(name, "vec3", true,
new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DEnvironment environment = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class).getEnvironment(data.getString("id", ""));
if (environment != null && environment.getDirectionalLights().size > index && environment.getDirectionalLights().get(index) != null) {
Array directionalLights = environment.getDirectionalLights();
DirectionalLight directionalLight = directionalLights.get(index);
shader.setUniform(location, directionalLight.direction);
} else {
shader.setUniform(location, 0f, 0f, 0f);
}
}
});
result.put("direction", new DefaultFieldOutput(ShaderFieldType.Vector3, name));
}
if (producedOutputs.contains("color")) {
String name = "u_directionalLightColor" + index;
commonShaderBuilder.addUniformVariable(name, "vec4", true,
new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DEnvironment environment = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class).getEnvironment(data.getString("id", ""));
if (environment != null && environment.getDirectionalLights().size > index && environment.getDirectionalLights().get(index) != null) {
Array directionalLights = environment.getDirectionalLights();
DirectionalLight directionalLight = directionalLights.get(index);
shader.setUniform(location, directionalLight.color);
} else {
shader.setUniform(location, 0f, 0f, 0f, 1f);
}
}
});
result.put("color", new DefaultFieldOutput(ShaderFieldType.Vector4, name));
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy