| 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; |
nothing calls this directly
no test coverage detected