| 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!