Noob with shaders, "The request technique is not available....."

Hi everyone,

Yesterday I first started using shaders, and made some of my own. These are very basic.
Thus I made this small shader, that applies a cosine on the input color “Color”.

These is the .frag I used:

void main(){
    //@input vec4 inColor The colour to alter
    //@output vec4 outColor The colour output, used the cosine.

    outColour = cos(inColor);
}

very basic, as you can see. I’m honestly not even sure if the cosine even works.

This is the .vert I used:

uniform mat4 g_WorldViewProjectionMatrix;

attribute vec3 inPosition;

void main(){
    gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);
}

I didn’t use shadernodes for the vertex shader, I got the code from some website with openGL examples.

And this is the shader node for the .frag:

ShaderNodeDefinitions{ 
    ShaderNodeDefinition WeirdColours {      
        Type: Fragment

        Shader GLSL100: Shaders/Testing/Simple/WeirdColors100.frag
        
        Documentation{
            This shader will use cos to alter colour,            
            @input vec4 inColor The colour to alter
            @output vec4 outColor The colour output, used the cosine.
        }
        Input {
            vec4 inColor
        }
        Output {
             vec4 outColor
        }
    }
}

I stitched it all together in the matDef:

MaterialDef SimpleCos {
    MaterialParameters {
        Color Color
    }
    Technique {
        WorldParameters {
            WorldViewProjectionMatrix
        }
        
        VertexShader GLSL100:   Shaders/vertexSimple.vert
        
        FragmentShaderNodes {
            ShaderNode WeirdColors {
                Definition : WeirdColors : Shaders/Testing/Simple/WeirdColors.j3sn
                InputMappings {
                    inColor = MatParam.Color
                }
                OutputMappings {
                    Global.color = outColor
                }
            }
        }
    }
}

However, when I apply this material on a Geometry, it gives me an exception:

java.lang.IllegalArgumentException: The requested technique Default is not available on material SimpleCos

followed by a lot of stacktracing, all starting with com.jme3.


Thus, I have 3 questions:

  1. Why do I get an IAException?
  2. Does the function cos(vec4) work?
  3. Does the function cos(float) work?

If any code is missing, feel free to ask for it.


EDIT:

btw, I eventually want to use the formula 0.5*cos((x-1)*3.15)+0.5 instead of cos(x).
You can compare the 2 formulas here and see why.

you can’t mix a hand written vertex shader and a shader nodes based fragment shader.
all should be shader nodes or all should be hand written…

Ok, I’ll try making a shadernode of the vertex shader tomorrow.