ColaEuphoria | Example 2? | 00:00 |
---|---|---|
ColaEuphoria | It should :/ | 00:00 |
ColaEuphoria | it should toggle the check | 00:00 |
drobilla | odd | 00:01 |
ColaEuphoria | The "window" should also subtlely light up when you mouse over it and be draggable within the master window when dragging the "title bar" | 00:02 |
drobilla | Shit, I broke something somehow | 00:03 |
*** NickLappy has quit IRC | 00:12 | |
drobilla | Okay, kind of works | 00:17 |
drobilla | The library seems generally designed to be refreshed at a high rate like a game or whatnot | 00:18 |
drobilla | So there are no mechanisms that request updates when something changes | 00:18 |
drobilla | Which is a bit shit for GUIs, but c'est la vie | 00:18 |
drobilla | Which is to say, as far as I can tell, nanogui = constantly rendering entire GUI at high rate | 00:18 |
drobilla | But it's a start, I suppose | 00:19 |
*** unclechu has quit IRC | 00:19 | |
drobilla | Aha, there we go. Highlight on hover, all widgets work, etc. Nice. | 00:22 |
ColaEuphoria | <drobilla> Which is to say, as far as I can tell, nanogui = constantly rendering entire GUI at high rate | 00:33 |
ColaEuphoria | that's how i felt when i looked at nuklear | 00:33 |
ColaEuphoria | it was especially strange because all the ui elements lagged behind the mouse | 00:33 |
drobilla | GL people have that habit | 00:33 |
drobilla | Tacking on a more refined update mechanism wouldn't be too hard | 00:34 |
drobilla | At the very least one that only draws the whole thing when *something* changes would be trivial | 00:34 |
drobilla | ColaEuphoria: So to use this in a plugin UI you'll have to use the idle callback feature. Can find an example in some existing pugl UI or other | 00:41 |
ColaEuphoria | Alright | 00:49 |
drobilla | ColaEuphoria: https://github.com/drobilla/nanogui have fun | 02:32 |
drobilla | ColaEuphoria: It's far from perfect, and has a gap or two, but mostly works | 02:33 |
drobilla | ColaEuphoria: Let me know if you want push access | 02:33 |
drobilla | As for using from a plugin, everything is driven via Pugl events, so you should just be able to set it up, and drive things like every other LV2 Pugl UI | 02:34 |
drobilla | (There is one static thing left I noticed, an icon cache, so if you use the icon stuff that needs fixing) | 02:34 |
ColaEuphoria | Wow, thanks! I didn't expect you to actually go through with this and I'm pleasantly surprised! | 02:39 |
drobilla | I was conservative, so the diff is relatively small | 02:39 |
drobilla | More crap could probably be stripped out but might as well keep the forkeyness down until there's a good reason to do otherwise | 02:40 |
ColaEuphoria | You think a small letter to the ML about this would be useful? | 02:40 |
drobilla | Several pugl updates were necessary, so you'll need the latest git | 02:40 |
ColaEuphoria | yeah i saw the pugl updates | 02:40 |
drobilla | ColaEuphoria: Probably better after actually getting a UI to work with it at least | 02:40 |
drobilla | Bob knows you're not the first to struggle with the "WTF toolkit do I use?" question, so in general, letting people know would be good, yeah | 02:41 |
drobilla | y/w | 02:41 |
ColaEuphoria | I was actually in the process of tinkering with Qt and even got a dial working | 02:43 |
drobilla | Re: earlier talk on examples, I think it'd be a good idea to make heavier examples that aren't particularly suitable for inclusion in LV2 itself as separate repos (probably on github), so this'd be a good candidate for that | 02:43 |
ColaEuphoria | I thought it was working out well, until I tried it out in Windows and had a gorillion extra runtime dlls it needed.. | 02:43 |
drobilla | Qt's alright for apps if you don't find the crazy preprocessor thing too offensive, but dead in the water for plugins | 02:44 |
* drobilla likes the gtkmm API much better, but Gtk is brutal in its own ways | 02:44 | |
drobilla | If I had all the time in the world I'd probably take this as a seed and mash it into something as close to gtkmm as possible and port my stuff | 02:44 |
drobilla | Maybe some day :) | 02:44 |
ColaEuphoria | One thing that kind of irks me is its reliance on Eigen | 02:49 |
ColaEuphoria | I'm not sure if it actually needs that | 02:49 |
ColaEuphoria | But that's pretty much a non-issue at this point | 02:49 |
drobilla | Yeah, I noticed that too | 02:56 |
drobilla | Whole library used basically for a 2D vector struct as far as I can tell | 02:56 |
ColaEuphoria | Someone probably drank the NPM Kool-Aid on taking in dependencies willy nilly | 02:57 |
drobilla | Well, let's see how it works | 02:58 |
drobilla | I'm down to mercilessley fork this thing if it turns out all right | 02:58 |
drobilla | I'm sure Eigen could be dropped in another evening | 02:59 |
drobilla | GLAD already isn't used in this version | 02:59 |
ColaEuphoria | I do NOT see any use case for needing to do heavy matrix math in a fucking widgets toolkit and if there is, it should be done by the end developer | 03:00 |
ColaEuphoria | But yeah I agree, I'd also be down to turning this into something more useful for plugin devs and shaping it for LV2 | 03:01 |
ColaEuphoria | But not too coupled to LV2, like I would still like to use this and pugl for developing a VST as well if I ever feel like going back to that | 03:02 |
drobilla | The colorwheel and serialization stuff (which I'm not sure the use of) seems to be the only thing that really uses it | 03:02 |
drobilla | Sure, coupling in that way would be a terrible idea | 03:02 |
* drobilla is all about nice self-contained things | 03:03 | |
ColaEuphoria | Pugl could be an extremely useful tool for any kind of plugin developer | 03:03 |
ColaEuphoria | It could free people from the JUCE hell | 03:03 |
drobilla | Yeah. It's forked a bit, which is unfortunate, but the general idea of something with the scope of Pugl is great | 03:04 |
drobilla | Actually having a solid solution to the general problem of portable plugin UIs would win some people for sure | 03:05 |
ColaEuphoria | I wonder if Calf changed their UI, if the Renoise people would reconsider adding LV2 support :^) | 03:06 |
ColaEuphoria | Because if I remember, their whole beef was the UI situation | 03:06 |
drobilla | Sure. The current Gtk (and to a lesser extent Qt) thing is basically fundamentally incompatible with binary releases on the big proprietary platforms | 03:07 |
drobilla | It was expedient | 03:07 |
drobilla | (Like so much of LV2...) | 03:07 |
drobilla | Heh, Eigen is ~128KLOC | 03:08 |
drobilla | Why do I have a feeling this is why nanogui takes forever and a day to compile | 03:08 |
ColaEuphoria | ugh | 03:08 |
ColaEuphoria | Delicate Synth uses matrices and actual matrix math | 03:09 |
ColaEuphoria | you know how I handled that? | 03:09 |
ColaEuphoria | a 2D array... | 03:09 |
ColaEuphoria | and a function for matrix multiplication | 03:09 |
ColaEuphoria | I wonder if I could take out the Eigen dependency myself | 03:10 |
ColaEuphoria | I'd have to see exactly what it's using it for | 03:10 |
ColaEuphoria | and what matrix operations it's doing | 03:10 |
drobilla | Assuming this serialization stuff isn't actually needed, not much | 03:11 |
drobilla | Bunch of utilities that aren't used at all internally | 03:11 |
drobilla | Also shader stuff, which might be the tricky bit | 03:13 |
ColaEuphoria | Shader code could be hardcoded in | 03:14 |
ColaEuphoria | Actually, which part are you talking about? The nanogui level? or the nanovg level? | 03:14 |
drobilla | Well, it has a wrapper which uses eigen stuff to set transformation matrix and whatnot | 03:15 |
drobilla | nanogui | 03:15 |
drobilla | does nanovg use it too? | 03:15 |
ColaEuphoria | I'm not sure | 03:15 |
ColaEuphoria | nanovg has a nice premake script :) | 03:15 |
drobilla | I don't think so, and grep agrees | 03:15 |
drobilla | I get that shaders are how you do things these days, but I'm graphics dumb and don't particularly care to bother with it all | 03:16 |
drobilla | This is where the Cairo desire comes from. Any idiot can understand that and you don't need to put code in strings :) | 03:17 |
ColaEuphoria | shaders are usually compiled from the start | 03:17 |
ColaEuphoria | and in uis i don't think ever change | 03:17 |
ColaEuphoria | also in uis the TF matrices are easier to deal with since it isn't doing any perspective projections or anything | 03:18 |
ColaEuphoria | mainly just translation, if anything | 03:18 |
ColaEuphoria | *maybe* rotation, if you want to get fancy | 03:18 |
ColaEuphoria | scaling probably | 03:18 |
drobilla | Sure | 03:19 |
drobilla | It's not heroic but it's a bit of work | 03:19 |
drobilla | Which I can't do because the shader crap (e.g. ImageView) doesn't work for me in the first place :) | 03:19 |
ColaEuphoria | well | 03:19 |
ColaEuphoria | all the logical equations and whatnot are supposedly already there | 03:20 |
ColaEuphoria | it's just that it's calling eigen to do the work | 03:20 |
ColaEuphoria | oops | 03:23 |
ColaEuphoria | i forgot to reinstall the new pugl before make-ing | 03:23 |
ColaEuphoria | I wonder if one could add pugl to be downloaded with the git --recurse | 03:24 |
ColaEuphoria | and store it in ./ext | 03:24 |
ColaEuphoria | like it's doing with nanovg already | 03:24 |
*** falktx` has quit IRC | 03:38 | |
drobilla | You could | 03:47 |
drobilla | I didn't want to bother figuring out how to make cmake build it | 03:47 |
ColaEuphoria | understandable :) | 03:47 |
ColaEuphoria | drobilla, I see so much potential here | 04:35 |
ColaEuphoria | http://pastebin.com/8gbgZkZj | 04:35 |
ColaEuphoria | Does "NanoPugl" sound like a good name? | 04:36 |
*** falktx|work has joined #lv2 | 07:13 | |
*** falktx|work is now known as falktx | 07:13 | |
*** sigma6 has joined #lv2 | 07:16 | |
*** deva has joined #lv2 | 07:24 | |
*** falktx` has joined #lv2 | 07:35 | |
*** falktx is now known as falktx|work | 07:36 | |
*** oofus_lt has joined #lv2 | 07:53 | |
*** ricardocrudo has joined #lv2 | 08:19 | |
rgareus | drobilla: what's the "PU" in pugl? portable u*? PlUgin ? | 08:24 |
*** trebmuh has joined #lv2 | 08:25 | |
ColaEuphoria | rgareus, you should know by now the arbitrary nature in which drobilla names his projects :) | 08:26 |
ColaEuphoria | Possibly "portable/universal gl" is what I'm getting out of it | 08:27 |
rgareus | ColaEuphoria: I suppose | 08:28 |
rgareus | then again: jalv (jack lv2) lilv (lib lv2) , ingen (pun on engine) are not really acronyms, so who knows. | 08:32 |
rgareus | well, maybe.. one can use multiple letters of one word, depending on whom you ask :) | 08:33 |
*** sigma6 has quit IRC | 09:31 | |
*** edogawa has joined #lv2 | 09:46 | |
*** dsheeler has quit IRC | 10:15 | |
*** dsheeler has joined #lv2 | 10:25 | |
*** falktx` has quit IRC | 11:07 | |
*** deva has quit IRC | 11:07 | |
*** falktx` has joined #lv2 | 11:09 | |
*** deva has joined #lv2 | 11:09 | |
*** rgareus is now known as rgareus|afk | 11:49 | |
*** sigma6 has joined #lv2 | 13:04 | |
*** sigma6 has left #lv2 | 14:20 | |
drobilla | It's kinda sorta PlUgin GL | 14:53 |
*** oofus_lt has quit IRC | 14:54 | |
drobilla | They are usually kind of portmanteaus, selecting 4 letters in order to make a uniqueish pronounceable word. JAck LV2, LIghtweight LV2, SErialize RDf, StOre RDf, SeRialize ATOM, etc | 14:56 |
drobilla | Pugl has gotten a bit stale since you can use it without GL at all, I suppose | 14:56 |
drobilla | Because most of my libraries are C (no namespacing), long names are irritating | 14:58 |
*** rgareus|afk is now known as rgareus | 14:58 | |
rgareus | drobilla: personally I think adding optional cairo is a step backwards -- first step towards feature bloat, kitchen sinkyness | 14:59 |
drobilla | I know you do | 14:59 |
drobilla | Because you already added that mess to your own code so you don't care | 14:59 |
drobilla | The entire point of the library is to avoid irritating mess in user code | 15:00 |
drobilla | So you are wrong :P | 15:00 |
rgareus | I'd have preferred a a thin example wrapper around pugl. | 15:01 |
rgareus | but whatever | 15:01 |
drobilla | GL is often troublesome. Not having to deal with it whatsoever if you just want to write a UI in Cairo is nice | 15:03 |
rgareus | that I agree with | 15:04 |
drobilla | I care about niceness of user code over hand-wavey notions of "bloat", assuming the latter isn't too onerous | 15:04 |
drobilla | I would like to factor it out more, but that would be more bloatey, really | 15:07 |
*** dsheeler has quit IRC | 15:08 | |
drobilla | Anyway, it's not a slippery slope to anything. Anything outside the mandate of "minimal access to events and a drawing context" is very definitely never going in, and IMO there's exactly two reasonable choices of "drawing context" | 15:14 |
drobilla | Though the nanogui port has me wondering if time counts (missing thing that glwf provides) | 15:15 |
drobilla | The main loop currently has a whole thread whose only purpose is calling puglPostRedisplay, which is kind of silly | 15:15 |
drobilla | puglWaitForEvent having a timeout + a way to get elapsed time would eliminate that | 15:16 |
drobilla | The former seems good, the latter perhaps kitchen sinkeyness | 15:17 |
rgareus | drobilla: event-loop thread? does not sound like that's portable. (at least on OSX all things GUI must be in Thread 1, so it'll have to be idle-callback) | 15:18 |
rgareus | a dedicated 2nd event loop with X11 isn't exactly robust, either. | 15:18 |
drobilla | rgareus: Yeah, there's a hilarious rant in the nanogui code about dealing with this in OSX by swapping contexts with the main thread or some such, but doesn't seem to be true anymore | 15:20 |
rgareus | and on windows you'll have endless fun with concurrency issues: GL context with a multiple plugin GUIs. thread X calls wglMakeCurrent() is preemted thread Y calls wglMakeCurrent () ... | 15:20 |
rgareus | it's fine if it's separate processes, but not one process with threads (plugin GUIs) | 15:21 |
drobilla | I thoroughly agree in general that threads in UI drawing/event anything is an extremely terrible idea 99.999999% of the time | 15:21 |
rgareus | idle callbacks are fine. the host serializes it | 15:21 |
drobilla | In this case puglPostRedisplay just sets a flag so it doesn't matter | 15:22 |
drobilla | But wait for events with a timeout really seems like a thing that should exist | 15:22 |
rgareus | yeah animations kind suck, and the workarounds to make it possible in some plugin UIs are horrible. Addictive Drums for example can block the entire event loop on OSX. | 15:24 |
rgareus | Still, idle-callbacks are fine for animations. | 15:24 |
rgareus | just have a timer set a flag (needsDisplay) and the next Idle will do the expose | 15:25 |
rgareus | a better option is to have v-blank trigger events (also usually main thread) | 15:26 |
drobilla | Speaking of bloat I kind of think the GLUT event callbacks are bloat now. Different function prototypes for events are for toys and make dispatch mega annoying, events are just better. It would remove a ton of boilerplate | 15:27 |
drobilla | rgareus: Yeah, with the idle callback (where you can't block forever anyway) it's fine. Only really a thing for apps with a main loop | 15:27 |
drobilla | Re: name, I wouldn't bother changing it until/unless this evolves into its own thing. It's still very close to nanogui | 15:52 |
*** dsheeler has joined #lv2 | 15:54 | |
*** drobilla has quit IRC | 15:58 | |
*** drobilla has joined #lv2 | 16:35 | |
*** ssj71 has joined #lv2 | 16:42 | |
*** unclechu has joined #lv2 | 16:54 | |
*** ricardocrudo has quit IRC | 17:02 | |
*** falktx|work has quit IRC | 17:06 | |
*** unclechu_ has joined #lv2 | 17:08 | |
*** unclechu has quit IRC | 17:11 | |
*** NickSB2_ has quit IRC | 19:16 | |
*** rncbc has joined #lv2 | 19:30 | |
*** ssj71 has quit IRC | 20:12 | |
*** deva has quit IRC | 20:32 | |
*** drobilla has quit IRC | 21:08 | |
*** dsheeler has quit IRC | 21:17 | |
*** dsheeler has joined #lv2 | 23:34 | |
*** edogawa has quit IRC | 23:47 |
Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!