Search in sources :

Example 1 with BooleanConsumer

use of it.unimi.dsi.fastutil.booleans.BooleanConsumer in project Iris by IrisShaders.

the class DispatchingDirectiveHolder method processDirective.

public void processDirective(ConstDirectiveParser.ConstDirective directive) {
    final ConstDirectiveParser.Type type = directive.getType();
    final String key = directive.getKey();
    final String value = directive.getValue();
    if (type == ConstDirectiveParser.Type.BOOL) {
        BooleanConsumer consumer = booleanConstVariables.get(key);
        if (consumer != null) {
            if ("true".equals(value)) {
                consumer.accept(true);
            } else if ("false".equals(value)) {
                consumer.accept(false);
            } else {
                Iris.logger.error("Failed to process " + directive + ": " + value + " is not a valid boolean value");
            }
            return;
        }
        if (IrisLogging.ENABLE_SPAM) {
            // Only logspam in dev
            Iris.logger.info("Found potential unhandled directive: " + directive);
        }
        typeCheckHelper("int", intConstVariables, directive);
        typeCheckHelper("int", stringConstVariables, directive);
        typeCheckHelper("float", floatConstVariables, directive);
        typeCheckHelper("vec4", vec4ConstVariables, directive);
    } else if (type == ConstDirectiveParser.Type.INT) {
        // GLSL does not actually have a string type, so string constant directives use "const int" instead.
        Consumer<String> stringConsumer = stringConstVariables.get(key);
        if (stringConsumer != null) {
            stringConsumer.accept(value);
            return;
        }
        IntConsumer intConsumer = intConstVariables.get(key);
        if (intConsumer != null) {
            try {
                intConsumer.accept(Integer.parseInt(value));
            } catch (NumberFormatException e) {
                Iris.logger.error("Failed to process " + directive, e);
            }
            return;
        }
        if (IrisLogging.ENABLE_SPAM) {
            // Only logspam in dev
            Iris.logger.info("Found potential unhandled directive: " + directive);
        }
        typeCheckHelper("bool", booleanConstVariables, directive);
        typeCheckHelper("float", floatConstVariables, directive);
        typeCheckHelper("vec4", vec4ConstVariables, directive);
    } else if (type == ConstDirectiveParser.Type.FLOAT) {
        FloatConsumer consumer = floatConstVariables.get(key);
        if (consumer != null) {
            try {
                consumer.accept(Float.parseFloat(value));
            } catch (NumberFormatException e) {
                Iris.logger.error("Failed to process " + directive, e);
            }
            return;
        }
        if (IrisLogging.ENABLE_SPAM) {
            // Only logspam in dev
            Iris.logger.info("Found potential unhandled directive: " + directive);
        }
        typeCheckHelper("bool", booleanConstVariables, directive);
        typeCheckHelper("int", intConstVariables, directive);
        typeCheckHelper("int", stringConstVariables, directive);
        typeCheckHelper("vec4", vec4ConstVariables, directive);
    } else if (type == ConstDirectiveParser.Type.VEC4) {
        Consumer<Vector4f> consumer = vec4ConstVariables.get(key);
        if (consumer != null) {
            if (!value.startsWith("vec4")) {
                Iris.logger.error("Failed to process " + directive + ": value was not a valid vec4 constructor");
            }
            String vec4Args = value.substring("vec4".length()).trim();
            if (!vec4Args.startsWith("(") || !vec4Args.endsWith(")")) {
                Iris.logger.error("Failed to process " + directive + ": value was not a valid vec4 constructor");
            }
            vec4Args = vec4Args.substring(1, vec4Args.length() - 1);
            String[] parts = vec4Args.split(",");
            for (int i = 0; i < parts.length; i++) {
                parts[i] = parts[i].trim();
            }
            if (parts.length != 4) {
                Iris.logger.error("Failed to process " + directive + ": expected 4 arguments to a vec4 constructor, got " + parts.length);
            }
            try {
                consumer.accept(new Vector4f(Float.parseFloat(parts[0]), Float.parseFloat(parts[1]), Float.parseFloat(parts[2]), Float.parseFloat(parts[3])));
            } catch (NumberFormatException e) {
                Iris.logger.error("Failed to process " + directive, e);
            }
            return;
        }
        typeCheckHelper("bool", booleanConstVariables, directive);
        typeCheckHelper("int", intConstVariables, directive);
        typeCheckHelper("int", stringConstVariables, directive);
        typeCheckHelper("float", floatConstVariables, directive);
    }
}
Also used : Consumer(java.util.function.Consumer) FloatConsumer(it.unimi.dsi.fastutil.floats.FloatConsumer) BooleanConsumer(it.unimi.dsi.fastutil.booleans.BooleanConsumer) IntConsumer(java.util.function.IntConsumer) Vector4f(net.coderbot.iris.vendored.joml.Vector4f) BooleanConsumer(it.unimi.dsi.fastutil.booleans.BooleanConsumer) FloatConsumer(it.unimi.dsi.fastutil.floats.FloatConsumer) IntConsumer(java.util.function.IntConsumer)

Aggregations

BooleanConsumer (it.unimi.dsi.fastutil.booleans.BooleanConsumer)1 FloatConsumer (it.unimi.dsi.fastutil.floats.FloatConsumer)1 Consumer (java.util.function.Consumer)1 IntConsumer (java.util.function.IntConsumer)1 Vector4f (net.coderbot.iris.vendored.joml.Vector4f)1