use of com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput in project gdx-graph by MarcinSc.
the class ObjectToWorldShaderNodeBuilder method buildCommonNode.
@Override
protected ObjectMap<String, ? extends FieldOutput> buildCommonNode(boolean designTime, String nodeId, JsonValue data, ObjectMap<String, FieldOutput> inputs, ObjectSet<String> producedOutputs, CommonShaderBuilder commonShaderBuilder, GraphShaderContext graphShaderContext, GraphShader graphShader) {
commonShaderBuilder.addUniformVariable("u_worldTrans", "mat4", false, ModelsUniformSetters.worldTrans, "Model to world transformation");
FieldOutput input = inputs.get("input");
String resultName = "result_" + nodeId;
commonShaderBuilder.addMainLine("// Object to World Node");
commonShaderBuilder.addMainLine("vec3 " + resultName + " = (u_worldTrans * vec4(" + input.getRepresentation() + ", 1.0)).xyz;");
return LibGDXCollections.singletonMap("output", new DefaultFieldOutput(ShaderFieldType.Vector3, resultName));
}
use of com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput in project gdx-graph by MarcinSc.
the class AmbientLightShaderNodeBuilder method buildCommonNode.
@Override
protected ObjectMap<String, ? extends FieldOutput> buildCommonNode(boolean designTime, String nodeId, final JsonValue data, ObjectMap<String, FieldOutput> inputs, ObjectSet<String> producedOutputs, CommonShaderBuilder commonShaderBuilder, GraphShaderContext graphShaderContext, GraphShader graphShader) {
final String environmentId = data.getString("id", "");
commonShaderBuilder.addUniformVariable("u_ambientLight_" + nodeId, "vec4", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
LightColor ambientColor = lights3DProvider.getAmbientLight(environment, shaderContext.getRenderableModel());
if (ambientColor != null) {
shader.setUniform(location, ambientColor.getRed(), ambientColor.getGreen(), ambientColor.getBlue(), 1f);
} else {
shader.setUniform(location, 0f, 0f, 0f, 1f);
}
}
}, "Ambient light");
return LibGDXCollections.singletonMap("ambient", new DefaultFieldOutput(ShaderFieldType.Vector4, "u_ambientLight_" + nodeId));
}
use of com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput in project gdx-graph by MarcinSc.
the class BlinnPhongLightingShaderNodeBuilder method buildFragmentNodeSingleInputs.
@Override
public ObjectMap<String, ? extends FieldOutput> buildFragmentNodeSingleInputs(boolean designTime, String nodeId, final JsonValue data, ObjectMap<String, FieldOutput> inputs, ObjectSet<String> producedOutputs, VertexShaderBuilder vertexShaderBuilder, FragmentShaderBuilder fragmentShaderBuilder, final GraphShaderContext graphShaderContext, GraphShader graphShader) {
final String environmentId = data.getString("id", "");
fragmentShaderBuilder.addStructure("Lighting", " vec3 diffuse;\n" + " vec3 specular;\n");
Lighting3DUtils.configureAmbientLighting(fragmentShaderBuilder, nodeId, environmentId);
ObjectMap<String, String> variables = new ObjectMap<>();
variables.put("NUM_SPOT_LIGHTS", String.valueOf(maxNumberOfSpotlights));
variables.put("NUM_POINT_LIGHTS", String.valueOf(maxNumberOfPointLights));
variables.put("NUM_DIRECTIONAL_LIGHTS", String.valueOf(maxNumberOfDirectionalLights));
variables.put("NODE_ID", nodeId);
if (maxNumberOfDirectionalLights > 0)
passDirectionalLights(environmentId, fragmentShaderBuilder, nodeId, variables);
if (maxNumberOfPointLights > 0)
passPointLights(environmentId, fragmentShaderBuilder, nodeId, variables);
if (maxNumberOfSpotlights > 0)
passSpotLights(environmentId, fragmentShaderBuilder, nodeId, variables);
FieldOutput positionValue = inputs.get("position");
FieldOutput normalValue = inputs.get("normal");
FieldOutput albedoValue = inputs.get("albedo");
FieldOutput emissionValue = inputs.get("emission");
FieldOutput specularValue = inputs.get("specular");
FieldOutput ambientOcclusionValue = inputs.get("ambientOcclusion");
FieldOutput shininessValue = inputs.get("shininess");
String position = positionValue.getRepresentation();
String normal = normalValue.getRepresentation();
String albedo = albedoValue != null ? albedoValue.getRepresentation() : "vec3(0.0)";
String emission = emissionValue != null ? emissionValue.getRepresentation() : "vec3(0.0)";
String specular = specularValue != null ? specularValue.getRepresentation() : "vec3(1.0)";
String ambientOcclusion = ambientOcclusionValue != null ? ambientOcclusionValue.getRepresentation() : "1.0";
String shininess = shininessValue != null ? shininessValue.getRepresentation() : "32.0";
fragmentShaderBuilder.addMainLine("// Blinn-Phong Lighting node");
String calculateLightingFunctionName = "calculateBlinnPhongLightingFunction_" + nodeId;
String calculateLightingFunction = createCalculateLightingFunction(nodeId);
fragmentShaderBuilder.addFunction(calculateLightingFunctionName, calculateLightingFunction);
String lightingVariable = "lighting_" + nodeId;
fragmentShaderBuilder.addMainLine("Lighting " + lightingVariable + " = " + calculateLightingFunctionName + "(" + position + ", " + normal + ", " + shininess + ");");
ShaderFieldType resultType = ShaderFieldTypeRegistry.findShaderFieldType(ShaderFieldType.Vector3);
ObjectMap<String, DefaultFieldOutput> result = new ObjectMap<>();
if (producedOutputs.contains("output")) {
String name = "color_" + nodeId;
fragmentShaderBuilder.addMainLine(resultType.getShaderType() + " " + name + " = " + emission + ".rgb + " + ambientOcclusion + " * u_ambientLight_" + nodeId + " * " + albedo + ".rgb;");
fragmentShaderBuilder.addMainLine(name + " += " + lightingVariable + ".diffuse * " + albedo + ".rgb + " + lightingVariable + ".specular * " + specular + ".rgb;");
result.put("output", new DefaultFieldOutput(resultType.getName(), name));
}
if (producedOutputs.contains("diffuse")) {
result.put("diffuse", new DefaultFieldOutput(resultType.getName(), lightingVariable + ".diffuse"));
}
if (producedOutputs.contains("specularOut")) {
result.put("specularOut", new DefaultFieldOutput(resultType.getName(), lightingVariable + ".specular"));
}
return result;
}
use of com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput in project gdx-graph by MarcinSc.
the class DirectionalLightShaderNodeBuilder method buildCommonNode.
@Override
protected ObjectMap<String, ? extends FieldOutput> buildCommonNode(boolean designTime, String nodeId, final JsonValue data, ObjectMap<String, FieldOutput> inputs, ObjectSet<String> producedOutputs, CommonShaderBuilder commonShaderBuilder, GraphShaderContext graphShaderContext, GraphShader graphShader) {
final int index = data.getInt("index");
final String environmentId = data.getString("id", "");
ObjectMap<String, DefaultFieldOutput> result = new ObjectMap<>();
if (producedOutputs.contains("direction")) {
String name = "u_directionalLightDirection_" + nodeId + "_" + index;
commonShaderBuilder.addUniformVariable(name, "vec3", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
Array<Directional3DLight> directionalLights = lights3DProvider.getDirectionalLights(environment, shaderContext.getRenderableModel(), index + 1);
if (directionalLights != null && directionalLights.size > index && directionalLights.get(index) != null) {
Directional3DLight directionalLight = directionalLights.get(index);
shader.setUniform(location, directionalLight.getDirectionX(), directionalLight.getDirectionY(), directionalLight.getDirectionZ());
} else {
shader.setUniform(location, 0f, 0f, 0f);
}
}
}, "Light direction");
result.put("direction", new DefaultFieldOutput(ShaderFieldType.Vector3, name));
}
if (producedOutputs.contains("color")) {
String name = "u_directionalLightColor_" + nodeId + "_" + index;
commonShaderBuilder.addUniformVariable(name, "vec4", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
Array<Directional3DLight> directionalLights = lights3DProvider.getDirectionalLights(environment, shaderContext.getRenderableModel(), index + 1);
if (directionalLights != null && directionalLights.size > index && directionalLights.get(index) != null) {
Directional3DLight directionalLight = directionalLights.get(index);
LightColor color = directionalLight.getColor();
shader.setUniform(location, color.getRed(), color.getGreen(), color.getBlue(), 1f);
} else {
shader.setUniform(location, 0f, 0f, 0f, 1f);
}
}
}, "Light color");
result.put("color", new DefaultFieldOutput(ShaderFieldType.Vector4, name));
}
return result;
}
use of com.gempukku.libgdx.graph.shader.node.DefaultFieldOutput in project gdx-graph by MarcinSc.
the class PointLightShaderNodeBuilder method buildCommonNode.
@Override
protected ObjectMap<String, ? extends FieldOutput> buildCommonNode(boolean designTime, String nodeId, final JsonValue data, ObjectMap<String, FieldOutput> inputs, ObjectSet<String> producedOutputs, CommonShaderBuilder commonShaderBuilder, GraphShaderContext graphShaderContext, GraphShader graphShader) {
final int index = data.getInt("index");
final String environmentId = data.getString("id", "");
ObjectMap<String, DefaultFieldOutput> result = new ObjectMap<>();
if (producedOutputs.contains("position")) {
String name = "u_pointLightPosition_" + nodeId + "_" + index;
commonShaderBuilder.addUniformVariable(name, "vec3", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
Array<Point3DLight> pointLights = lights3DProvider.getPointLights(environment, shaderContext.getRenderableModel(), index + 1);
if (pointLights != null && pointLights.size > index && pointLights.get(index) != null) {
Point3DLight pointLight = pointLights.get(index);
shader.setUniform(location, pointLight.getPosition());
} else {
shader.setUniform(location, 0f, 0f, 0f);
}
}
}, "Point light position");
result.put("position", new DefaultFieldOutput(ShaderFieldType.Vector3, name));
}
if (producedOutputs.contains("color")) {
String name = "u_pointLightColor_" + nodeId + "_" + index;
commonShaderBuilder.addUniformVariable(name, "vec4", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
Array<Point3DLight> pointLights = lights3DProvider.getPointLights(environment, shaderContext.getRenderableModel(), index + 1);
if (pointLights != null && pointLights.size > index && pointLights.get(index) != null) {
Point3DLight pointLight = pointLights.get(index);
LightColor color = pointLight.getColor();
shader.setUniform(location, color.getRed(), color.getGreen(), color.getBlue(), 1f);
} else {
shader.setUniform(location, 0f, 0f, 0f, 1f);
}
}
}, "Point light color");
result.put("color", new DefaultFieldOutput(ShaderFieldType.Vector4, name));
}
if (producedOutputs.contains("intensity")) {
String name = "u_pointLightIntensity_" + nodeId + "_" + index;
commonShaderBuilder.addUniformVariable(name, "float", false, new UniformRegistry.UniformSetter() {
@Override
public void set(BasicShader shader, int location, ShaderContext shaderContext) {
Lighting3DPrivateData privatePluginData = shaderContext.getPrivatePluginData(Lighting3DPrivateData.class);
Lighting3DEnvironment environment = privatePluginData.getEnvironment(environmentId);
Lights3DProvider lights3DProvider = privatePluginData.getLights3DProvider();
Array<Point3DLight> pointLights = lights3DProvider.getPointLights(environment, shaderContext.getRenderableModel(), index + 1);
if (pointLights != null && pointLights.size > index && pointLights.get(index) != null) {
Point3DLight pointLight = pointLights.get(index);
shader.setUniform(location, pointLight.getIntensity());
} else {
shader.setUniform(location, 0f);
}
}
}, "Point light intensity");
result.put("intensity", new DefaultFieldOutput(ShaderFieldType.Float, name));
}
return result;
}
Aggregations