vispy 0.15.0__cp313-cp313-macosx_10_13_x86_64.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 (521) 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 +1003 -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 +1213 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +378 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1522 -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 +162 -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 +700 -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 +594 -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 +568 -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 +1824 -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 +1046 -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 +105 -0
  274. vispy/scene/cameras/base_camera.py +551 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +311 -0
  278. vispy/scene/cameras/perspective.py +338 -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 +183 -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 +448 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +494 -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 +32 -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 +21 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +487 -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 +162 -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 +801 -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 +161 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +701 -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 +819 -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_gridlines.py +30 -0
  477. vispy/visuals/tests/test_histogram.py +24 -0
  478. vispy/visuals/tests/test_image.py +392 -0
  479. vispy/visuals/tests/test_image_complex.py +36 -0
  480. vispy/visuals/tests/test_infinite_line.py +53 -0
  481. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  482. vispy/visuals/tests/test_isosurface.py +22 -0
  483. vispy/visuals/tests/test_linear_region.py +152 -0
  484. vispy/visuals/tests/test_markers.py +54 -0
  485. vispy/visuals/tests/test_mesh.py +261 -0
  486. vispy/visuals/tests/test_mesh_normals.py +218 -0
  487. vispy/visuals/tests/test_polygon.py +112 -0
  488. vispy/visuals/tests/test_rectangle.py +163 -0
  489. vispy/visuals/tests/test_regular_polygon.py +111 -0
  490. vispy/visuals/tests/test_scalable_textures.py +196 -0
  491. vispy/visuals/tests/test_sdf.py +73 -0
  492. vispy/visuals/tests/test_spectrogram.py +42 -0
  493. vispy/visuals/tests/test_surface_plot.py +57 -0
  494. vispy/visuals/tests/test_text.py +95 -0
  495. vispy/visuals/tests/test_volume.py +542 -0
  496. vispy/visuals/tests/test_windbarb.py +33 -0
  497. vispy/visuals/text/__init__.py +7 -0
  498. vispy/visuals/text/_sdf_cpu.cpython-313-darwin.so +0 -0
  499. vispy/visuals/text/_sdf_cpu.pyx +112 -0
  500. vispy/visuals/text/_sdf_gpu.py +316 -0
  501. vispy/visuals/text/text.py +675 -0
  502. vispy/visuals/transforms/__init__.py +34 -0
  503. vispy/visuals/transforms/_util.py +191 -0
  504. vispy/visuals/transforms/base_transform.py +233 -0
  505. vispy/visuals/transforms/chain.py +300 -0
  506. vispy/visuals/transforms/interactive.py +98 -0
  507. vispy/visuals/transforms/linear.py +564 -0
  508. vispy/visuals/transforms/nonlinear.py +398 -0
  509. vispy/visuals/transforms/tests/__init__.py +0 -0
  510. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  511. vispy/visuals/transforms/transform_system.py +339 -0
  512. vispy/visuals/tube.py +173 -0
  513. vispy/visuals/visual.py +923 -0
  514. vispy/visuals/volume.py +1366 -0
  515. vispy/visuals/windbarb.py +291 -0
  516. vispy/visuals/xyz_axis.py +34 -0
  517. vispy-0.15.0.dist-info/METADATA +243 -0
  518. vispy-0.15.0.dist-info/RECORD +521 -0
  519. vispy-0.15.0.dist-info/WHEEL +6 -0
  520. vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
  521. vispy-0.15.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,168 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """This module provides a namespace for additional desktop OpenGL functions.
6
+
7
+ The functions in this module are copied from PyOpenGL, but any deprecated
8
+ functions are omitted, as well as any functions that are in our ES 2.0 API.
9
+
10
+ """
11
+
12
+ from OpenGL import GL as _GL
13
+ from . import _pyopengl2
14
+ from . import _constants
15
+
16
+
17
+ def _inject():
18
+ """Inject functions and constants from PyOpenGL but leave out the
19
+ names that are deprecated or that we provide in our API.
20
+ """
21
+ # Get namespaces
22
+ NS = globals()
23
+ GLNS = _GL.__dict__
24
+
25
+ # Get names that we use in our API
26
+ used_names = []
27
+ used_names.extend([names[0] for names in _pyopengl2._functions_to_import])
28
+ used_names.extend([name for name in _pyopengl2._used_functions])
29
+ NS['_used_names'] = used_names
30
+ #
31
+ used_constants = set(_constants.__dict__)
32
+ # Count
33
+ injected_constants = 0
34
+ injected_functions = 0
35
+
36
+ for name in dir(_GL):
37
+
38
+ if name.startswith('GL_'):
39
+ # todo: find list of deprecated constants
40
+ if name not in used_constants:
41
+ NS[name] = GLNS[name]
42
+ injected_constants += 1
43
+
44
+ elif name.startswith('gl'):
45
+ # Functions
46
+ if (name + ',') in _deprecated_functions:
47
+ pass # Function is deprecated
48
+ elif name in used_names:
49
+ pass # Function is in our GL ES 2.0 API
50
+ else:
51
+ NS[name] = GLNS[name]
52
+ injected_functions += 1
53
+
54
+ # print('injected %i constants and %i functions in glplus' %
55
+ # (injected_constants, injected_functions))
56
+
57
+
58
+ # List of deprecated functions, obtained by parsing gl.spec
59
+ _deprecated_functions = """
60
+ glAccum, glAlphaFunc, glAreTexturesResident, glArrayElement, glBegin,
61
+ glBitmap, glCallList, glCallLists, glClearAccum, glClearIndex,
62
+ glClientActiveTexture, glClipPlane, glColor3b, glColor3bv, glColor3d,
63
+ glColor3dv, glColor3f, glColor3fv, glColor3i, glColor3iv, glColor3s,
64
+ glColor3sv, glColor3ub, glColor3ubv, glColor3ui, glColor3uiv, glColor3us,
65
+ glColor3usv, glColor4b, glColor4bv, glColor4d, glColor4dv, glColor4f,
66
+ glColor4fv, glColor4i, glColor4iv, glColor4s, glColor4sv, glColor4ub,
67
+ glColor4ubv, glColor4ui, glColor4uiv, glColor4us, glColor4usv,
68
+ glColorMaterial, glColorPointer, glColorSubTable, glColorTable,
69
+ glColorTableParameterfv, glColorTableParameteriv, glConvolutionFilter1D,
70
+ glConvolutionFilter2D, glConvolutionParameterf, glConvolutionParameterfv,
71
+ glConvolutionParameteri, glConvolutionParameteriv, glCopyColorSubTable,
72
+ glCopyColorTable, glCopyConvolutionFilter1D, glCopyConvolutionFilter2D,
73
+ glCopyPixels, glDeleteLists, glDisableClientState, glDrawPixels,
74
+ glEdgeFlag, glEdgeFlagPointer, glEdgeFlagv, glEnableClientState, glEnd,
75
+ glEndList, glEvalCoord1d, glEvalCoord1dv, glEvalCoord1f, glEvalCoord1fv,
76
+ glEvalCoord2d, glEvalCoord2dv, glEvalCoord2f, glEvalCoord2fv,
77
+ glEvalMesh1, glEvalMesh2, glEvalPoint1, glEvalPoint2, glFeedbackBuffer,
78
+ glFogCoordPointer, glFogCoordd, glFogCoorddv, glFogCoordf, glFogCoordfv,
79
+ glFogf, glFogfv, glFogi, glFogiv, glFrustum, glGenLists, glGetClipPlane,
80
+ glGetColorTable, glGetColorTableParameterfv, glGetColorTableParameteriv,
81
+ glGetConvolutionFilter, glGetConvolutionParameterfv,
82
+ glGetConvolutionParameteriv, glGetHistogram, glGetHistogramParameterfv,
83
+ glGetHistogramParameteriv, glGetLightfv, glGetLightiv, glGetMapdv,
84
+ glGetMapfv, glGetMapiv, glGetMaterialfv, glGetMaterialiv, glGetMinmax,
85
+ glGetMinmaxParameterfv, glGetMinmaxParameteriv, glGetPixelMapfv,
86
+ glGetPixelMapuiv, glGetPixelMapusv, glGetPolygonStipple,
87
+ glGetSeparableFilter, glGetTexEnvfv, glGetTexEnviv, glGetTexGendv,
88
+ glGetTexGenfv, glGetTexGeniv, glHistogram, glIndexMask, glIndexPointer,
89
+ glIndexd, glIndexdv, glIndexf, glIndexfv, glIndexi, glIndexiv, glIndexs,
90
+ glIndexsv, glInitNames, glInterleavedArrays, glIsList, glLightModelf,
91
+ glLightModelfv, glLightModeli, glLightModeliv, glLightf, glLightfv,
92
+ glLighti, glLightiv, glLineStipple, glListBase, glLoadIdentity,
93
+ glLoadMatrixd, glLoadMatrixf, glLoadName, glLoadTransposeMatrixd,
94
+ glLoadTransposeMatrixf, glMap1d, glMap1f, glMap2d, glMap2f, glMapGrid1d,
95
+ glMapGrid1f, glMapGrid2d, glMapGrid2f, glMaterialf, glMaterialfv,
96
+ glMateriali, glMaterialiv, glMatrixMode, glMinmax, glMultMatrixd,
97
+ glMultMatrixf, glMultTransposeMatrixd, glMultTransposeMatrixf,
98
+ glMultiTexCoord1d, glMultiTexCoord1dv, glMultiTexCoord1f,
99
+ glMultiTexCoord1fv, glMultiTexCoord1i, glMultiTexCoord1iv,
100
+ glMultiTexCoord1s, glMultiTexCoord1sv, glMultiTexCoord2d,
101
+ glMultiTexCoord2dv, glMultiTexCoord2f, glMultiTexCoord2fv,
102
+ glMultiTexCoord2i, glMultiTexCoord2iv, glMultiTexCoord2s,
103
+ glMultiTexCoord2sv, glMultiTexCoord3d, glMultiTexCoord3dv,
104
+ glMultiTexCoord3f, glMultiTexCoord3fv, glMultiTexCoord3i,
105
+ glMultiTexCoord3iv, glMultiTexCoord3s, glMultiTexCoord3sv,
106
+ glMultiTexCoord4d, glMultiTexCoord4dv, glMultiTexCoord4f,
107
+ glMultiTexCoord4fv, glMultiTexCoord4i, glMultiTexCoord4iv,
108
+ glMultiTexCoord4s, glMultiTexCoord4sv, glNewList, glNormal3b,
109
+ glNormal3bv, glNormal3d, glNormal3dv, glNormal3f, glNormal3fv,
110
+ glNormal3i, glNormal3iv, glNormal3s, glNormal3sv, glNormalPointer,
111
+ glOrtho, glPassThrough, glPixelMapfv, glPixelMapuiv, glPixelMapusv,
112
+ glPixelTransferf, glPixelTransferi, glPixelZoom, glPolygonStipple,
113
+ glPopAttrib, glPopClientAttrib, glPopMatrix, glPopName,
114
+ glPrioritizeTextures, glPushAttrib, glPushClientAttrib, glPushMatrix,
115
+ glPushName, glRasterPos2d, glRasterPos2dv, glRasterPos2f, glRasterPos2fv,
116
+ glRasterPos2i, glRasterPos2iv, glRasterPos2s, glRasterPos2sv,
117
+ glRasterPos3d, glRasterPos3dv, glRasterPos3f, glRasterPos3fv,
118
+ glRasterPos3i, glRasterPos3iv, glRasterPos3s, glRasterPos3sv,
119
+ glRasterPos4d, glRasterPos4dv, glRasterPos4f, glRasterPos4fv,
120
+ glRasterPos4i, glRasterPos4iv, glRasterPos4s, glRasterPos4sv, glRectd,
121
+ glRectdv, glRectf, glRectfv, glRecti, glRectiv, glRects, glRectsv,
122
+ glRenderMode, glResetHistogram, glResetMinmax, glRotated, glRotatef,
123
+ glScaled, glScalef, glSecondaryColor3b, glSecondaryColor3bv,
124
+ glSecondaryColor3d, glSecondaryColor3dv, glSecondaryColor3f,
125
+ glSecondaryColor3fv, glSecondaryColor3i, glSecondaryColor3iv,
126
+ glSecondaryColor3s, glSecondaryColor3sv, glSecondaryColor3ub,
127
+ glSecondaryColor3ubv, glSecondaryColor3ui, glSecondaryColor3uiv,
128
+ glSecondaryColor3us, glSecondaryColor3usv, glSecondaryColorPointer,
129
+ glSelectBuffer, glSeparableFilter2D, glShadeModel, glTexCoord1d,
130
+ glTexCoord1dv, glTexCoord1f, glTexCoord1fv, glTexCoord1i, glTexCoord1iv,
131
+ glTexCoord1s, glTexCoord1sv, glTexCoord2d, glTexCoord2dv, glTexCoord2f,
132
+ glTexCoord2fv, glTexCoord2i, glTexCoord2iv, glTexCoord2s, glTexCoord2sv,
133
+ glTexCoord3d, glTexCoord3dv, glTexCoord3f, glTexCoord3fv, glTexCoord3i,
134
+ glTexCoord3iv, glTexCoord3s, glTexCoord3sv, glTexCoord4d, glTexCoord4dv,
135
+ glTexCoord4f, glTexCoord4fv, glTexCoord4i, glTexCoord4iv, glTexCoord4s,
136
+ glTexCoord4sv, glTexCoordPointer, glTexEnvf, glTexEnvfv, glTexEnvi,
137
+ glTexEnviv, glTexGend, glTexGendv, glTexGenf, glTexGenfv, glTexGeni,
138
+ glTexGeniv, glTranslated, glTranslatef, glVertex2d, glVertex2dv,
139
+ glVertex2f, glVertex2fv, glVertex2i, glVertex2iv, glVertex2s,
140
+ glVertex2sv, glVertex3d, glVertex3dv, glVertex3f, glVertex3fv,
141
+ glVertex3i, glVertex3iv, glVertex3s, glVertex3sv, glVertex4d,
142
+ glVertex4dv, glVertex4f, glVertex4fv, glVertex4i, glVertex4iv,
143
+ glVertex4s, glVertex4sv, glVertexAttrib1d, glVertexAttrib1dv,
144
+ glVertexAttrib1f, glVertexAttrib1fv, glVertexAttrib1s, glVertexAttrib1sv,
145
+ glVertexAttrib2d, glVertexAttrib2dv, glVertexAttrib2f, glVertexAttrib2fv,
146
+ glVertexAttrib2s, glVertexAttrib2sv, glVertexAttrib3d, glVertexAttrib3dv,
147
+ glVertexAttrib3f, glVertexAttrib3fv, glVertexAttrib3s, glVertexAttrib3sv,
148
+ glVertexAttrib4Nbv, glVertexAttrib4Niv, glVertexAttrib4Nsv,
149
+ glVertexAttrib4Nub, glVertexAttrib4Nubv, glVertexAttrib4Nuiv,
150
+ glVertexAttrib4Nusv, glVertexAttrib4bv, glVertexAttrib4d,
151
+ glVertexAttrib4dv, glVertexAttrib4f, glVertexAttrib4fv,
152
+ glVertexAttrib4iv, glVertexAttrib4s, glVertexAttrib4sv,
153
+ glVertexAttrib4ubv, glVertexAttrib4uiv, glVertexAttrib4usv,
154
+ glVertexAttribI1i, glVertexAttribI1iv, glVertexAttribI1ui,
155
+ glVertexAttribI1uiv, glVertexAttribI2i, glVertexAttribI2iv,
156
+ glVertexAttribI2ui, glVertexAttribI2uiv, glVertexAttribI3i,
157
+ glVertexAttribI3iv, glVertexAttribI3ui, glVertexAttribI3uiv,
158
+ glVertexAttribI4bv, glVertexAttribI4i, glVertexAttribI4iv,
159
+ glVertexAttribI4sv, glVertexAttribI4ubv, glVertexAttribI4ui,
160
+ glVertexAttribI4uiv, glVertexAttribI4usv, glVertexPointer, glWindowPos2d,
161
+ glWindowPos2dv, glWindowPos2f, glWindowPos2fv, glWindowPos2i,
162
+ glWindowPos2iv, glWindowPos2s, glWindowPos2sv, glWindowPos3d,
163
+ glWindowPos3dv, glWindowPos3f, glWindowPos3fv, glWindowPos3i,
164
+ glWindowPos3iv, glWindowPos3s, glWindowPos3sv,
165
+ """
166
+
167
+
168
+ _inject()
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """GL ES 2.0 API implemented via pyOpenGL library. Intended as a
6
+ fallback and for testing.
7
+ """
8
+
9
+ from OpenGL import GL as _GL
10
+ import OpenGL.GL.framebufferobjects as _FBO
11
+
12
+ from ...util import logger
13
+
14
+ from . import _copy_gl_functions
15
+ from ._constants import * # noqa
16
+
17
+
18
+ def _patch():
19
+ """Monkey-patch pyopengl to fix a bug in glBufferSubData."""
20
+ import sys
21
+ from OpenGL import GL
22
+ if sys.version_info > (3,):
23
+ buffersubdatafunc = GL.glBufferSubData
24
+ if hasattr(buffersubdatafunc, 'wrapperFunction'):
25
+ buffersubdatafunc = buffersubdatafunc.wrapperFunction
26
+ _m = sys.modules[buffersubdatafunc.__module__]
27
+ _m.long = int
28
+
29
+ # Fix missing enum
30
+ try:
31
+ from OpenGL.GL.VERSION import GL_2_0
32
+ GL_2_0.GL_OBJECT_SHADER_SOURCE_LENGTH = GL_2_0.GL_SHADER_SOURCE_LENGTH
33
+ except Exception:
34
+ pass
35
+
36
+ # Patch OpenGL package
37
+ _patch()
38
+
39
+
40
+ # Inject
41
+
42
+ def _make_unavailable_func(funcname):
43
+ def cb(*args, **kwargs):
44
+ raise RuntimeError('OpenGL API call "%s" is not available.' % funcname)
45
+ return cb
46
+
47
+
48
+ def _get_function_from_pyopengl(funcname):
49
+ """Try getting the given function from PyOpenGL, return
50
+ a dummy function (that shows a warning when called) if it
51
+ could not be found.
52
+ """
53
+ func = None
54
+
55
+ # Get function from GL
56
+ try:
57
+ func = getattr(_GL, funcname)
58
+ except AttributeError:
59
+ # Get function from FBO
60
+ try:
61
+ func = getattr(_FBO, funcname)
62
+ except AttributeError:
63
+ func = None
64
+
65
+ # Try using "alias"
66
+ if not bool(func):
67
+ # Some functions are known by a slightly different name
68
+ # e.g. glDepthRangef, glClearDepthf
69
+ if funcname.endswith('f'):
70
+ try:
71
+ func = getattr(_GL, funcname[:-1])
72
+ except AttributeError:
73
+ pass
74
+
75
+ # Set dummy function if we could not find it
76
+ if func is None:
77
+ func = _make_unavailable_func(funcname)
78
+ logger.warning('warning: %s not available' % funcname)
79
+ return func
80
+
81
+
82
+ def _inject():
83
+ """Copy functions from OpenGL.GL into _pyopengl namespace."""
84
+ NS = _pyopengl2.__dict__
85
+ for glname, ourname in _pyopengl2._functions_to_import:
86
+ func = _get_function_from_pyopengl(glname)
87
+ NS[ourname] = func
88
+
89
+
90
+ from . import _pyopengl2 # noqa
91
+
92
+ # Inject remaining functions from OpenGL.GL
93
+ # copies name to _pyopengl2 namespace
94
+ _inject()
95
+
96
+ # Inject all function definitions in _pyopengl2
97
+ _copy_gl_functions(_pyopengl2, globals())
File without changes
@@ -0,0 +1,282 @@
1
+ """Test to verify some basic functionality of our OpenGL API. We cover
2
+ much more in the test_functionality. Together, these two tests should
3
+ touch *all* ES 2.0 API calls.
4
+
5
+ The only exception is glCompressedTexImage2D and glCompressedTexSubImage2D.
6
+ """
7
+
8
+ import sys
9
+
10
+ from vispy.app import Canvas
11
+ from numpy.testing import assert_almost_equal
12
+ from vispy.testing import (requires_application, requires_pyopengl, SkipTest,
13
+ run_tests_if_main, assert_equal, assert_true)
14
+ from vispy.util import use_log_level
15
+ from vispy.gloo import gl
16
+
17
+
18
+ def teardown_module():
19
+ gl.use_gl() # Reset to default
20
+
21
+
22
+ @requires_application()
23
+ def test_basics_desktop():
24
+ """Test desktop GL backend for basic functionality."""
25
+ _test_basics('gl2')
26
+ with Canvas():
27
+ _test_setting_parameters()
28
+ _test_enabling_disabling()
29
+ _test_setting_stuff()
30
+ _test_object_creation_and_deletion()
31
+ _test_fbo()
32
+ try:
33
+ gl.gl2._get_gl_func('foo', None, ())
34
+ except RuntimeError as exp:
35
+ exp = str(exp)
36
+ assert 'version' in exp
37
+ assert 'unknown' not in exp
38
+ gl.glFinish()
39
+
40
+
41
+ @requires_application()
42
+ def test_functionality_proxy():
43
+ """Test GL proxy class for basic functionality."""
44
+ # By using debug mode, we are using the proxy class
45
+ _test_basics('gl2 debug')
46
+
47
+
48
+ @requires_application()
49
+ @requires_pyopengl()
50
+ def test_basics_pypengl():
51
+ """Test pyopengl GL backend for basic functionality."""
52
+ _test_basics('pyopengl2')
53
+
54
+
55
+ @requires_application()
56
+ def test_functionality_es2():
57
+ """Test es2 GL backend for basic functionality."""
58
+ if True:
59
+ raise SkipTest('Skip es2 functionality test for now.')
60
+ if sys.platform.startswith('win'):
61
+ raise SkipTest('Can only test es2 functionality on Windows.')
62
+ _test_basics('es2')
63
+
64
+
65
+ def _test_basics(backend):
66
+ """Create app and canvas so we have a context. Then run tests."""
67
+ # use the backend
68
+ with use_log_level('error', print_msg=False):
69
+ gl.use_gl(backend) # pyopengl throws warning on injection
70
+
71
+ with Canvas():
72
+ _test_setting_parameters()
73
+ _test_enabling_disabling()
74
+ _test_setting_stuff()
75
+ _test_object_creation_and_deletion()
76
+ _test_fbo()
77
+ gl.glFinish()
78
+
79
+
80
+ def _test_setting_parameters():
81
+ # Set some parameters and get result
82
+ clr = 1.0, 0.1, 0.2, 0.7
83
+ gl.glClearColor(*clr)
84
+ assert_almost_equal(gl.glGetParameter(gl.GL_COLOR_CLEAR_VALUE), clr)
85
+ #
86
+ gl.glCullFace(gl.GL_FRONT)
87
+ assert_equal(gl.glGetParameter(gl.GL_CULL_FACE_MODE), gl.GL_FRONT)
88
+ gl.glCullFace(gl.GL_BACK)
89
+ assert_equal(gl.glGetParameter(gl.GL_CULL_FACE_MODE), gl.GL_BACK)
90
+ #
91
+ gl.glDepthFunc(gl.GL_NOTEQUAL)
92
+ assert_equal(gl.glGetParameter(gl.GL_DEPTH_FUNC), gl.GL_NOTEQUAL)
93
+ #
94
+ val = 0.2, 0.3
95
+ gl.glDepthRange(*val)
96
+ assert_almost_equal(gl.glGetParameter(gl.GL_DEPTH_RANGE), val)
97
+
98
+ gl.check_error()
99
+
100
+
101
+ def _test_enabling_disabling():
102
+ # Enabling/disabling
103
+ gl.glEnable(gl.GL_DEPTH_TEST)
104
+ assert_equal(gl.glIsEnabled(gl.GL_DEPTH_TEST), True)
105
+ assert_equal(gl.glGetParameter(gl.GL_DEPTH_TEST), 1)
106
+ gl.glDisable(gl.GL_DEPTH_TEST)
107
+ assert_equal(gl.glIsEnabled(gl.GL_DEPTH_TEST), False)
108
+ assert_equal(gl.glGetParameter(gl.GL_DEPTH_TEST), 0)
109
+ #
110
+ gl.glEnable(gl.GL_BLEND)
111
+ assert_equal(gl.glIsEnabled(gl.GL_BLEND), True)
112
+ assert_equal(gl.glGetParameter(gl.GL_BLEND), 1)
113
+ gl.glDisable(gl.GL_BLEND)
114
+ assert_equal(gl.glIsEnabled(gl.GL_BLEND), False)
115
+ assert_equal(gl.glGetParameter(gl.GL_BLEND), 0)
116
+
117
+ gl.check_error()
118
+
119
+
120
+ def _test_setting_stuff():
121
+ # Set stuff to touch functions
122
+
123
+ gl.glClear(gl.GL_COLOR_BUFFER_BIT)
124
+ #
125
+ gl.glBlendColor(1.0, 1.0, 1.0, 1.0)
126
+ gl.glBlendEquation(gl.GL_FUNC_ADD)
127
+ gl.glBlendEquationSeparate(gl.GL_FUNC_ADD, gl.GL_FUNC_ADD)
128
+ gl.glBlendFunc(gl.GL_ONE, gl.GL_ZERO)
129
+ gl.glBlendFuncSeparate(gl.GL_ONE, gl.GL_ZERO, gl.GL_ONE, gl.GL_ZERO)
130
+ #
131
+ gl.glClearColor(0.0, 0.0, 0.0, 1.0)
132
+ gl.glClearDepth(1)
133
+ gl.glClearStencil(0)
134
+ #
135
+ gl.glColorMask(True, True, True, True)
136
+ gl.glDepthMask(False)
137
+ gl.glStencilMask(255)
138
+ gl.glStencilMaskSeparate(gl.GL_FRONT, 128)
139
+ #
140
+ gl.glStencilFunc(gl.GL_ALWAYS, 0, 255)
141
+ gl.glStencilFuncSeparate(gl.GL_FRONT, gl.GL_ALWAYS, 0, 255)
142
+ gl.glStencilOp(gl.GL_KEEP, gl.GL_KEEP, gl.GL_KEEP)
143
+ gl.glStencilOpSeparate(gl.GL_FRONT, gl.GL_KEEP, gl.GL_KEEP, gl.GL_KEEP)
144
+ #
145
+ gl.glFrontFace(gl.GL_CW)
146
+ gl.glHint(gl.GL_GENERATE_MIPMAP_HINT, gl.GL_FASTEST)
147
+ gl.glLineWidth(2.0)
148
+ gl.glPolygonOffset(0.0, 0.0)
149
+ gl.glSampleCoverage(1.0, False)
150
+
151
+ # And getting stuff
152
+ try:
153
+ with use_log_level('error', print_msg=False):
154
+ r, p = gl.glGetShaderPrecisionFormat(gl.GL_FRAGMENT_SHADER,
155
+ gl.GL_HIGH_FLOAT)
156
+ gl.check_error() # Sometimes the func is there but OpenGL errs
157
+ except Exception:
158
+ pass # accept if the function is not there ...
159
+ # We should catch RuntimeError and GL.error.NullFunctionError,
160
+ # but PyOpenGL may not be available.
161
+ # On Travis this function was not there on one machine according
162
+ # to PyOpenGL, but our desktop backend worked fine ...
163
+
164
+ #
165
+ v = gl.glGetParameter(gl.GL_VERSION)
166
+ assert_true(isinstance(v, str))
167
+ assert_true(len(v) > 0)
168
+ gl.check_error()
169
+
170
+
171
+ def _test_object_creation_and_deletion():
172
+
173
+ # Stuff that is originally glGenX
174
+
175
+ # Note that if we test glIsTexture(x), we cannot assume x to be a
176
+ # nonexisting texture; we might have created a texture in another
177
+ # test and failed to clean it up.
178
+
179
+ # Create/delete texture
180
+ # assert_equal(gl.glIsTexture(12), False)
181
+ handle = gl.glCreateTexture()
182
+ gl.glBindTexture(gl.GL_TEXTURE_2D, handle)
183
+ assert_equal(gl.glIsTexture(handle), True)
184
+ gl.glDeleteTexture(handle)
185
+ assert_equal(gl.glIsTexture(handle), False)
186
+
187
+ # Create/delete buffer
188
+ # assert_equal(gl.glIsBuffer(12), False)
189
+ handle = gl.glCreateBuffer()
190
+ gl.glBindBuffer(gl.GL_ARRAY_BUFFER, handle)
191
+ assert_equal(gl.glIsBuffer(handle), True)
192
+ gl.glDeleteBuffer(handle)
193
+ assert_equal(gl.glIsBuffer(handle), False)
194
+
195
+ # Create/delete framebuffer
196
+ # assert_equal(gl.glIsFramebuffer(12), False)
197
+ handle = gl.glCreateFramebuffer()
198
+ gl.glBindFramebuffer(gl.GL_FRAMEBUFFER, handle)
199
+ assert_equal(gl.glIsFramebuffer(handle), True)
200
+ gl.glDeleteFramebuffer(handle)
201
+ assert_equal(gl.glIsFramebuffer(handle), False)
202
+
203
+ # Create/delete renderbuffer
204
+ # assert_equal(gl.glIsRenderbuffer(12), False)
205
+ handle = gl.glCreateRenderbuffer()
206
+ gl.glBindRenderbuffer(gl.GL_RENDERBUFFER, handle)
207
+ assert_equal(gl.glIsRenderbuffer(handle), True)
208
+ gl.glDeleteRenderbuffer(handle)
209
+ assert_equal(gl.glIsRenderbuffer(handle), False)
210
+
211
+ # Stuff that is originally called glCreate
212
+
213
+ # Create/delete program
214
+ # assert_equal(gl.glIsProgram(12), False)
215
+ handle = gl.glCreateProgram()
216
+ assert_equal(gl.glIsProgram(handle), True)
217
+ gl.glDeleteProgram(handle)
218
+ assert_equal(gl.glIsProgram(handle), False)
219
+
220
+ # Create/delete shader
221
+ # assert_equal(gl.glIsShader(12), False)
222
+ handle = gl.glCreateShader(gl.GL_VERTEX_SHADER)
223
+ assert_equal(gl.glIsShader(handle), True)
224
+ gl.glDeleteShader(handle)
225
+ assert_equal(gl.glIsShader(handle), False)
226
+
227
+ gl.check_error()
228
+
229
+
230
+ def _test_fbo():
231
+
232
+ w, h = 120, 130
233
+
234
+ # Create frame buffer
235
+ hframebuf = gl.glCreateFramebuffer()
236
+ gl.glBindFramebuffer(gl.GL_FRAMEBUFFER, hframebuf)
237
+
238
+ # Create render buffer (for depth)
239
+ hrenderbuf = gl.glCreateRenderbuffer()
240
+ gl.glBindRenderbuffer(gl.GL_RENDERBUFFER, hrenderbuf)
241
+ gl.glRenderbufferStorage(gl.GL_RENDERBUFFER, gl.GL_DEPTH_COMPONENT16, w, h)
242
+ gl.glFramebufferRenderbuffer(gl.GL_FRAMEBUFFER, gl.GL_DEPTH_ATTACHMENT,
243
+ gl.GL_RENDERBUFFER, hrenderbuf)
244
+
245
+ # Create texture (for color)
246
+ htex = gl.glCreateTexture()
247
+ gl.glBindTexture(gl.GL_TEXTURE_2D, htex)
248
+ gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGB, gl.GL_RGB,
249
+ gl.GL_UNSIGNED_BYTE, (h, w))
250
+ gl.glFramebufferTexture2D(gl.GL_FRAMEBUFFER, gl.GL_COLOR_ATTACHMENT0,
251
+ gl.GL_TEXTURE_2D, htex, 0)
252
+
253
+ # Check framebuffer status
254
+ status = gl.glCheckFramebufferStatus(gl.GL_FRAMEBUFFER)
255
+ assert_equal(status, gl.GL_FRAMEBUFFER_COMPLETE)
256
+
257
+ # Tests renderbuffer params
258
+ name = gl.glGetFramebufferAttachmentParameter(
259
+ gl.GL_FRAMEBUFFER, gl.GL_DEPTH_ATTACHMENT,
260
+ gl.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)
261
+ assert_equal(name, hrenderbuf)
262
+ #
263
+ width = gl.glGetRenderbufferParameter(gl.GL_RENDERBUFFER,
264
+ gl.GL_RENDERBUFFER_WIDTH)
265
+ assert_equal(width, w)
266
+
267
+ # Touch copy tex functions
268
+ gl.glBindTexture(gl.GL_TEXTURE_2D, htex)
269
+ gl.glCopyTexSubImage2D(gl.GL_TEXTURE_2D, 0, 5, 5, 5, 5, 20, 20)
270
+ gl.glCopyTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGB, 0, 0, 30, 30, 0)
271
+
272
+ gl.check_error()
273
+
274
+ # Clean up
275
+ gl.glDeleteTexture(htex)
276
+ gl.glDeleteRenderbuffer(hrenderbuf)
277
+ gl.glDeleteFramebuffer(hframebuf)
278
+
279
+ gl.check_error()
280
+
281
+
282
+ run_tests_if_main()