glm.natvis 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. GLM debugger visualizers for Visual Studio
  4. Makes debugging code using GLM easier by making data more easily accessible
  5. from the debugger watch windows.
  6. For example, a variable declared like this:
  7. glm::vec4 v = glm::vec4(1, 2, 3, 4);
  8. Will show up like this in the default debugger windows:
  9. Name Value
  10. ..............................................................
  11. v {x=1.000000 r=1.000000 s=1.000000 y=2.000000 ...}
  12. But if you use this file, it will show up like this:
  13. Name Value
  14. ..................
  15. v [1 2 3 4]
  16. === How to Use ===
  17. Copy this file to the project directory of each project using GLM, or just copy it to
  18. %USERPROFILE%\Douments\Visual Studio 2019\Visualizers\ (replace '2019' when necessary)
  19. or
  20. %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers\ (requires admin access)
  21. if you want to use this from every project.
  22. See also https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects
  23. -->
  24. <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  25. <Type Name="glm::vec&lt;1,*,*&gt;">
  26. <DisplayString>[{x,g}]</DisplayString>
  27. <Expand HideRawView="1">
  28. <Item Name="x">x,g</Item>
  29. </Expand>
  30. </Type>
  31. <Type Name="glm::vec&lt;2,*,*&gt;">
  32. <DisplayString>[{x,g} {y,g}]</DisplayString>
  33. <Expand HideRawView="1">
  34. <Item Name="x">x,g</Item>
  35. <Item Name="y">y,g</Item>
  36. </Expand>
  37. </Type>
  38. <Type Name="glm::vec&lt;3,*,*&gt;">
  39. <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>
  40. <Expand HideRawView="1">
  41. <Item Name="x">x,g</Item>
  42. <Item Name="y">y,g</Item>
  43. <Item Name="z">z,g</Item>
  44. </Expand>
  45. </Type>
  46. <Type Name="glm::vec&lt;4,*,*&gt;">
  47. <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>
  48. <Expand HideRawView="1">
  49. <Item Name="x">x,g</Item>
  50. <Item Name="y">y,g</Item>
  51. <Item Name="z">z,g</Item>
  52. <Item Name="w">w,g</Item>
  53. </Expand>
  54. </Type>
  55. <Type Name="glm::vec&lt;1,bool,*&gt;" Priority="High">
  56. <DisplayString>[{(int)x}]</DisplayString>
  57. <Expand HideRawView="1">
  58. <Item Name="x">x</Item>
  59. </Expand>
  60. </Type>
  61. <Type Name="glm::vec&lt;2,bool,*&gt;" Priority="High">
  62. <DisplayString>[{(int)x} {(int)y}]</DisplayString>
  63. <Expand HideRawView="1">
  64. <Item Name="x">x</Item>
  65. <Item Name="y">y</Item>
  66. </Expand>
  67. </Type>
  68. <Type Name="glm::vec&lt;3,bool,*&gt;" Priority="High">
  69. <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g}]</DisplayString>
  70. <Expand HideRawView="1">
  71. <Item Name="x">x</Item>
  72. <Item Name="y">y</Item>
  73. <Item Name="z">z</Item>
  74. </Expand>
  75. </Type>
  76. <Type Name="glm::vec&lt;4,bool,*&gt;" Priority="High">
  77. <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g} {(int)w,g}]</DisplayString>
  78. <Expand HideRawView="1">
  79. <Item Name="x">x</Item>
  80. <Item Name="y">y</Item>
  81. <Item Name="z">z</Item>
  82. <Item Name="w">w</Item>
  83. </Expand>
  84. </Type>
  85. <Type Name="glm::vec&lt;2,float,*&gt;" Priority="High">
  86. <DisplayString>[{x,g} {y,g}]</DisplayString>
  87. <Expand HideRawView="1">
  88. <CustomListItems MaxItemsPerView="1">
  89. <!-- calculate length using fast inverse sqrt -->
  90. <Variable Name="k" InitialValue="x*x+y*y"/>
  91. <Variable Name="n" InitialValue="k/2"/>
  92. <Variable Name="i" InitialValue="0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)"/>
  93. <If Condition="k != 0">
  94. <Exec>k = *(float *)&amp;i</Exec>
  95. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  96. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  97. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  98. <Item Name="[len]">1/k,g</Item>
  99. </If>
  100. <If Condition="k == 0">
  101. <Item Name="[len]">0.0f,g</Item>
  102. </If>
  103. </CustomListItems>
  104. <Item Name="x">x,g</Item>
  105. <Item Name="y">y,g</Item>
  106. </Expand>
  107. </Type>
  108. <Type Name="glm::vec&lt;3,float,*&gt;" Priority="High">
  109. <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>
  110. <Expand HideRawView="1">
  111. <CustomListItems MaxItemsPerView="1">
  112. <!-- calculate length using fast inverse sqrt -->
  113. <Variable Name="k" InitialValue="x*x+y*y+z*z"/>
  114. <Variable Name="n" InitialValue="k/2"/>
  115. <Variable Name="i" InitialValue="0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)"/>
  116. <If Condition="k != 0">
  117. <Exec>k = *(float *)&amp;i</Exec>
  118. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  119. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  120. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  121. <Item Name="[len]">1/k,g</Item>
  122. </If>
  123. <If Condition="k == 0">
  124. <Item Name="[len]">0.0f,g</Item>
  125. </If>
  126. </CustomListItems>
  127. <Synthetic Name="[rgba]">
  128. <DisplayString>
  129. <!-- hex RGBA color - alpha is assumed to be 255 -->
  130. #{
  131. (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |
  132. (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |
  133. (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) | 0xFF,Xb
  134. }
  135. </DisplayString>
  136. </Synthetic>
  137. <Item Name="x">x,g</Item>
  138. <Item Name="y">y,g</Item>
  139. <Item Name="z">z,g</Item>
  140. </Expand>
  141. </Type>
  142. <Type Name="glm::vec&lt;4,float,*&gt;" Priority="High">
  143. <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>
  144. <Expand HideRawView="1">
  145. <CustomListItems MaxItemsPerView="1">
  146. <!-- calculate length using fast inverse sqrt -->
  147. <Variable Name="k" InitialValue="x*x+y*y+z*z+w*w"/>
  148. <Variable Name="n" InitialValue="k/2"/>
  149. <Variable Name="i" InitialValue="0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)"/>
  150. <If Condition="k != 0">
  151. <Exec>k = *(float *)&amp;i</Exec>
  152. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  153. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  154. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  155. <Item Name="[len]">1/k,g</Item>
  156. </If>
  157. <If Condition="k == 0">
  158. <Item Name="[len]">0.0f,g</Item>
  159. </If>
  160. </CustomListItems>
  161. <Synthetic Name="[rgba]">
  162. <DisplayString>
  163. <!-- hex RGBA color -->
  164. #{
  165. (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |
  166. (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |
  167. (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) |
  168. (unsigned((w&lt;0?0:(w&gt;1?1:w))*255.5f) &lt;&lt; 0),Xb
  169. }
  170. </DisplayString>
  171. </Synthetic>
  172. <Item Name="x">x,g</Item>
  173. <Item Name="y">y,g</Item>
  174. <Item Name="z">z,g</Item>
  175. <Item Name="w">w,g</Item>
  176. </Expand>
  177. </Type>
  178. <Type Name="glm::vec&lt;2,double,*&gt;" Priority="High">
  179. <DisplayString>[{x,g} {y,g}]</DisplayString>
  180. <Expand HideRawView="1">
  181. <CustomListItems MaxItemsPerView="1">
  182. <!-- calculate length using fast inverse sqrt -->
  183. <Variable Name="k" InitialValue="x*x+y*y"/>
  184. <Variable Name="n" InitialValue="k/2"/>
  185. <Variable Name="i" InitialValue="0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)"/>
  186. <If Condition="k != 0">
  187. <Exec>k = *(double *)&amp;i</Exec>
  188. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  189. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  190. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  191. <Item Name="[len]">1/k,g</Item>
  192. </If>
  193. <If Condition="k == 0">
  194. <Item Name="[len]">0.0,g</Item>
  195. </If>
  196. </CustomListItems>
  197. <Item Name="x">x,g</Item>
  198. <Item Name="y">y,g</Item>
  199. </Expand>
  200. </Type>
  201. <Type Name="glm::vec&lt;3,double,*&gt;" Priority="High">
  202. <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>
  203. <Expand HideRawView="1">
  204. <CustomListItems MaxItemsPerView="1">
  205. <!-- calculate length using fast inverse sqrt -->
  206. <Variable Name="k" InitialValue="x*x+y*y+z*z"/>
  207. <Variable Name="n" InitialValue="k/2"/>
  208. <Variable Name="i" InitialValue="0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)"/>
  209. <If Condition="k != 0">
  210. <Exec>k = *(double *)&amp;i</Exec>
  211. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  212. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  213. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  214. <Item Name="[len]">1/k,g</Item>
  215. </If>
  216. <If Condition="k == 0">
  217. <Item Name="[len]">0.0,g</Item>
  218. </If>
  219. </CustomListItems>
  220. <Item Name="x">x,g</Item>
  221. <Item Name="y">y,g</Item>
  222. <Item Name="z">z,g</Item>
  223. </Expand>
  224. </Type>
  225. <Type Name="glm::vec&lt;4,double,*&gt;" Priority="High">
  226. <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>
  227. <Expand HideRawView="1">
  228. <CustomListItems MaxItemsPerView="1">
  229. <!-- calculate length using fast inverse sqrt -->
  230. <Variable Name="k" InitialValue="x*x+y*y+z*z+w*w"/>
  231. <Variable Name="n" InitialValue="k/2"/>
  232. <Variable Name="i" InitialValue="0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)"/>
  233. <If Condition="k != 0">
  234. <Exec>k = *(double *)&amp;i</Exec>
  235. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  236. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  237. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  238. <Item Name="[len]">1/k,g</Item>
  239. </If>
  240. <If Condition="k == 0">
  241. <Item Name="[len]">0.0,g</Item>
  242. </If>
  243. </CustomListItems>
  244. <Item Name="x">x,g</Item>
  245. <Item Name="y">y,g</Item>
  246. <Item Name="z">z,g</Item>
  247. <Item Name="w">w,g</Item>
  248. </Expand>
  249. </Type>
  250. <Type Name="glm::qua&lt;*,*&gt;">
  251. <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>
  252. <Expand HideRawView="1">
  253. <Item Name="x">x,g</Item>
  254. <Item Name="y">y,g</Item>
  255. <Item Name="z">z,g</Item>
  256. <Item Name="w">w,g</Item>
  257. </Expand>
  258. </Type>
  259. <Type Name="glm::qua&lt;float,*&gt;" Priority="High">
  260. <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>
  261. <Expand HideRawView="1">
  262. <CustomListItems MaxItemsPerView="1">
  263. <!-- calculate length using fast inverse sqrt -->
  264. <Variable Name="k" InitialValue="x*x+y*y+z*z+w*w"/>
  265. <Variable Name="n" InitialValue="k/2"/>
  266. <Variable Name="i" InitialValue="0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)"/>
  267. <If Condition="k != 0">
  268. <Exec>k = *(float *)&amp;i</Exec>
  269. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  270. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  271. <Exec>k = k * (1.5f - (n * k * k))</Exec>
  272. <Item Name="[len]">1/k,g</Item>
  273. </If>
  274. <If Condition="k == 0">
  275. <Item Name="[len]">0.0f,g</Item>
  276. </If>
  277. </CustomListItems>
  278. <Item Name="x">x,g</Item>
  279. <Item Name="y">y,g</Item>
  280. <Item Name="z">z,g</Item>
  281. <Item Name="w">w,g</Item>
  282. </Expand>
  283. </Type>
  284. <Type Name="glm::qua&lt;double,*&gt;" Priority="High">
  285. <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>
  286. <Expand HideRawView="1">
  287. <CustomListItems MaxItemsPerView="1">
  288. <!-- calculate length using fast inverse sqrt -->
  289. <Variable Name="k" InitialValue="x*x+y*y+z*z+w*w"/>
  290. <Variable Name="n" InitialValue="k/2"/>
  291. <Variable Name="i" InitialValue="0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)"/>
  292. <If Condition="k != 0">
  293. <Exec>k = *(double *)&amp;i</Exec>
  294. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  295. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  296. <Exec>k = k * (1.5 - (n * k * k))</Exec>
  297. <Item Name="[len]">1/k,g</Item>
  298. </If>
  299. <If Condition="k == 0">
  300. <Item Name="[len]">0.0,g</Item>
  301. </If>
  302. </CustomListItems>
  303. <Item Name="x">x,g</Item>
  304. <Item Name="y">y,g</Item>
  305. <Item Name="z">z,g</Item>
  306. <Item Name="w">w,g</Item>
  307. </Expand>
  308. </Type>
  309. <Type Name="glm::mat&lt;2,2,*,*&gt;">
  310. <DisplayString>[{value[0]} {value[1]}]</DisplayString>
  311. <Expand HideRawView="1">
  312. <!-- display matrix in row major order - it makes more sense -->
  313. <Synthetic Name="row 1">
  314. <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>
  315. </Synthetic>
  316. <Synthetic Name="row 2">
  317. <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>
  318. </Synthetic>
  319. <Synthetic Name="columns">
  320. <Expand>
  321. <Item Name="col 1">value[0]</Item>
  322. <Item Name="col 2">value[1]</Item>
  323. </Expand>
  324. </Synthetic>
  325. </Expand>
  326. </Type>
  327. <Type Name="glm::mat&lt;2,3,*,*&gt;">
  328. <DisplayString>[{value[0]} {value[1]}]</DisplayString>
  329. <Expand HideRawView="1">
  330. <!-- display matrix in row major order - it makes more sense -->
  331. <Synthetic Name="row 1">
  332. <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>
  333. </Synthetic>
  334. <Synthetic Name="row 2">
  335. <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>
  336. </Synthetic>
  337. <Synthetic Name="row 3">
  338. <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>
  339. </Synthetic>
  340. <Synthetic Name="columns">
  341. <Expand>
  342. <Item Name="col 1">value[0]</Item>
  343. <Item Name="col 2">value[1]</Item>
  344. </Expand>
  345. </Synthetic>
  346. </Expand>
  347. </Type>
  348. <Type Name="glm::mat&lt;2,4,*,*&gt;">
  349. <DisplayString>[{value[0]} {value[1]}]</DisplayString>
  350. <Expand HideRawView="1">
  351. <!-- display matrix in row major order - it makes more sense -->
  352. <Synthetic Name="row 1">
  353. <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>
  354. </Synthetic>
  355. <Synthetic Name="row 2">
  356. <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>
  357. </Synthetic>
  358. <Synthetic Name="row 3">
  359. <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>
  360. </Synthetic>
  361. <Synthetic Name="row 4">
  362. <DisplayString>[{value[0].w,g} {value[1].w,g}]</DisplayString>
  363. </Synthetic>
  364. <Synthetic Name="columns">
  365. <Expand>
  366. <Item Name="col 1">value[0]</Item>
  367. <Item Name="col 2">value[1]</Item>
  368. </Expand>
  369. </Synthetic>
  370. </Expand>
  371. </Type>
  372. <Type Name="glm::mat&lt;3,2,*,*&gt;">
  373. <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>
  374. <Expand HideRawView="1">
  375. <!-- display matrix in row major order - it makes more sense -->
  376. <Synthetic Name="row 1">
  377. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>
  378. </Synthetic>
  379. <Synthetic Name="row 2">
  380. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>
  381. </Synthetic>
  382. <Synthetic Name="columns">
  383. <Expand>
  384. <Item Name="col 1">value[0]</Item>
  385. <Item Name="col 2">value[1]</Item>
  386. <Item Name="col 3">value[2]</Item>
  387. </Expand>
  388. </Synthetic>
  389. </Expand>
  390. </Type>
  391. <Type Name="glm::mat&lt;3,3,*,*&gt;">
  392. <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>
  393. <Expand HideRawView="1">
  394. <!-- display matrix in row major order - it makes more sense -->
  395. <Synthetic Name="row 1">
  396. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>
  397. </Synthetic>
  398. <Synthetic Name="row 2">
  399. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>
  400. </Synthetic>
  401. <Synthetic Name="row 3">
  402. <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>
  403. </Synthetic>
  404. <Synthetic Name="columns">
  405. <Expand>
  406. <Item Name="col 1">value[0]</Item>
  407. <Item Name="col 2">value[1]</Item>
  408. <Item Name="col 3">value[2]</Item>
  409. </Expand>
  410. </Synthetic>
  411. </Expand>
  412. </Type>
  413. <Type Name="glm::mat&lt;3,4,*,*&gt;">
  414. <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>
  415. <Expand HideRawView="1">
  416. <!-- display matrix in row major order - it makes more sense -->
  417. <Synthetic Name="row 1">
  418. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>
  419. </Synthetic>
  420. <Synthetic Name="row 2">
  421. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>
  422. </Synthetic>
  423. <Synthetic Name="row 3">
  424. <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>
  425. </Synthetic>
  426. <Synthetic Name="row 4">
  427. <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g}]</DisplayString>
  428. </Synthetic>
  429. <Synthetic Name="columns">
  430. <Expand>
  431. <Item Name="col 1">value[0]</Item>
  432. <Item Name="col 2">value[1]</Item>
  433. <Item Name="col 3">value[2]</Item>
  434. </Expand>
  435. </Synthetic>
  436. </Expand>
  437. </Type>
  438. <Type Name="glm::mat4x2&lt;4,2,*,*&gt;">
  439. <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>
  440. <Expand HideRawView="1">
  441. <!-- display matrix in row major order - it makes more sense -->
  442. <Synthetic Name="row 1">
  443. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>
  444. </Synthetic>
  445. <Synthetic Name="row 2">
  446. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>
  447. </Synthetic>
  448. <Synthetic Name="columns">
  449. <Expand>
  450. <Item Name="col 1">value[0]</Item>
  451. <Item Name="col 2">value[1]</Item>
  452. <Item Name="col 3">value[2]</Item>
  453. <Item Name="col 4">value[3]</Item>
  454. </Expand>
  455. </Synthetic>
  456. </Expand>
  457. </Type>
  458. <Type Name="glm::mat4x3&lt;4,3,*,*&gt;">
  459. <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>
  460. <Expand HideRawView="1">
  461. <!-- display matrix in row major order - it makes more sense -->
  462. <Synthetic Name="row 1">
  463. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>
  464. </Synthetic>
  465. <Synthetic Name="row 2">
  466. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>
  467. </Synthetic>
  468. <Synthetic Name="row 3">
  469. <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>
  470. </Synthetic>
  471. <Synthetic Name="columns">
  472. <Expand>
  473. <Item Name="col 1">value[0]</Item>
  474. <Item Name="col 2">value[1]</Item>
  475. <Item Name="col 3">value[2]</Item>
  476. <Item Name="col 4">value[3]</Item>
  477. </Expand>
  478. </Synthetic>
  479. </Expand>
  480. </Type>
  481. <Type Name="glm::mat&lt;4,4,*,*&gt;">
  482. <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>
  483. <Expand HideRawView="1">
  484. <!-- display matrix in row major order - it makes more sense -->
  485. <Synthetic Name="row 1">
  486. <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>
  487. </Synthetic>
  488. <Synthetic Name="row 2">
  489. <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>
  490. </Synthetic>
  491. <Synthetic Name="row 3">
  492. <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>
  493. </Synthetic>
  494. <Synthetic Name="row 4">
  495. <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g} {value[3].w,g}]</DisplayString>
  496. </Synthetic>
  497. <Synthetic Name="columns">
  498. <Expand>
  499. <Item Name="col 1">value[0]</Item>
  500. <Item Name="col 2">value[1]</Item>
  501. <Item Name="col 3">value[2]</Item>
  502. <Item Name="col 4">value[3]</Item>
  503. </Expand>
  504. </Synthetic>
  505. </Expand>
  506. </Type>
  507. <Type Name="glm::tdualquat&lt;*&gt;">
  508. <DisplayString>[r: {real}] [d: {dual}]</DisplayString>
  509. <Expand HideRawView="1">
  510. <Item Name="real">real</Item>
  511. <Item Name="dual">dual</Item>
  512. </Expand>
  513. </Type>
  514. </AutoVisualizer>