MCPcopy Create free account
hub / github.com/dfranx/ShaderDebugger / lib_common_mat_operator_multiply

Function lib_common_mat_operator_multiply

src/CommonLibrary.cpp:651–681  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

649 return 0;
650 }
651 bv_variable lib_common_mat_operator_multiply(bv_program* prog, bv_object* me, u8 count, bv_variable* args)
652 {
653 sd::Matrix* myData = (sd::Matrix*)me->user_data;
654 bv_variable ret = bv_variable_create_void();
655 if (count == 1)
656 {
657 if (args[0].type == bv_type_object)
658 {
659 bv_object* obj = bv_variable_get_object(args[0]);
660
661 // mat * mat
662 if (obj->type->props.name_count == 0) {
663 sd::Matrix* retMat = CopyMatrixData(myData);
664 retMat->Data = retMat->Data * ((sd::Matrix*)obj->user_data)->Data; // elements outside of the matrix should be 0.0f, so we don't care if we just multiply two 4x4 mats
665
666 ret = create_mat(prog, me->type->name, retMat);
667 }
668
669 // mat * vec
670 else
671 {
672 glm::vec4 retVec = multiply_mat_vec(*myData, obj);
673 ret = create_vec(prog, myData->Type, obj->type->props.name_count);
674 bv_object* retObj = bv_variable_get_object(ret);
675 for (u16 i = 0; i < retObj->type->props.name_count; i++)
676 retObj->prop[i] = bv_variable_cast(myData->Type, bv_variable_create_float(retVec[i]));
677 }
678 }
679 }
680 return ret;
681 }
682 bv_variable lib_common_mat_operator_add(bv_program* prog, bv_object* me, u8 count, bv_variable* args)
683 {
684 sd::Matrix* myData = (sd::Matrix*)me->user_data;

Callers

nothing calls this directly

Calls 4

CopyMatrixDataFunction · 0.85
create_matFunction · 0.85
multiply_mat_vecFunction · 0.85
create_vecFunction · 0.85

Tested by

no test coverage detected