aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--externals/grill/flext/changes.txt6
-rw-r--r--externals/grill/flext/source/flbase.cpp20
-rw-r--r--externals/grill/flext/source/flbase.h3
-rwxr-xr-xexternals/grill/flext/source/flqueue.cpp6
4 files changed, 31 insertions, 4 deletions
diff --git a/externals/grill/flext/changes.txt b/externals/grill/flext/changes.txt
index e8133f37..791b1025 100644
--- a/externals/grill/flext/changes.txt
+++ b/externals/grill/flext/changes.txt
@@ -21,6 +21,7 @@ Version history:
- appended lacking ~ for tilde object help patches
- uniform STL container for all kinds of attribute, method, class handling
- support for MinGW
+- added flext_obj::CanvasArgs
0.4.5:
- added some more SIMD functions
@@ -284,14 +285,15 @@ TODO list:
general:
- documentation
- add log messages for debugging version
-- use PD's t_float and t_int types (or comparable for 32-Bit safety)
+- use PD's t_float and t_int types (or comparable for 32-bit safety)
- add double handlers
- add signal in/out connection query function
- support for Max qelem style
-- unify STL containers so that there's only one code template
+- PD: with DSP objects all float messages to left input are currently converted to signal
+ there should be a way to avoid this
bugs:
diff --git a/externals/grill/flext/source/flbase.cpp b/externals/grill/flext/source/flbase.cpp
index 2fd25e8e..9b2d5506 100644
--- a/externals/grill/flext/source/flbase.cpp
+++ b/externals/grill/flext/source/flbase.cpp
@@ -120,3 +120,23 @@ const t_symbol *flext_obj::GetParamSym(const t_symbol *sym,t_canvas *c)
return sym;
}
+
+#if FLEXT_SYS == FLEXT_SYS_PD
+// this declaration is missing in m_pd.h (0.37-0 and -1)
+extern "C" void canvas_getargs(int *argcp, t_atom **argvp);
+#endif
+
+
+void flext_obj::CanvasArgs(AtomList &args) const
+{
+#if FLEXT_SYS == FLEXT_SYS_PD
+ int argc;
+ t_atom *argv;
+ canvas_getargs(&argc,&argv);
+ args(argc);
+ for(int i = 0; i < argc; ++i) args[i] = argv[i];
+#else
+ #pragma message("Not implemented")
+ args(0);
+#endif
+}
diff --git a/externals/grill/flext/source/flbase.h b/externals/grill/flext/source/flbase.h
index 594bfbfc..3c190c99 100644
--- a/externals/grill/flext/source/flbase.h
+++ b/externals/grill/flext/source/flbase.h
@@ -260,6 +260,9 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
//! Convert $0 or #0 symbol into appropriate value
static const t_symbol *GetParamSym(const t_symbol *s,t_canvas *c);
+ //! Get the canvas arguments
+ void CanvasArgs(AtomList &args) const;
+
//! @} FLEXT_O_INTERNAL
//! @} FLEXT_OBJCLASS
diff --git a/externals/grill/flext/source/flqueue.cpp b/externals/grill/flext/source/flqueue.cpp
index 747c4cc8..aaf82fef 100755
--- a/externals/grill/flext/source/flqueue.cpp
+++ b/externals/grill/flext/source/flqueue.cpp
@@ -84,8 +84,10 @@ static flext::ThrMutex qmutex;
static void QWork(bool qlock,bool syslock)
{
for(;;) {
- // since qcnt can only be increased from any other function than QWork
- // qc will be a minimum guaranteed number of present queue elements
+ // Since qcnt can only be increased from any other function than QWork
+ // qc will be a minimum guaranteed number of present queue elements.
+ // On the other hand, if new queue elements are added by the methods called
+ // in the loop, these will be sent in the next tick to avoid recursion overflow.
int qc = qcnt;
if(!qc) break;