| 436 | } |
| 437 | |
| 438 | size_t TriValueBinding::DetermineCopyFunc( const Be::VarEntry* srcEntry, const Be::VarEntry* dstEntry, size_t dataSize, bool sourceFloatArrayAsFloat, bool destFloatArrayAsFloat ) |
| 439 | { |
| 440 | if( sourceFloatArrayAsFloat && srcEntry->mType != Be::FLOATARRAY ) |
| 441 | { |
| 442 | CCP_LOGERR( "TriValueBinding \"%s\": float swizzle (.xyzw) on a non-array source value \"%s\"", m_name.c_str(), srcEntry->mName ); |
| 443 | return dataSize; |
| 444 | } |
| 445 | if( destFloatArrayAsFloat && dstEntry->mType != Be::FLOATARRAY ) |
| 446 | { |
| 447 | CCP_LOGERR( "TriValueBinding \"%s\": float swizzle (.xyzw) on a non-array destination value \"%s\"", m_name.c_str(), dstEntry->mName ); |
| 448 | return dataSize; |
| 449 | } |
| 450 | |
| 451 | if( srcEntry->mType == dstEntry->mType ) |
| 452 | { |
| 453 | switch( srcEntry->mType ) |
| 454 | { |
| 455 | case Be::BYTE: |
| 456 | m_copyFunc = TransformAndCopy<uint8_t>; |
| 457 | dataSize = 1; |
| 458 | break; |
| 459 | |
| 460 | case Be::BOOL: |
| 461 | m_copyFunc = TransformAndCopy<bool>; |
| 462 | dataSize = 1; |
| 463 | break; |
| 464 | |
| 465 | case Be::SHORT: |
| 466 | m_copyFunc = TransformAndCopy<int16_t>; |
| 467 | dataSize = 2; |
| 468 | break; |
| 469 | |
| 470 | case Be::LONG: |
| 471 | m_copyFunc = TransformAndCopy<int32_t>; |
| 472 | dataSize = 4; |
| 473 | break; |
| 474 | |
| 475 | case Be::FLOAT: |
| 476 | m_copyFunc = TransformAndCopy<float>; |
| 477 | dataSize = 4; |
| 478 | break; |
| 479 | |
| 480 | case Be::DOUBLE: |
| 481 | m_copyFunc = TransformAndCopy<double, double, double>; |
| 482 | dataSize = 8; |
| 483 | break; |
| 484 | |
| 485 | case Be::INT64: |
| 486 | m_copyFunc = Copy<int64_t>; |
| 487 | dataSize = 8; |
| 488 | break; |
| 489 | |
| 490 | case Be::FLOATARRAY: |
| 491 | if( sourceFloatArrayAsFloat ) |
| 492 | { |
| 493 | if( destFloatArrayAsFloat ) |
| 494 | { |
| 495 | m_copyFunc = TransformAndCopy<float>; |
nothing calls this directly
no test coverage detected