vispy 0.14.0__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of vispy might be problematic. Click here for more details.

Files changed (519) hide show
  1. vispy/__init__.py +33 -0
  2. vispy/app/__init__.py +15 -0
  3. vispy/app/_default_app.py +76 -0
  4. vispy/app/_detect_eventloop.py +148 -0
  5. vispy/app/application.py +263 -0
  6. vispy/app/backends/__init__.py +52 -0
  7. vispy/app/backends/_egl.py +264 -0
  8. vispy/app/backends/_glfw.py +513 -0
  9. vispy/app/backends/_jupyter_rfb.py +278 -0
  10. vispy/app/backends/_offscreen_util.py +121 -0
  11. vispy/app/backends/_osmesa.py +235 -0
  12. vispy/app/backends/_pyglet.py +451 -0
  13. vispy/app/backends/_pyqt4.py +36 -0
  14. vispy/app/backends/_pyqt5.py +36 -0
  15. vispy/app/backends/_pyqt6.py +40 -0
  16. vispy/app/backends/_pyside.py +37 -0
  17. vispy/app/backends/_pyside2.py +52 -0
  18. vispy/app/backends/_pyside6.py +53 -0
  19. vispy/app/backends/_qt.py +968 -0
  20. vispy/app/backends/_sdl2.py +444 -0
  21. vispy/app/backends/_template.py +244 -0
  22. vispy/app/backends/_test.py +8 -0
  23. vispy/app/backends/_tk.py +800 -0
  24. vispy/app/backends/_wx.py +476 -0
  25. vispy/app/backends/tests/__init__.py +0 -0
  26. vispy/app/backends/tests/test_offscreen_util.py +52 -0
  27. vispy/app/backends/tests/test_rfb.py +77 -0
  28. vispy/app/base.py +294 -0
  29. vispy/app/canvas.py +828 -0
  30. vispy/app/qt.py +92 -0
  31. vispy/app/tests/__init__.py +0 -0
  32. vispy/app/tests/qt-designer.ui +58 -0
  33. vispy/app/tests/test_app.py +442 -0
  34. vispy/app/tests/test_backends.py +164 -0
  35. vispy/app/tests/test_canvas.py +122 -0
  36. vispy/app/tests/test_context.py +92 -0
  37. vispy/app/tests/test_qt.py +47 -0
  38. vispy/app/tests/test_simultaneous.py +134 -0
  39. vispy/app/timer.py +174 -0
  40. vispy/color/__init__.py +17 -0
  41. vispy/color/_color_dict.py +193 -0
  42. vispy/color/color_array.py +447 -0
  43. vispy/color/color_space.py +181 -0
  44. vispy/color/colormap.py +1134 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +352 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1542 -0
  50. vispy/ext/cubehelix.py +138 -0
  51. vispy/ext/egl.py +375 -0
  52. vispy/ext/fontconfig.py +118 -0
  53. vispy/ext/gdi32plus.py +206 -0
  54. vispy/ext/osmesa.py +105 -0
  55. vispy/geometry/__init__.py +23 -0
  56. vispy/geometry/_triangulation_debugger.py +171 -0
  57. vispy/geometry/calculations.py +134 -0
  58. vispy/geometry/curves.py +399 -0
  59. vispy/geometry/generation.py +643 -0
  60. vispy/geometry/isocurve.py +175 -0
  61. vispy/geometry/isosurface.py +465 -0
  62. vispy/geometry/meshdata.py +698 -0
  63. vispy/geometry/normals.py +78 -0
  64. vispy/geometry/parametric.py +56 -0
  65. vispy/geometry/polygon.py +137 -0
  66. vispy/geometry/rect.py +210 -0
  67. vispy/geometry/tests/__init__.py +0 -0
  68. vispy/geometry/tests/test_calculations.py +23 -0
  69. vispy/geometry/tests/test_generation.py +56 -0
  70. vispy/geometry/tests/test_meshdata.py +106 -0
  71. vispy/geometry/tests/test_triangulation.py +506 -0
  72. vispy/geometry/torusknot.py +142 -0
  73. vispy/geometry/triangulation.py +876 -0
  74. vispy/gloo/__init__.py +56 -0
  75. vispy/gloo/buffer.py +505 -0
  76. vispy/gloo/context.py +272 -0
  77. vispy/gloo/framebuffer.py +257 -0
  78. vispy/gloo/gl/__init__.py +234 -0
  79. vispy/gloo/gl/_constants.py +332 -0
  80. vispy/gloo/gl/_es2.py +986 -0
  81. vispy/gloo/gl/_gl2.py +1365 -0
  82. vispy/gloo/gl/_proxy.py +499 -0
  83. vispy/gloo/gl/_pyopengl2.py +362 -0
  84. vispy/gloo/gl/dummy.py +24 -0
  85. vispy/gloo/gl/es2.py +62 -0
  86. vispy/gloo/gl/gl2.py +98 -0
  87. vispy/gloo/gl/glplus.py +168 -0
  88. vispy/gloo/gl/pyopengl2.py +97 -0
  89. vispy/gloo/gl/tests/__init__.py +0 -0
  90. vispy/gloo/gl/tests/test_basics.py +282 -0
  91. vispy/gloo/gl/tests/test_functionality.py +566 -0
  92. vispy/gloo/gl/tests/test_names.py +246 -0
  93. vispy/gloo/gl/tests/test_use.py +71 -0
  94. vispy/gloo/glir.py +1816 -0
  95. vispy/gloo/globject.py +101 -0
  96. vispy/gloo/preprocessor.py +67 -0
  97. vispy/gloo/program.py +543 -0
  98. vispy/gloo/tests/__init__.py +0 -0
  99. vispy/gloo/tests/test_buffer.py +558 -0
  100. vispy/gloo/tests/test_context.py +119 -0
  101. vispy/gloo/tests/test_framebuffer.py +195 -0
  102. vispy/gloo/tests/test_glir.py +307 -0
  103. vispy/gloo/tests/test_globject.py +35 -0
  104. vispy/gloo/tests/test_program.py +302 -0
  105. vispy/gloo/tests/test_texture.py +732 -0
  106. vispy/gloo/tests/test_use_gloo.py +187 -0
  107. vispy/gloo/tests/test_util.py +60 -0
  108. vispy/gloo/tests/test_wrappers.py +261 -0
  109. vispy/gloo/texture.py +1045 -0
  110. vispy/gloo/util.py +129 -0
  111. vispy/gloo/wrappers.py +762 -0
  112. vispy/glsl/__init__.py +42 -0
  113. vispy/glsl/antialias/antialias.glsl +7 -0
  114. vispy/glsl/antialias/cap-butt.glsl +31 -0
  115. vispy/glsl/antialias/cap-round.glsl +29 -0
  116. vispy/glsl/antialias/cap-square.glsl +30 -0
  117. vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
  118. vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
  119. vispy/glsl/antialias/cap.glsl +67 -0
  120. vispy/glsl/antialias/caps.glsl +67 -0
  121. vispy/glsl/antialias/filled.glsl +50 -0
  122. vispy/glsl/antialias/outline.glsl +40 -0
  123. vispy/glsl/antialias/stroke.glsl +43 -0
  124. vispy/glsl/arrowheads/angle.glsl +99 -0
  125. vispy/glsl/arrowheads/arrowheads.frag +60 -0
  126. vispy/glsl/arrowheads/arrowheads.glsl +12 -0
  127. vispy/glsl/arrowheads/arrowheads.vert +83 -0
  128. vispy/glsl/arrowheads/curved.glsl +48 -0
  129. vispy/glsl/arrowheads/inhibitor.glsl +26 -0
  130. vispy/glsl/arrowheads/stealth.glsl +46 -0
  131. vispy/glsl/arrowheads/triangle.glsl +97 -0
  132. vispy/glsl/arrowheads/util.glsl +13 -0
  133. vispy/glsl/arrows/angle-30.glsl +12 -0
  134. vispy/glsl/arrows/angle-60.glsl +12 -0
  135. vispy/glsl/arrows/angle-90.glsl +12 -0
  136. vispy/glsl/arrows/arrow.frag +39 -0
  137. vispy/glsl/arrows/arrow.vert +49 -0
  138. vispy/glsl/arrows/arrows.glsl +17 -0
  139. vispy/glsl/arrows/common.glsl +187 -0
  140. vispy/glsl/arrows/curved.glsl +63 -0
  141. vispy/glsl/arrows/stealth.glsl +50 -0
  142. vispy/glsl/arrows/triangle-30.glsl +12 -0
  143. vispy/glsl/arrows/triangle-60.glsl +12 -0
  144. vispy/glsl/arrows/triangle-90.glsl +12 -0
  145. vispy/glsl/arrows/util.glsl +98 -0
  146. vispy/glsl/build_spatial_filters.py +660 -0
  147. vispy/glsl/collections/agg-fast-path.frag +20 -0
  148. vispy/glsl/collections/agg-fast-path.vert +78 -0
  149. vispy/glsl/collections/agg-glyph.frag +60 -0
  150. vispy/glsl/collections/agg-glyph.vert +33 -0
  151. vispy/glsl/collections/agg-marker.frag +35 -0
  152. vispy/glsl/collections/agg-marker.vert +48 -0
  153. vispy/glsl/collections/agg-path.frag +55 -0
  154. vispy/glsl/collections/agg-path.vert +166 -0
  155. vispy/glsl/collections/agg-point.frag +21 -0
  156. vispy/glsl/collections/agg-point.vert +35 -0
  157. vispy/glsl/collections/agg-segment.frag +32 -0
  158. vispy/glsl/collections/agg-segment.vert +75 -0
  159. vispy/glsl/collections/marker.frag +38 -0
  160. vispy/glsl/collections/marker.vert +48 -0
  161. vispy/glsl/collections/raw-path.frag +15 -0
  162. vispy/glsl/collections/raw-path.vert +24 -0
  163. vispy/glsl/collections/raw-point.frag +14 -0
  164. vispy/glsl/collections/raw-point.vert +31 -0
  165. vispy/glsl/collections/raw-segment.frag +18 -0
  166. vispy/glsl/collections/raw-segment.vert +26 -0
  167. vispy/glsl/collections/raw-triangle.frag +13 -0
  168. vispy/glsl/collections/raw-triangle.vert +26 -0
  169. vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
  170. vispy/glsl/collections/sdf-glyph.frag +80 -0
  171. vispy/glsl/collections/sdf-glyph.vert +59 -0
  172. vispy/glsl/collections/tick-labels.vert +71 -0
  173. vispy/glsl/colormaps/autumn.glsl +20 -0
  174. vispy/glsl/colormaps/blues.glsl +20 -0
  175. vispy/glsl/colormaps/color-space.glsl +17 -0
  176. vispy/glsl/colormaps/colormaps.glsl +24 -0
  177. vispy/glsl/colormaps/cool.glsl +20 -0
  178. vispy/glsl/colormaps/fire.glsl +21 -0
  179. vispy/glsl/colormaps/gray.glsl +20 -0
  180. vispy/glsl/colormaps/greens.glsl +20 -0
  181. vispy/glsl/colormaps/hot.glsl +22 -0
  182. vispy/glsl/colormaps/ice.glsl +20 -0
  183. vispy/glsl/colormaps/icefire.glsl +23 -0
  184. vispy/glsl/colormaps/parse.py +40 -0
  185. vispy/glsl/colormaps/reds.glsl +20 -0
  186. vispy/glsl/colormaps/spring.glsl +20 -0
  187. vispy/glsl/colormaps/summer.glsl +20 -0
  188. vispy/glsl/colormaps/user.glsl +22 -0
  189. vispy/glsl/colormaps/util.glsl +41 -0
  190. vispy/glsl/colormaps/wheel.glsl +21 -0
  191. vispy/glsl/colormaps/winter.glsl +20 -0
  192. vispy/glsl/lines/agg.frag +320 -0
  193. vispy/glsl/lines/agg.vert +241 -0
  194. vispy/glsl/markers/arrow.glsl +12 -0
  195. vispy/glsl/markers/asterisk.glsl +16 -0
  196. vispy/glsl/markers/chevron.glsl +14 -0
  197. vispy/glsl/markers/clover.glsl +20 -0
  198. vispy/glsl/markers/club.glsl +31 -0
  199. vispy/glsl/markers/cross.glsl +17 -0
  200. vispy/glsl/markers/diamond.glsl +12 -0
  201. vispy/glsl/markers/disc.glsl +9 -0
  202. vispy/glsl/markers/ellipse.glsl +67 -0
  203. vispy/glsl/markers/hbar.glsl +9 -0
  204. vispy/glsl/markers/heart.glsl +15 -0
  205. vispy/glsl/markers/infinity.glsl +15 -0
  206. vispy/glsl/markers/marker-sdf.frag +74 -0
  207. vispy/glsl/markers/marker-sdf.vert +41 -0
  208. vispy/glsl/markers/marker.frag +36 -0
  209. vispy/glsl/markers/marker.vert +46 -0
  210. vispy/glsl/markers/markers.glsl +24 -0
  211. vispy/glsl/markers/pin.glsl +18 -0
  212. vispy/glsl/markers/ring.glsl +11 -0
  213. vispy/glsl/markers/spade.glsl +28 -0
  214. vispy/glsl/markers/square.glsl +10 -0
  215. vispy/glsl/markers/tag.glsl +11 -0
  216. vispy/glsl/markers/triangle.glsl +14 -0
  217. vispy/glsl/markers/vbar.glsl +9 -0
  218. vispy/glsl/math/circle-through-2-points.glsl +30 -0
  219. vispy/glsl/math/constants.glsl +48 -0
  220. vispy/glsl/math/double.glsl +114 -0
  221. vispy/glsl/math/functions.glsl +20 -0
  222. vispy/glsl/math/point-to-line-distance.glsl +31 -0
  223. vispy/glsl/math/point-to-line-projection.glsl +29 -0
  224. vispy/glsl/math/signed-line-distance.glsl +27 -0
  225. vispy/glsl/math/signed-segment-distance.glsl +30 -0
  226. vispy/glsl/misc/regular-grid.frag +244 -0
  227. vispy/glsl/misc/spatial-filters.frag +1407 -0
  228. vispy/glsl/misc/viewport-NDC.glsl +20 -0
  229. vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
  230. vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
  231. vispy/glsl/transforms/hammer.glsl +44 -0
  232. vispy/glsl/transforms/identity.glsl +6 -0
  233. vispy/glsl/transforms/identity_forward.glsl +23 -0
  234. vispy/glsl/transforms/identity_inverse.glsl +23 -0
  235. vispy/glsl/transforms/linear-scale.glsl +127 -0
  236. vispy/glsl/transforms/log-scale.glsl +126 -0
  237. vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
  238. vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
  239. vispy/glsl/transforms/panzoom.glsl +10 -0
  240. vispy/glsl/transforms/polar.glsl +41 -0
  241. vispy/glsl/transforms/position.glsl +44 -0
  242. vispy/glsl/transforms/power-scale.glsl +139 -0
  243. vispy/glsl/transforms/projection.glsl +7 -0
  244. vispy/glsl/transforms/pvm.glsl +13 -0
  245. vispy/glsl/transforms/rotate.glsl +45 -0
  246. vispy/glsl/transforms/trackball.glsl +15 -0
  247. vispy/glsl/transforms/translate.glsl +35 -0
  248. vispy/glsl/transforms/transverse_mercator.glsl +38 -0
  249. vispy/glsl/transforms/viewport-clipping.glsl +14 -0
  250. vispy/glsl/transforms/viewport-transform.glsl +16 -0
  251. vispy/glsl/transforms/viewport.glsl +50 -0
  252. vispy/glsl/transforms/x.glsl +24 -0
  253. vispy/glsl/transforms/y.glsl +19 -0
  254. vispy/glsl/transforms/z.glsl +14 -0
  255. vispy/io/__init__.py +20 -0
  256. vispy/io/_data/spatial-filters.npy +0 -0
  257. vispy/io/datasets.py +94 -0
  258. vispy/io/image.py +231 -0
  259. vispy/io/mesh.py +122 -0
  260. vispy/io/stl.py +167 -0
  261. vispy/io/tests/__init__.py +0 -0
  262. vispy/io/tests/test_image.py +47 -0
  263. vispy/io/tests/test_io.py +121 -0
  264. vispy/io/wavefront.py +350 -0
  265. vispy/plot/__init__.py +36 -0
  266. vispy/plot/fig.py +58 -0
  267. vispy/plot/plotwidget.py +522 -0
  268. vispy/plot/tests/__init__.py +0 -0
  269. vispy/plot/tests/test_plot.py +46 -0
  270. vispy/scene/__init__.py +43 -0
  271. vispy/scene/cameras/__init__.py +27 -0
  272. vispy/scene/cameras/_base.py +38 -0
  273. vispy/scene/cameras/arcball.py +106 -0
  274. vispy/scene/cameras/base_camera.py +538 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +308 -0
  278. vispy/scene/cameras/perspective.py +333 -0
  279. vispy/scene/cameras/tests/__init__.py +0 -0
  280. vispy/scene/cameras/tests/test_cameras.py +27 -0
  281. vispy/scene/cameras/tests/test_link.py +53 -0
  282. vispy/scene/cameras/tests/test_perspective.py +122 -0
  283. vispy/scene/cameras/turntable.py +173 -0
  284. vispy/scene/canvas.py +639 -0
  285. vispy/scene/events.py +85 -0
  286. vispy/scene/node.py +644 -0
  287. vispy/scene/subscene.py +20 -0
  288. vispy/scene/tests/__init__.py +0 -0
  289. vispy/scene/tests/test_canvas.py +119 -0
  290. vispy/scene/tests/test_node.py +142 -0
  291. vispy/scene/tests/test_visuals.py +141 -0
  292. vispy/scene/visuals.py +276 -0
  293. vispy/scene/widgets/__init__.py +18 -0
  294. vispy/scene/widgets/anchor.py +25 -0
  295. vispy/scene/widgets/axis.py +88 -0
  296. vispy/scene/widgets/colorbar.py +176 -0
  297. vispy/scene/widgets/console.py +351 -0
  298. vispy/scene/widgets/grid.py +509 -0
  299. vispy/scene/widgets/label.py +50 -0
  300. vispy/scene/widgets/tests/__init__.py +0 -0
  301. vispy/scene/widgets/tests/test_colorbar.py +47 -0
  302. vispy/scene/widgets/viewbox.py +199 -0
  303. vispy/scene/widgets/widget.py +478 -0
  304. vispy/testing/__init__.py +51 -0
  305. vispy/testing/_runners.py +446 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +473 -0
  308. vispy/testing/rendered_array_tester.py +85 -0
  309. vispy/testing/tests/__init__.py +0 -0
  310. vispy/testing/tests/test_testing.py +20 -0
  311. vispy/util/__init__.py +17 -0
  312. vispy/util/bunch.py +15 -0
  313. vispy/util/check_environment.py +57 -0
  314. vispy/util/config.py +490 -0
  315. vispy/util/dpi/__init__.py +19 -0
  316. vispy/util/dpi/_linux.py +69 -0
  317. vispy/util/dpi/_quartz.py +26 -0
  318. vispy/util/dpi/_win32.py +34 -0
  319. vispy/util/dpi/tests/__init__.py +0 -0
  320. vispy/util/dpi/tests/test_dpi.py +16 -0
  321. vispy/util/eq.py +41 -0
  322. vispy/util/event.py +774 -0
  323. vispy/util/fetching.py +276 -0
  324. vispy/util/filter.py +44 -0
  325. vispy/util/fonts/__init__.py +14 -0
  326. vispy/util/fonts/_freetype.py +73 -0
  327. vispy/util/fonts/_quartz.py +192 -0
  328. vispy/util/fonts/_triage.py +36 -0
  329. vispy/util/fonts/_vispy_fonts.py +20 -0
  330. vispy/util/fonts/_win32.py +105 -0
  331. vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
  332. vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
  333. vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
  334. vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
  335. vispy/util/fonts/tests/__init__.py +0 -0
  336. vispy/util/fonts/tests/test_font.py +45 -0
  337. vispy/util/fourier.py +69 -0
  338. vispy/util/frozen.py +25 -0
  339. vispy/util/gallery_scraper.py +268 -0
  340. vispy/util/keys.py +91 -0
  341. vispy/util/logs.py +358 -0
  342. vispy/util/osmesa_gl.py +17 -0
  343. vispy/util/profiler.py +135 -0
  344. vispy/util/ptime.py +16 -0
  345. vispy/util/quaternion.py +229 -0
  346. vispy/util/svg/__init__.py +18 -0
  347. vispy/util/svg/base.py +20 -0
  348. vispy/util/svg/color.py +219 -0
  349. vispy/util/svg/element.py +51 -0
  350. vispy/util/svg/geometry.py +478 -0
  351. vispy/util/svg/group.py +66 -0
  352. vispy/util/svg/length.py +81 -0
  353. vispy/util/svg/number.py +25 -0
  354. vispy/util/svg/path.py +332 -0
  355. vispy/util/svg/shapes.py +57 -0
  356. vispy/util/svg/style.py +59 -0
  357. vispy/util/svg/svg.py +40 -0
  358. vispy/util/svg/transform.py +223 -0
  359. vispy/util/svg/transformable.py +28 -0
  360. vispy/util/svg/viewport.py +73 -0
  361. vispy/util/tests/__init__.py +0 -0
  362. vispy/util/tests/test_config.py +58 -0
  363. vispy/util/tests/test_docstring_parameters.py +123 -0
  364. vispy/util/tests/test_emitter_group.py +262 -0
  365. vispy/util/tests/test_event_emitter.py +743 -0
  366. vispy/util/tests/test_fourier.py +35 -0
  367. vispy/util/tests/test_gallery_scraper.py +112 -0
  368. vispy/util/tests/test_import.py +127 -0
  369. vispy/util/tests/test_key.py +22 -0
  370. vispy/util/tests/test_logging.py +45 -0
  371. vispy/util/tests/test_run.py +14 -0
  372. vispy/util/tests/test_transforms.py +42 -0
  373. vispy/util/tests/test_vispy.py +48 -0
  374. vispy/util/transforms.py +201 -0
  375. vispy/util/wrappers.py +155 -0
  376. vispy/version.py +4 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +485 -0
  379. vispy/visuals/axis.py +678 -0
  380. vispy/visuals/border.py +208 -0
  381. vispy/visuals/box.py +79 -0
  382. vispy/visuals/collections/__init__.py +30 -0
  383. vispy/visuals/collections/agg_fast_path_collection.py +219 -0
  384. vispy/visuals/collections/agg_path_collection.py +197 -0
  385. vispy/visuals/collections/agg_point_collection.py +52 -0
  386. vispy/visuals/collections/agg_segment_collection.py +142 -0
  387. vispy/visuals/collections/array_list.py +401 -0
  388. vispy/visuals/collections/base_collection.py +482 -0
  389. vispy/visuals/collections/collection.py +253 -0
  390. vispy/visuals/collections/path_collection.py +23 -0
  391. vispy/visuals/collections/point_collection.py +19 -0
  392. vispy/visuals/collections/polygon_collection.py +25 -0
  393. vispy/visuals/collections/raw_path_collection.py +119 -0
  394. vispy/visuals/collections/raw_point_collection.py +113 -0
  395. vispy/visuals/collections/raw_polygon_collection.py +77 -0
  396. vispy/visuals/collections/raw_segment_collection.py +112 -0
  397. vispy/visuals/collections/raw_triangle_collection.py +78 -0
  398. vispy/visuals/collections/segment_collection.py +19 -0
  399. vispy/visuals/collections/triangle_collection.py +16 -0
  400. vispy/visuals/collections/util.py +168 -0
  401. vispy/visuals/colorbar.py +699 -0
  402. vispy/visuals/cube.py +41 -0
  403. vispy/visuals/ellipse.py +163 -0
  404. vispy/visuals/filters/__init__.py +10 -0
  405. vispy/visuals/filters/base_filter.py +242 -0
  406. vispy/visuals/filters/clipper.py +60 -0
  407. vispy/visuals/filters/clipping_planes.py +122 -0
  408. vispy/visuals/filters/color.py +181 -0
  409. vispy/visuals/filters/markers.py +28 -0
  410. vispy/visuals/filters/mesh.py +796 -0
  411. vispy/visuals/filters/picking.py +60 -0
  412. vispy/visuals/filters/tests/__init__.py +3 -0
  413. vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
  414. vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
  415. vispy/visuals/glsl/__init__.py +1 -0
  416. vispy/visuals/glsl/antialiasing.py +133 -0
  417. vispy/visuals/glsl/color.py +63 -0
  418. vispy/visuals/graphs/__init__.py +1 -0
  419. vispy/visuals/graphs/graph.py +240 -0
  420. vispy/visuals/graphs/layouts/__init__.py +55 -0
  421. vispy/visuals/graphs/layouts/circular.py +49 -0
  422. vispy/visuals/graphs/layouts/force_directed.py +211 -0
  423. vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
  424. vispy/visuals/graphs/layouts/random.py +52 -0
  425. vispy/visuals/graphs/tests/__init__.py +1 -0
  426. vispy/visuals/graphs/tests/test_layouts.py +139 -0
  427. vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
  428. vispy/visuals/graphs/util.py +120 -0
  429. vispy/visuals/gridlines.py +105 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +688 -0
  433. vispy/visuals/image_complex.py +130 -0
  434. vispy/visuals/infinite_line.py +199 -0
  435. vispy/visuals/instanced_mesh.py +152 -0
  436. vispy/visuals/isocurve.py +213 -0
  437. vispy/visuals/isoline.py +241 -0
  438. vispy/visuals/isosurface.py +113 -0
  439. vispy/visuals/line/__init__.py +6 -0
  440. vispy/visuals/line/arrow.py +289 -0
  441. vispy/visuals/line/dash_atlas.py +90 -0
  442. vispy/visuals/line/line.py +545 -0
  443. vispy/visuals/line_plot.py +135 -0
  444. vispy/visuals/linear_region.py +199 -0
  445. vispy/visuals/markers.py +810 -0
  446. vispy/visuals/mesh.py +373 -0
  447. vispy/visuals/mesh_normals.py +159 -0
  448. vispy/visuals/plane.py +54 -0
  449. vispy/visuals/polygon.py +145 -0
  450. vispy/visuals/rectangle.py +196 -0
  451. vispy/visuals/regular_polygon.py +56 -0
  452. vispy/visuals/scrolling_lines.py +197 -0
  453. vispy/visuals/shaders/__init__.py +17 -0
  454. vispy/visuals/shaders/compiler.py +206 -0
  455. vispy/visuals/shaders/expression.py +99 -0
  456. vispy/visuals/shaders/function.py +788 -0
  457. vispy/visuals/shaders/multiprogram.py +145 -0
  458. vispy/visuals/shaders/parsing.py +140 -0
  459. vispy/visuals/shaders/program.py +161 -0
  460. vispy/visuals/shaders/shader_object.py +162 -0
  461. vispy/visuals/shaders/tests/__init__.py +0 -0
  462. vispy/visuals/shaders/tests/test_function.py +486 -0
  463. vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
  464. vispy/visuals/shaders/tests/test_parsing.py +57 -0
  465. vispy/visuals/shaders/variable.py +272 -0
  466. vispy/visuals/spectrogram.py +169 -0
  467. vispy/visuals/sphere.py +80 -0
  468. vispy/visuals/surface_plot.py +192 -0
  469. vispy/visuals/tests/__init__.py +0 -0
  470. vispy/visuals/tests/test_arrows.py +109 -0
  471. vispy/visuals/tests/test_axis.py +120 -0
  472. vispy/visuals/tests/test_collections.py +15 -0
  473. vispy/visuals/tests/test_colorbar.py +179 -0
  474. vispy/visuals/tests/test_colormap.py +97 -0
  475. vispy/visuals/tests/test_ellipse.py +122 -0
  476. vispy/visuals/tests/test_histogram.py +24 -0
  477. vispy/visuals/tests/test_image.py +390 -0
  478. vispy/visuals/tests/test_image_complex.py +36 -0
  479. vispy/visuals/tests/test_infinite_line.py +53 -0
  480. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  481. vispy/visuals/tests/test_isosurface.py +22 -0
  482. vispy/visuals/tests/test_linear_region.py +152 -0
  483. vispy/visuals/tests/test_markers.py +54 -0
  484. vispy/visuals/tests/test_mesh.py +261 -0
  485. vispy/visuals/tests/test_mesh_normals.py +218 -0
  486. vispy/visuals/tests/test_polygon.py +112 -0
  487. vispy/visuals/tests/test_rectangle.py +163 -0
  488. vispy/visuals/tests/test_regular_polygon.py +111 -0
  489. vispy/visuals/tests/test_scalable_textures.py +180 -0
  490. vispy/visuals/tests/test_sdf.py +73 -0
  491. vispy/visuals/tests/test_spectrogram.py +42 -0
  492. vispy/visuals/tests/test_text.py +95 -0
  493. vispy/visuals/tests/test_volume.py +542 -0
  494. vispy/visuals/tests/test_windbarb.py +33 -0
  495. vispy/visuals/text/__init__.py +7 -0
  496. vispy/visuals/text/_sdf_cpu.cpython-312-aarch64-linux-gnu.so +0 -0
  497. vispy/visuals/text/_sdf_cpu.pyx +110 -0
  498. vispy/visuals/text/_sdf_gpu.py +316 -0
  499. vispy/visuals/text/text.py +675 -0
  500. vispy/visuals/transforms/__init__.py +34 -0
  501. vispy/visuals/transforms/_util.py +191 -0
  502. vispy/visuals/transforms/base_transform.py +233 -0
  503. vispy/visuals/transforms/chain.py +300 -0
  504. vispy/visuals/transforms/interactive.py +98 -0
  505. vispy/visuals/transforms/linear.py +564 -0
  506. vispy/visuals/transforms/nonlinear.py +398 -0
  507. vispy/visuals/transforms/tests/__init__.py +0 -0
  508. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  509. vispy/visuals/transforms/transform_system.py +339 -0
  510. vispy/visuals/tube.py +173 -0
  511. vispy/visuals/visual.py +923 -0
  512. vispy/visuals/volume.py +1335 -0
  513. vispy/visuals/windbarb.py +291 -0
  514. vispy/visuals/xyz_axis.py +34 -0
  515. vispy-0.14.0.dist-info/LICENSE.txt +36 -0
  516. vispy-0.14.0.dist-info/METADATA +218 -0
  517. vispy-0.14.0.dist-info/RECORD +519 -0
  518. vispy-0.14.0.dist-info/WHEEL +6 -0
  519. vispy-0.14.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,241 @@
1
+ const float THETA = 15.0 * 3.14159265358979323846264/180.0;
2
+
3
+ // Cross product of v1 and v2
4
+ float cross(in vec2 v1, in vec2 v2) {
5
+ return v1.x*v2.y - v1.y*v2.x;
6
+ }
7
+
8
+ // Returns distance of v3 to line v1-v2
9
+ float signed_distance(in vec2 v1, in vec2 v2, in vec2 v3) {
10
+ return cross(v2-v1,v1-v3) / length(v2-v1);
11
+ }
12
+
13
+ // Rotate v around origin
14
+ void rotate( in vec2 v, in float alpha, out vec2 result ) {
15
+ float c = cos(alpha);
16
+ float s = sin(alpha);
17
+ result = vec2( c*v.x - s*v.y,
18
+ s*v.x + c*v.y );
19
+ }
20
+
21
+ vec2 transform_vector(vec2 x, vec2 base) {
22
+ vec4 o = $transform(vec4(base, 0, 1));
23
+ return ($transform(vec4(base+x, 0, 1)) - o).xy;
24
+ }
25
+
26
+
27
+ // Uniforms
28
+ //uniform mat4 u_matrix;
29
+ //uniform mat4 u_view;
30
+
31
+ attribute vec4 color;
32
+ // uniform vec2 u_scale;
33
+ // uniform vec2 tr_scale;
34
+ uniform float linewidth;
35
+ uniform float antialias;
36
+ uniform vec2 linecaps;
37
+ uniform float linejoin;
38
+ uniform float miter_limit;
39
+ attribute float alength;
40
+ uniform float dash_phase;
41
+ uniform float dash_period;
42
+ uniform float dash_index;
43
+ uniform vec2 dash_caps;
44
+ uniform float closed;
45
+
46
+
47
+ // Attributes
48
+ attribute vec2 a_position; // position of each vertex
49
+ attribute vec4 a_tangents; // vector pointing from one vertex to the next
50
+ attribute vec2 a_segment; // distance along path
51
+ attribute vec2 a_angles;
52
+ attribute vec2 a_texcoord;
53
+
54
+ // Varying
55
+ varying vec4 v_color;
56
+ varying vec2 v_segment;
57
+ varying vec2 v_angles;
58
+ varying vec2 v_linecaps;
59
+ varying vec2 v_texcoord;
60
+ varying vec2 v_miter;
61
+ varying float v_miter_limit;
62
+ varying float v_length;
63
+ varying float v_linejoin;
64
+ varying float v_linewidth;
65
+ varying float v_antialias;
66
+ varying float v_dash_phase;
67
+ varying float v_dash_period;
68
+ varying float v_dash_index;
69
+ varying vec2 v_dash_caps;
70
+ varying float v_closed;
71
+ void main()
72
+ {
73
+ v_color = color;
74
+
75
+ v_linewidth = linewidth;
76
+ v_antialias = antialias;
77
+ v_linecaps = linecaps;
78
+
79
+ v_linejoin = linejoin;
80
+ v_miter_limit = miter_limit;
81
+ v_length = alength;
82
+ v_dash_phase = dash_phase;
83
+
84
+ v_dash_period = dash_period;
85
+ v_dash_index = dash_index;
86
+ v_dash_caps = dash_caps;
87
+
88
+ v_closed = closed;
89
+ bool closed = (v_closed > 0.0);
90
+
91
+ // Attributes to varyings
92
+ v_angles = a_angles;
93
+ //v_segment = a_segment * u_scale.x * tr_scale.x; // TODO: proper scaling
94
+ //v_length = v_length * u_scale * tr_scale; // TODO: proper scaling
95
+ v_segment = a_segment;
96
+
97
+ // Thickness below 1 pixel are represented using a 1 pixel thickness
98
+ // and a modified alpha
99
+ v_color.a = min(v_linewidth, v_color.a);
100
+ v_linewidth = max(v_linewidth, 1.0);
101
+
102
+ // This is the actual half width of the line
103
+ // TODO: take care of logical - physical pixel difference here.
104
+ float w = ceil(1.25*v_antialias+v_linewidth)/2.0;
105
+
106
+ vec4 doc_pos = $transform(vec4(a_position,0.,1.));
107
+ //vec2 position = doc_pos.xy * u_scale;
108
+ vec2 position = doc_pos.xy;
109
+ // At this point, position must be in _doc_ coordinates because the line
110
+ // width will be added to it.
111
+
112
+ //vec2 t1 = normalize(tr_scale*a_tangents.xy);
113
+ //vec2 t2 = normalize(tr_scale*a_tangents.zw);
114
+ vec2 t1 = normalize(transform_vector(a_tangents.xy, a_position));
115
+ vec2 t2 = normalize(transform_vector(a_tangents.zw, a_position));
116
+ float u = a_texcoord.x;
117
+ float v = a_texcoord.y;
118
+ vec2 o1 = vec2( +t1.y, -t1.x);
119
+ vec2 o2 = vec2( +t2.y, -t2.x);
120
+
121
+
122
+ // This is a join
123
+ // ----------------------------------------------------------------
124
+ if( t1 != t2 ) {
125
+ float angle = atan (t1.x*t2.y-t1.y*t2.x, t1.x*t2.x+t1.y*t2.y);
126
+ vec2 t = normalize(t1+t2);
127
+ vec2 o = vec2( + t.y, - t.x);
128
+
129
+ if ( v_dash_index > 0.0 )
130
+ {
131
+ // Broken angle
132
+ // ----------------------------------------------------------------
133
+ if( (abs(angle) > THETA) ) {
134
+ position += v * w * o / cos(angle/2.0);
135
+ float s = sign(angle);
136
+ if( angle < 0.0 ) {
137
+ if( u == +1.0 ) {
138
+ u = v_segment.y + v * w * tan(angle/2.0);
139
+ if( v == 1.0 ) {
140
+ position -= 2.0 * w * t1 / sin(angle);
141
+ u -= 2.0 * w / sin(angle);
142
+ }
143
+ } else {
144
+ u = v_segment.x - v * w * tan(angle/2.0);
145
+ if( v == 1.0 ) {
146
+ position += 2.0 * w * t2 / sin(angle);
147
+ u += 2.0*w / sin(angle);
148
+ }
149
+ }
150
+ } else {
151
+ if( u == +1.0 ) {
152
+ u = v_segment.y + v * w * tan(angle/2.0);
153
+ if( v == -1.0 ) {
154
+ position += 2.0 * w * t1 / sin(angle);
155
+ u += 2.0 * w / sin(angle);
156
+ }
157
+ } else {
158
+ u = v_segment.x - v * w * tan(angle/2.0);
159
+ if( v == -1.0 ) {
160
+ position -= 2.0 * w * t2 / sin(angle);
161
+ u -= 2.0*w / sin(angle);
162
+ }
163
+ }
164
+ }
165
+ // Continuous angle
166
+ // ------------------------------------------------------------
167
+ } else {
168
+ position += v * w * o / cos(angle/2.0);
169
+ if( u == +1.0 ) u = v_segment.y;
170
+ else u = v_segment.x;
171
+ }
172
+ }
173
+
174
+ // Solid line
175
+ // --------------------------------------------------------------------
176
+ else
177
+ {
178
+ position.xy += v * w * o / cos(angle/2.0);
179
+ if( angle < 0.0 ) {
180
+ if( u == +1.0 ) {
181
+ u = v_segment.y + v * w * tan(angle/2.0);
182
+ } else {
183
+ u = v_segment.x - v * w * tan(angle/2.0);
184
+ }
185
+ } else {
186
+ if( u == +1.0 ) {
187
+ u = v_segment.y + v * w * tan(angle/2.0);
188
+ } else {
189
+ u = v_segment.x - v * w * tan(angle/2.0);
190
+ }
191
+ }
192
+ }
193
+
194
+ // This is a line start or end (t1 == t2)
195
+ // ------------------------------------------------------------------------
196
+ } else {
197
+ position += v * w * o1;
198
+ if( u == -1.0 ) {
199
+ u = v_segment.x - w;
200
+ position -= w * t1;
201
+ } else {
202
+ u = v_segment.y + w;
203
+ position += w * t2;
204
+ }
205
+ }
206
+
207
+ // Miter distance
208
+ // ------------------------------------------------------------------------
209
+ vec2 t;
210
+ //vec2 curr = $transform(vec4(a_position,0.,1.)).xy*u_scale;
211
+ vec2 curr = $transform(vec4(a_position,0.,1.)).xy;
212
+ if( a_texcoord.x < 0.0 ) {
213
+ vec2 next = curr + t2*(v_segment.y-v_segment.x);
214
+
215
+ rotate( t1, +a_angles.x/2.0, t);
216
+ v_miter.x = signed_distance(curr, curr+t, position);
217
+
218
+ rotate( t2, +a_angles.y/2.0, t);
219
+ v_miter.y = signed_distance(next, next+t, position);
220
+ } else {
221
+ vec2 prev = curr - t1*(v_segment.y-v_segment.x);
222
+
223
+ rotate( t1, -a_angles.x/2.0,t);
224
+ v_miter.x = signed_distance(prev, prev+t, position);
225
+
226
+ rotate( t2, -a_angles.y/2.0,t);
227
+ v_miter.y = signed_distance(curr, curr+t, position);
228
+ }
229
+
230
+ if (!closed && v_segment.x <= 0.0) {
231
+ v_miter.x = 1e10;
232
+ }
233
+ if (!closed && v_segment.y >= v_length)
234
+ {
235
+ v_miter.y = 1e10;
236
+ }
237
+
238
+ v_texcoord = vec2( u, v*w );
239
+
240
+ gl_Position = $px_ndc_transform($doc_px_transform(vec4(position, doc_pos.z, 1.0)));
241
+ }
@@ -0,0 +1,12 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+
6
+ float marker_arrow(vec2 P, float size)
7
+ {
8
+ float r1 = abs(P.x) + abs(P.y) - size/2.;
9
+ float r2 = max(abs(P.x+size/2.), abs(P.y)) - size/2.;
10
+ float r3 = max(abs(P.x-size/6.)-size/4., abs(P.y)- size/4.);
11
+ return min(r3,max(.75*r1,r2));
12
+ }
@@ -0,0 +1,16 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_asterisk(vec2 P, float size)
8
+ {
9
+ float x = M_SQRT2/2 * (P.x - P.y);
10
+ float y = M_SQRT2/2 * (P.x + P.y);
11
+ float r1 = max(abs(x)- size/2., abs(y)- size/10.);
12
+ float r2 = max(abs(y)- size/2., abs(x)- size/10.);
13
+ float r3 = max(abs(P.x)- size/2., abs(P.y)- size/10.);
14
+ float r4 = max(abs(P.y)- size/2., abs(P.x)- size/10.);
15
+ return min( min(r1,r2), min(r3,r4));
16
+ }
@@ -0,0 +1,14 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_chevron(vec2 P, float size)
8
+ {
9
+ float x = 1.0/M_SQRT2 * ((P.x-size/6) - P.y);
10
+ float y = 1.0/M_SQRT2 * ((P.x-size/6) + P.y);
11
+ float r1 = max(abs(x), abs(y)) - size/3.0;
12
+ float r2 = max(abs(x-size/3.0), abs(y-size/3.0)) - size/3.0;
13
+ return max(r1,-r2);
14
+ }
@@ -0,0 +1,20 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_clover(vec2 P, float size)
8
+ {
9
+ const float t1 = -M_PI/2;
10
+ const vec2 c1 = 0.25*vec2(cos(t1),sin(t1));
11
+ const float t2 = t1+2*M_PI/3;
12
+ const vec2 c2 = 0.25*vec2(cos(t2),sin(t2));
13
+ const float t3 = t2+2*M_PI/3;
14
+ const vec2 c3 = 0.25*vec2(cos(t3),sin(t3));
15
+
16
+ float r1 = length( P - c1*size) - size/3.5;
17
+ float r2 = length( P - c2*size) - size/3.5;
18
+ float r3 = length( P - c3*size) - size/3.5;
19
+ return min(min(r1,r2),r3);
20
+ }
@@ -0,0 +1,31 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_club(vec2 P, float size)
8
+ {
9
+ // clover (3 discs)
10
+ const float t1 = -M_PI/2.0;
11
+ const vec2 c1 = 0.225*vec2(cos(t1),sin(t1));
12
+ const float t2 = t1+2*M_PI/3.0;
13
+ const vec2 c2 = 0.225*vec2(cos(t2),sin(t2));
14
+ const float t3 = t2+2*M_PI/3.0;
15
+ const vec2 c3 = 0.225*vec2(cos(t3),sin(t3));
16
+ float r1 = length( P - c1*size) - size/4.25;
17
+ float r2 = length( P - c2*size) - size/4.25;
18
+ float r3 = length( P - c3*size) - size/4.25;
19
+ float r4 = min(min(r1,r2),r3);
20
+
21
+ // Root (2 circles and 2 planes)
22
+ const vec2 c4 = vec2(+0.65, 0.125);
23
+ const vec2 c5 = vec2(-0.65, 0.125);
24
+ float r5 = length(P-c4*size) - size/1.6;
25
+ float r6 = length(P-c5*size) - size/1.6;
26
+ float r7 = P.y - 0.5*size;
27
+ float r8 = 0.2*size - P.y;
28
+ float r9 = max(-min(r5,r6), max(r7,r8));
29
+
30
+ return min(r4,r9);
31
+ }
@@ -0,0 +1,17 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_cross(vec2 P, float size)
8
+ {
9
+ float x = M_SQRT2/2.0 * (P.x - P.y);
10
+ float y = M_SQRT2/2.0 * (P.x + P.y);
11
+ float r1 = max(abs(x - size/3.0), abs(x + size/3.0));
12
+ float r2 = max(abs(y - size/3.0), abs(y + size/3.0));
13
+ float r3 = max(abs(x), abs(y));
14
+ float r = max(min(r1,r2),r3);
15
+ r -= size/2.;
16
+ return r;
17
+ }
@@ -0,0 +1,12 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_diamond(vec2 P, float size)
8
+ {
9
+ float x = M_SQRT2/2.0 * (P.x - P.y);
10
+ float y = M_SQRT2/2.0 * (P.x + P.y);
11
+ return max(abs(x), abs(y)) - size/(2.0*M_SQRT2);
12
+ }
@@ -0,0 +1,9 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+
6
+ float marker_disc(vec2 P, float size)
7
+ {
8
+ return length(P) - size/2.;
9
+ }
@@ -0,0 +1,67 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+
6
+ // --- ellipse
7
+ // Created by Inigo Quilez - iq/2013
8
+ // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
9
+ float marker_ellipse(vec2 P, float size)
10
+ {
11
+ // Alternate version (approximation)
12
+ float a = 1.0;
13
+ float b = 2.0;
14
+ float r = 0.5*size;
15
+ float f = length( P*vec2(a,b) );
16
+ f = length( P*vec2(a,b) );
17
+ f = f*(f-r)/length( P*vec2(a*a,b*b) );
18
+ return f;
19
+
20
+ /*
21
+ vec2 ab = vec2(size/3.0, size/2.0);
22
+ vec2 p = abs( P );
23
+ if( p.x > p.y ){
24
+ p = p.yx;
25
+ ab = ab.yx;
26
+ }
27
+ float l = ab.y*ab.y - ab.x*ab.x;
28
+ float m = ab.x*p.x/l;
29
+ float n = ab.y*p.y/l;
30
+ float m2 = m*m;
31
+ float n2 = n*n;
32
+
33
+ float c = (m2 + n2 - 1.0)/3.0;
34
+ float c3 = c*c*c;
35
+
36
+ float q = c3 + m2*n2*2.0;
37
+ float d = c3 + m2*n2;
38
+ float g = m + m*n2;
39
+
40
+ float co;
41
+
42
+ if(d < 0.0)
43
+ {
44
+ float p = acos(q/c3)/3.0;
45
+ float s = cos(p);
46
+ float t = sin(p)*sqrt(3.0);
47
+ float rx = sqrt( -c*(s + t + 2.0) + m2 );
48
+ float ry = sqrt( -c*(s - t + 2.0) + m2 );
49
+ co = ( ry + sign(l)*rx + abs(g)/(rx*ry) - m)/2.0;
50
+ }
51
+ else
52
+ {
53
+ float h = 2.0*m*n*sqrt( d );
54
+ float s = sign(q+h)*pow( abs(q+h), 1.0/3.0 );
55
+ float u = sign(q-h)*pow( abs(q-h), 1.0/3.0 );
56
+ float rx = -s - u - c*4.0 + 2.0*m2;
57
+ float ry = (s - u)*sqrt(3.0);
58
+ float rm = sqrt( rx*rx + ry*ry );
59
+ float p = ry/sqrt(rm-rx);
60
+ co = (p + 2.0*g/rm - m)/2.0;
61
+ }
62
+
63
+ float si = sqrt(1.0 - co*co);
64
+ vec2 closestPoint = vec2(ab.x*co, ab.y*si);
65
+ return length(closestPoint - p ) * sign(p.y-closestPoint.y);
66
+ */
67
+ }
@@ -0,0 +1,9 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+
6
+ float marker_hbar(vec2 P, float size)
7
+ {
8
+ return max(abs(P.x)- size/6.0, abs(P.y)- size/2.0);
9
+ }
@@ -0,0 +1,15 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+ #include "math/constants.glsl"
6
+
7
+ float marker_heart(vec2 P, float size)
8
+ {
9
+ float x = M_SQRT2/2.0 * (P.x - P.y);
10
+ float y = M_SQRT2/2.0 * (P.x + P.y);
11
+ float r1 = max(abs(x),abs(y))-size/3.5;
12
+ float r2 = length(P - M_SQRT2/2.0*vec2(+1.0,-1.0)*size/3.5) - size/3.5;
13
+ float r3 = length(P - M_SQRT2/2.0*vec2(-1.0,-1.0)*size/3.5) - size/3.5;
14
+ return min(min(r1,r2),r3);
15
+ }
@@ -0,0 +1,15 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // -----------------------------------------------------------------------------
5
+
6
+ float marker_infinity(vec2 P, float size)
7
+ {
8
+ const vec2 c1 = vec2(+0.2125, 0.00);
9
+ const vec2 c2 = vec2(-0.2125, 0.00);
10
+ float r1 = length(P-c1*size) - size/3.5;
11
+ float r2 = length(P-c1*size) - size/7.5;
12
+ float r3 = length(P-c2*size) - size/3.5;
13
+ float r4 = length(P-c2*size) - size/7.5;
14
+ return min( max(r1,-r2), max(r3,-r4));
15
+ }
@@ -0,0 +1,74 @@
1
+ // ----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // ----------------------------------------------------------------------------
5
+ #version 120
6
+
7
+ // Constants
8
+ // ------------------------------------
9
+ const float SQRT_2 = 1.4142135623730951;
10
+
11
+ // Uniforms
12
+ // ------------------------------------
13
+ uniform sampler2D u_texture;
14
+ uniform vec2 u_texture_shape;
15
+
16
+ // Varyings
17
+ // ------------------------------------
18
+ varying float v_antialias;
19
+ varying float v_linewidth;
20
+ varying vec4 v_fg_color;
21
+ varying vec4 v_bg_color;
22
+ varying float v_size;
23
+ varying vec2 v_rotation;
24
+
25
+ vec4 Nearest(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
26
+ vec4 Bilinear(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
27
+ vec4 Hanning(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
28
+ vec4 Hamming(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
29
+ vec4 Hermite(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
30
+ vec4 Kaiser(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
31
+ vec4 Quadric(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
32
+ vec4 Bicubic(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
33
+ vec4 CatRom(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
34
+ vec4 Mitchell(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
35
+ vec4 Spline16(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
36
+ vec4 Spline36(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
37
+ vec4 Gaussian(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
38
+ vec4 Bessel(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
39
+ vec4 Sinc(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
40
+ vec4 Lanczos(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
41
+ vec4 Blackman(sampler2D u_data, vec2 u_shape, vec2 v_texcoord);
42
+
43
+ void main()
44
+ {
45
+ vec2 P = gl_PointCoord.xy - vec2(0.5,0.5);
46
+ P = vec2(v_rotation.x*P.x - v_rotation.y*P.y,
47
+ v_rotation.y*P.x + v_rotation.x*P.y);
48
+ P += vec2(0.5,0.5);
49
+
50
+ float r = v_size + 2*(v_linewidth + 1.5*v_antialias);
51
+ // float signed_distance = r * (texture2D(u_texture, P).r - 0.5);
52
+ float signed_distance = r * (Bicubic(u_texture, u_texture_shape, P).r - 0.5);
53
+ float t = v_linewidth/2.0 - v_antialias;
54
+ float border_distance = abs(signed_distance) - t;
55
+ float alpha = border_distance/v_antialias;
56
+ alpha = exp(-alpha*alpha);
57
+
58
+
59
+ // Within linestroke
60
+ if( border_distance < 0 )
61
+ gl_FragColor = v_fg_color;
62
+ else if( signed_distance < 0 )
63
+ // Inside shape
64
+ if( border_distance > (v_linewidth/2.0 + v_antialias) )
65
+ gl_FragColor = v_bg_color;
66
+ else // Line stroke interior border
67
+ gl_FragColor = mix(v_bg_color,v_fg_color,alpha);
68
+ else
69
+ // Outide shape
70
+ if( border_distance > (v_linewidth/2.0 + v_antialias) )
71
+ discard;
72
+ else // Line stroke exterior border
73
+ gl_FragColor = vec4(v_fg_color.rgb, v_fg_color.a * alpha);
74
+ }
@@ -0,0 +1,41 @@
1
+ // ----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // ----------------------------------------------------------------------------
5
+ #version 120
6
+
7
+ // Uniform
8
+ // ------------------------------------
9
+ uniform mat4 u_projection;
10
+ uniform float u_antialias;
11
+
12
+ // Attributes
13
+ // ------------------------------------
14
+ attribute float a_size;
15
+ attribute float a_orientation;
16
+ attribute float a_linewidth;
17
+ attribute vec3 a_position;
18
+ attribute vec4 a_fg_color;
19
+ attribute vec4 a_bg_color;
20
+
21
+ // Varyings
22
+ // ------------------------------------
23
+ varying float v_antialias;
24
+ varying float v_linewidth;
25
+ varying float v_size;
26
+ varying vec4 v_fg_color;
27
+ varying vec4 v_bg_color;
28
+ varying vec2 v_rotation;
29
+
30
+ void main (void)
31
+ {
32
+ v_size = a_size;
33
+ v_linewidth = 2.5*a_linewidth;
34
+ v_antialias = 3.0*u_antialias;
35
+ v_fg_color = a_fg_color;
36
+ v_bg_color = a_bg_color;
37
+ v_rotation = vec2(cos(a_orientation), sin(a_orientation));
38
+
39
+ gl_Position = u_projection * vec4(a_position, 1.0);
40
+ gl_PointSize = a_size + 2.0*(a_linewidth + 1.5*v_antialias);
41
+ }
@@ -0,0 +1,36 @@
1
+ // ----------------------------------------------------------------------------
2
+ // Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
3
+ // Distributed under the (new) BSD License.
4
+ // ----------------------------------------------------------------------------
5
+ // Hooks:
6
+ // <paint> : "stroke", "filled" or "outline"
7
+ // <marker> : "arrow", "asterisk", "chevron", "clover", "club",
8
+ // "cross", "diamond", "disc", "ellipse", "hbar",
9
+ // "heart", "infinity", "pin", "ring", "spade",
10
+ // "square", "tag", "triangle", "vbar"
11
+ // ----------------------------------------------------------------------------
12
+ #include "math/constants.glsl"
13
+ #include "markers/markers.glsl"
14
+ #include "antialias/antialias.glsl"
15
+
16
+ // Varyings
17
+ // ------------------------------------
18
+ varying float v_antialias;
19
+ varying float v_linewidth;
20
+ varying float v_size;
21
+ varying float v_texcoord;
22
+ varying vec4 v_fg_color;
23
+ varying vec4 v_bg_color;
24
+ varying vec2 v_orientation;
25
+
26
+ // Main (hooked)
27
+ // ------------------------------------
28
+ void main()
29
+ {
30
+ vec2 P = gl_PointCoord.xy - vec2(0.5,0.5);
31
+ P = vec2(v_orientation.x*P.x - v_orientation.y*P.y,
32
+ v_orientation.y*P.x + v_orientation.x*P.y);
33
+ float point_size = M_SQRT2*v_size + 2 * (v_linewidth + 1.5*v_antialias);
34
+ float distance = marker_<marker>(P*point_size, v_size);
35
+ gl_FragColor = <paint>(distance, v_linewidth, v_antialias, v_fg_color, v_bg_color);
36
+ }