@@ -2155,7 +2155,7 @@ bind_parameter(CPT_InternalName name, const ::ShaderType *type, int location) {
21552155 continue ;
21562156 }
21572157 } else if (member.name == " metallic" ) {
2158- if (member.type == ::ShaderType::bool_type &&
2158+ if (member.type == ::ShaderType::bool_type ||
21592159 member.type == ::ShaderType::float_type) {
21602160 bind._part [0 ] = SMO_attr_material2;
21612161 bind._piece = SMP_row3x1;
@@ -2318,6 +2318,57 @@ bind_parameter(CPT_InternalName name, const ::ShaderType *type, int location) {
23182318
23192319 return report_parameter_error (name, type, " unrecognized parameter name" );
23202320 }
2321+ else if (pieces[0 ] == " osg" && _language == SL_GLSL) {
2322+ if (!expect_num_words (name, type, 2 )) {
2323+ return false ;
2324+ }
2325+
2326+ // These inputs are supported by OpenSceneGraph. We can support them as
2327+ // well, to increase compatibility.
2328+ ShaderMatSpec bind;
2329+ bind._id = arg_id;
2330+ bind._arg [0 ] = nullptr ;
2331+ bind._arg [1 ] = nullptr ;
2332+
2333+ if (pieces[1 ] == " ViewMatrix" ) {
2334+ bind._piece = SMP_whole;
2335+ bind._func = SMF_compose;
2336+ bind._part [0 ] = SMO_world_to_view;
2337+ bind._part [1 ] = SMO_view_to_apiview;
2338+ }
2339+ else if (pieces[1 ] == " InverseViewMatrix" || pieces[1 ] == " ViewMatrixInverse" ) {
2340+ bind._piece = SMP_whole;
2341+ bind._func = SMF_compose;
2342+ bind._part [0 ] = SMO_apiview_to_view;
2343+ bind._part [1 ] = SMO_view_to_world;
2344+ }
2345+ else if (pieces[1 ] == " FrameTime" ) {
2346+ bind._piece = SMP_row3x1;
2347+ bind._func = SMF_first;
2348+ bind._part [0 ] = SMO_frame_time;
2349+ bind._part [1 ] = SMO_identity;
2350+ }
2351+ else if (pieces[1 ] == " DeltaFrameTime" ) {
2352+ bind._piece = SMP_row3x1;
2353+ bind._func = SMF_first;
2354+ bind._part [0 ] = SMO_frame_delta;
2355+ bind._part [1 ] = SMO_identity;
2356+ }
2357+ else if (pieces[1 ] == " FrameNumber" ) {
2358+ if (type == ::ShaderType::int_type) {
2359+ _frame_number_loc = location;
2360+ return true ;
2361+ } else {
2362+ return report_parameter_error (name, type, " expected int" );
2363+ }
2364+ }
2365+ else {
2366+ return report_parameter_error (name, type, " unrecognized parameter name" );
2367+ }
2368+
2369+ cp_add_mat_spec (bind);
2370+ return true ;
2371+ }
23212372
23222373 // Check for mstrans, wstrans, vstrans, cstrans, mspos, wspos, vspos, cspos
23232374 if (pieces[0 ].size () >= 5 &&
0 commit comments