glfx: parameter* technique*
parameter: ['param'] type name ['=' value] ';'
type: 'float' 'vec2' 'vec3' 'vec4' 'texture1d' 'texture2d' 'texture3d' 'texturecube' 'vertex_shader' 'fragment_shader' 'program'
value: float vec2_value vec3_value vec4_value texture1d_value texture2d_value texture3d_value texturecube_value vertex_shader_value fragment_shader_value program_value
vec2_value: (float, float) vec3_value: (float, float, float) vec4_value: (float, float, float, float) texture1d_value: 'load_texture1d(' string ')' texture2d_value: 'load_texture2d(' string ')' texture3d_value: 'load_texture3d(' string ')' texturecube_value: 'load_texturecube(' string ')' vertex_shader_value: 'compile_vertex_shader(' string ')' fragment_shader_value: 'compile_fragment_shader(' string ')' program: 'link_program(' [program_element ',']* program_element ')'
program_element: vertex_shader_value fragment_shader_value 'bind_uniform(' variable ',' string ')' 'bind_attrib(' int ',' string ')'
technique: 'technique' identifier '{' pass+ '}'
pass: 'pass' '{' render_state* '}'
render_state: state '=' state_value ';' state '=' '<' name '>' ';'