matrices.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //I decided to keep the non square matrices definition in the example, since I am still not sure how non square matrices should be treated in bgfx (Daniel Gavin)
  2. #ifndef MATRICES_H_HEADER_GUARD
  3. #define MATRICES_H_HEADER_GUARD
  4. #ifndef __cplusplus
  5. #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_SPIRV || BGFX_SHADER_LANGUAGE_METAL
  6. # define mat3x4 float4x3
  7. # define mat4x3 float3x4
  8. #else
  9. #endif // BGFX_SHADER_LANGUAGE_*
  10. mat4x3 mtxFromRows(vec4 _0, vec4 _1, vec4 _2)
  11. {
  12. #if BGFX_SHADER_LANGUAGE_GLSL
  13. return transpose(mat3x4(_0, _1, _2) );
  14. #else
  15. return mat4x3(_0, _1, _2);
  16. #endif // BGFX_SHADER_LANGUAGE_GLSL
  17. }
  18. vec4 mtxGetRow(mat4x3 _0, uint row)
  19. {
  20. #if BGFX_SHADER_LANGUAGE_GLSL
  21. return vec4(_0[0][row], _0[1][row], _0[2][row], _0[3][row]);
  22. #else
  23. return vec4(_0[row]);
  24. #endif // BGFX_SHADER_LANGUAGE_GLSL
  25. }
  26. vec4 mtxGetRow(mat4 _0, uint row)
  27. {
  28. #if BGFX_SHADER_LANGUAGE_GLSL
  29. return vec4(_0[0][row], _0[1][row], _0[2][row], _0[3][row]);
  30. #else
  31. return vec4(_0[row]);
  32. #endif // BGFX_SHADER_LANGUAGE_GLSL
  33. }
  34. vec4 mtxGetColumn(mat4 _0, uint column)
  35. {
  36. #if BGFX_SHADER_LANGUAGE_GLSL
  37. return vec4(_0[column]);
  38. #else
  39. return vec4(_0[0][column], _0[1][column], _0[2][column], _0[3][column]);
  40. #endif // BGFX_SHADER_LANGUAGE_GLSL
  41. }
  42. float mtxGetElement(mat4 _0, uint column, uint row)
  43. {
  44. #if BGFX_SHADER_LANGUAGE_GLSL
  45. return _0[column][row];
  46. #else
  47. return _0[row][column];
  48. #endif // BGFX_SHADER_LANGUAGE_GLSL
  49. }
  50. #endif // __cplusplus
  51. #endif // MATRICES_H_HEADER_GUARD