Global Cables Don't Work when compiled
-
mmm, the people in the Audio Programmer Discord aren't recommending it XD
It does look like a big amount of pain -
@griffinboy What about the yup framework as an alternative? I imagine the integration to HISE would be somewhat complicated as well.
https://github.com/kunitoki/yup
I have been meaning to get my hands dirty with it but I have only scratched the surface so far.
I definitely like the idea of a High-Performance Panel however, it would let us experiment with more advanced graphics without requiring a complete overhaul of HISE's graphic's framework.
-
@griffinboy yeah that was also my initial assessment.
-
They said it would be better to overhaul using bgfx directly xD
Yeah, not a small task probably. Ah well. -
-
@Christoph-Hart said in Global Cables Don't Work when compiled:
you are correct Global Cables DONT work in compiled scriptnode
...
I think the issue that @griffinboy is having is if you load these networks into another scriptnode network (instead of loading the compiled effect into a hardcoded effect), but that's another problem and (potentially exotic edge case which you can easily work around).
I don't understand why it would be "exotic edge case" here, and how you can work around this... Seems rather a normal workflow to me...
I have a compiled node in a network, that is (I think) busy enough to justify a compilation too...
And then my global cables won't work...What can I do?
-
@Christoph-Hart And aside of this we still have some nodes like
cable_exprthat are requiring the network to be compiled for the plugin to export.I could transform it into a C++ node with another
global_cable, but since it prevents the network to be compilable...This causes quite annoying frictions
-
@ustk can you rearrange your setup so that the global cables are in the outermost network that you compile?
I haven‘t checked / tested the global cable initialisation in C++ nodes to be recursive so it might fail if you try to wrap another node that uses a global cable. Can you check with a simple two level nest test if that‘s the case?
-
@Christoph-Hart said in Global Cables Don't Work when compiled:
in the outermost network that you compile?
Sorry but I don't understand. My C++ nodes are in the middle of the graph.
Do you mean in the root container?
I tested anyway and same thing, the hardcoded FX rejects it.

-
@ustk I need a dumbed down representation of the issue so I can reproduce it. My theory is that if you use a C++ node that connects to a global cable internally then this will not survive being wrapped into a network and then recompiled and loaded into a hardcoded FX?
-
@Christoph-Hart Yes exactly this, it doesn't survive. i tested with an empty network too (just my C++ node)
-
@ustk ah OK I could reproduce that. The fix is actually not in the HISE code (yet), but the codegen is missing a property of the C++ node so that it knows to add the glue code to connect the internal cables. The solution requires two steps from you:
- If you want to use a global cable inside a nested C++ node (a C++ node that is compiled and then loaded into a DSP network that is then again compiled, you will need to add the
IsFixRuntimeTargetproperty to thenode_properties.jsonfile. This tells the code generator that the node wants to be notified of global cable assignments (this information is otherwise lost on the layer of the C++ node).
{ "internal_cpp_node": [ "IsPolyphonic", "IsFixRuntimeTarget", "AllowPolyphonic" ] }- However this is only part one of the solution as the code generator will then assume that the C++ node has a second template argument (like any other native HISE node that requires a runtime connection). So in order to compile the generated C++ code of the DSP network you will have to add a second dummy template argument to your external node:
// Use this enum to refer to the cables, eg. this->setGlobalCableValue<GlobalCables::internal_cable>(0.4) enum class GlobalCables { internal_cable = 0 }; // Subclass your node from this using cable_manager_t = routing::global_cable_cpp_manager<SN_GLOBAL_CABLE(776606779)>; // ==========================| The node class with all required callbacks |========================== // instead of just this: //template <int NV> struct internal_cpp_node: public data_base // add this template argument template <int NV, typename UnusedHash=runtime_target::indexers::none> struct internal_cpp_node: public data::base, public cable_manager_tWith these two steps, the global cable connections survives the nested C++ / DSP network structure, so please try if that also solves your actual project. If that's the case, I'll update the documentation accordingly.
- If you want to use a global cable inside a nested C++ node (a C++ node that is compiled and then loaded into a DSP network that is then again compiled, you will need to add the
