| 318 | |
| 319 | template <typename Scalar> |
| 320 | static inline OSVR_ReturnCode |
| 321 | getProjectionMatrixImpl(OSVR_DisplayConfig disp, OSVR_ViewerCount viewer, |
| 322 | OSVR_EyeCount eye, OSVR_SurfaceCount surface, |
| 323 | Scalar near, Scalar far, OSVR_MatrixConventions flags, |
| 324 | Scalar *mat) { |
| 325 | OSVR_VALIDATE_DISPLAY_CONFIG; |
| 326 | OSVR_VALIDATE_VIEWER_ID; |
| 327 | OSVR_VALIDATE_EYE_ID; |
| 328 | OSVR_VALIDATE_SURFACE_ID; |
| 329 | OSVR_VALIDATE_OUTPUT_PTR(mat, "projection matrix"); |
| 330 | if (near == 0 || far == 0) { |
| 331 | OSVR_DEV_VERBOSE("Can't specify a near or far distance as 0!"); |
| 332 | return OSVR_RETURN_FAILURE; |
| 333 | } |
| 334 | if (near < 0 || far < 0) { |
| 335 | OSVR_DEV_VERBOSE("Can't specify a negative near or far distance!"); |
| 336 | return OSVR_RETURN_FAILURE; |
| 337 | } |
| 338 | if (near == far) { |
| 339 | OSVR_DEV_VERBOSE("Can't specify equal near and far distances!"); |
| 340 | return OSVR_RETURN_FAILURE; |
| 341 | } |
| 342 | osvr::util::matrixEigenAssign( |
| 343 | disp->cfg->getViewerEyeSurface(viewer, eye, surface) |
| 344 | .getProjection(near, far, flags), |
| 345 | flags, mat); |
| 346 | |
| 347 | return OSVR_RETURN_SUCCESS; |
| 348 | } |
| 349 | |
| 350 | OSVR_ReturnCode osvrClientGetViewerEyeSurfaceProjectionMatrixd( |
| 351 | OSVR_DisplayConfig disp, OSVR_ViewerCount viewer, OSVR_EyeCount eye, |
no test coverage detected