diff --git a/CMakeLists.txt b/CMakeLists.txt index 616317b..1e4df0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ set(ENGINE_SOURCES src/Engine/Operator/OperatorTable.cpp src/Engine/Operator/Context.cpp src/Engine/Parameter/Template.cpp + src/Engine/Parameter/Parameter.cpp src/Engine/Network/NetworkManager.cpp ) diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index ce0c313..b5460b4 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -3,6 +3,8 @@ #include "Engine/Network/NetworkManager.h" #include #include "Engine/Operator/Context.h" +#include "Engine/Parameter/Parameter.h" +#include "Engine/Parameter/Template.h" #include using namespace enzo; @@ -23,12 +25,27 @@ void enzo::nt::connectOperators(enzo::nt::OpId inputOpId, unsigned int inputInde outputOp.addInputConnection(newConnection); } -nt::GeometryOperator::GeometryOperator(enzo::nt::OpId opId, op::OpInfo opinfo) -: opId_{opId}, opDef_(opinfo.ctorFunc(opId)) +nt::GeometryOperator::GeometryOperator(enzo::nt::OpId opId, op::OpInfo opInfo) +: opId_{opId}, opInfo_{opInfo}, opDef_(opInfo.ctorFunc(opId)) { // TODO: drive by geometry definition maxInputs_=4; maxOutputs_=4; + + initParameters(); +} + +void nt::GeometryOperator::initParameters() +{ + for(const prm::Template* t = opInfo_.templates; t->isValid(); ++t) + { + std::cout << "name: " << t->getName() << "\n"; + // create parameter + parameters_.push_back( + std::make_shared(*t) + ); + } + } void enzo::nt::GeometryOperator::cookOp(op::Context context) diff --git a/src/Engine/Operator/GeometryOperator.h b/src/Engine/Operator/GeometryOperator.h index a5878cb..398a5b6 100644 --- a/src/Engine/Operator/GeometryOperator.h +++ b/src/Engine/Operator/GeometryOperator.h @@ -2,6 +2,7 @@ #include "Engine/Operator/GeometryConnection.h" #include "Engine/Operator/OpInfo.h" #include "Engine/Operator/GeometryOpDef.h" +#include "Engine/Parameter/Parameter.h" #include "Engine/Types.h" #include #include @@ -12,7 +13,7 @@ void connectOperators(enzo::nt::OpId inputOpId, unsigned int inputIndex, enzo::n class GeometryOperator { public: - GeometryOperator(enzo::nt::OpId opId, op::OpInfo opinfo); + GeometryOperator(enzo::nt::OpId opId, op::OpInfo opInfo); // disable copying GeometryOperator(const GeometryOperator&) = delete; @@ -33,12 +34,16 @@ public: private: + void initParameters(); + // TODO: avoid duplicate connections std::vector> inputConnections_; std::vector> outputConnections_; + std::vector> parameters_; unsigned int maxInputs_; unsigned int maxOutputs_; std::unique_ptr opDef_; enzo::nt::OpId opId_; + enzo::op::OpInfo opInfo_; }; } diff --git a/src/Engine/Operator/OpInfo.h b/src/Engine/Operator/OpInfo.h index aed01a4..1fea8fe 100644 --- a/src/Engine/Operator/OpInfo.h +++ b/src/Engine/Operator/OpInfo.h @@ -11,5 +11,6 @@ struct OpInfo std::string displayName; enzo::nt::opConstructor ctorFunc; enzo::prm::Template* templates; + size_t templatesSize; }; } diff --git a/src/Engine/Operator/OperatorTable.cpp b/src/Engine/Operator/OperatorTable.cpp index 948eb5c..2e49156 100644 --- a/src/Engine/Operator/OperatorTable.cpp +++ b/src/Engine/Operator/OperatorTable.cpp @@ -3,15 +3,17 @@ #include -void enzo::op::OperatorTable::addOperator(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template* templates) +void enzo::op::OperatorTable::addOperator(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template templates[]) { std::cout << "OPERATOR TABLE ADDED\n"; std::cout << "adding operator: " << displayName << "\n"; + std::cout << "tempalate size: " << sizeof(templates) << "\n"; enzo::op::OpInfo info { internalName, displayName, ctorFunc, - templates + templates, + sizeof(*templates) }; opInfoStore_.push_back(info); diff --git a/src/Engine/Operator/OperatorTable.h b/src/Engine/Operator/OperatorTable.h index a59655d..aef66c2 100644 --- a/src/Engine/Operator/OperatorTable.h +++ b/src/Engine/Operator/OperatorTable.h @@ -13,7 +13,7 @@ namespace enzo::op class BOOST_SYMBOL_EXPORT OperatorTable { public: - static void addOperator(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template* templates); + static void addOperator(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template templates[]); static nt::opConstructor getOpConstructor(std::string name); static const std::optional getOpInfo(std::string name); static std::vector getData(); @@ -22,6 +22,6 @@ public: private: static std::vector opInfoStore_; }; -using addOperatorPtr = void (*)(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template* templateList); +using addOperatorPtr = void (*)(const char* internalName, const char* displayName, nt::opConstructor ctorFunc, prm::Template templateList[]); } diff --git a/src/Engine/Parameter/FloatParm.cpp b/src/Engine/Parameter/FloatParm.cpp deleted file mode 100644 index 5affc8d..0000000 --- a/src/Engine/Parameter/FloatParm.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "Engine/Parameter/FloatParm.h" - - -enzo::prm::FloatParm::FloatParm(Template prmTemplate) -: template_{prmTemplate} -{ -} diff --git a/src/Engine/Parameter/FloatParm.h b/src/Engine/Parameter/FloatParm.h deleted file mode 100644 index 3449e08..0000000 --- a/src/Engine/Parameter/FloatParm.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include "Engine/Parameter/Template.h" -#include "Engine/Types.h" - -namespace enzo::prm -{ -class FloatParm -{ -public: - FloatParm(Template prmTemplate); - inline bt::floatT getValue() const {return value_;} - inline void setValue(bt::floatT value) {value_ = value;} -private: - Template template_; - bt::floatT value_ = 0; - -}; -} diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp new file mode 100644 index 0000000..3aa0935 --- /dev/null +++ b/src/Engine/Parameter/Parameter.cpp @@ -0,0 +1,9 @@ +#include "Engine/Parameter/Parameter.h" +#include + + +enzo::prm::Parameter::Parameter(Template prmTemplate) +: template_{prmTemplate} +{ + std::cout << "created new parameter: " << prmTemplate.getName() << "\n"; +} diff --git a/src/Engine/Parameter/Parameter.h b/src/Engine/Parameter/Parameter.h new file mode 100644 index 0000000..ab26c8f --- /dev/null +++ b/src/Engine/Parameter/Parameter.h @@ -0,0 +1,18 @@ +#pragma once +#include "Engine/Parameter/Template.h" +#include "Engine/Types.h" + +namespace enzo::prm +{ +class Parameter +{ +public: + Parameter(Template prmTemplate); + inline bt::floatT evalFloat() const {return floatValue_;} + inline void setFloat(bt::floatT value) {floatValue_ = value;} +private: + Template template_; + bt::floatT floatValue_ = 0; + +}; +} diff --git a/src/Engine/Parameter/Template.cpp b/src/Engine/Parameter/Template.cpp index 34f9f79..2768e1e 100644 --- a/src/Engine/Parameter/Template.cpp +++ b/src/Engine/Parameter/Template.cpp @@ -6,3 +6,20 @@ enzo::prm::Template::Template(enzo::prm::Type type, const char* name) { } + +enzo::prm::Template::Template() +{ + +} + +bool enzo::prm::Template::isValid() const +{ + return name_!=nullptr; + +} + +const char* enzo::prm::Template::getName() const +{ + return name_; +} + diff --git a/src/Engine/Parameter/Template.h b/src/Engine/Parameter/Template.h index cddc30a..6e69d38 100644 --- a/src/Engine/Parameter/Template.h +++ b/src/Engine/Parameter/Template.h @@ -8,6 +8,9 @@ class Template { public: Template(enzo::prm::Type type, const char* name); + Template(); + const char* getName() const; + bool isValid() const; private: enzo::prm::Type type_; // TODO: make a class that holds token and name @@ -15,5 +18,7 @@ private: }; +inline enzo::prm::Template Terminator = enzo::prm::Template(); + } diff --git a/src/OpDefs/GopHouse.cpp b/src/OpDefs/GopHouse.cpp index 89eace7..eb53ded 100644 --- a/src/OpDefs/GopHouse.cpp +++ b/src/OpDefs/GopHouse.cpp @@ -79,4 +79,7 @@ void GOP_house::cookOp(enzo::op::Context context) // } } -enzo::prm::Template GOP_house::parameterList[] = {}; +enzo::prm::Template GOP_house::parameterList[] = +{ + enzo::prm::Terminator +}; diff --git a/src/OpDefs/GopTransform.cpp b/src/OpDefs/GopTransform.cpp index 0ff36af..cbca302 100644 --- a/src/OpDefs/GopTransform.cpp +++ b/src/OpDefs/GopTransform.cpp @@ -1,5 +1,6 @@ #include "OpDefs/GopTransform.hpp" #include "Engine/Operator/AttributeHandle.h" +#include "Engine/Parameter/Template.h" GopTransform::GopTransform(enzo::nt::OpId opId) : enzo::nt::GeometryOpDef(opId) @@ -40,6 +41,7 @@ void GopTransform::cookOp(enzo::op::Context context) enzo::prm::Template GopTransform::parameterList[] = { enzo::prm::Template(enzo::prm::Type::FLOAT, "Test"), - enzo::prm::Template(enzo::prm::Type::FLOAT, "Test2") + enzo::prm::Template(enzo::prm::Type::FLOAT, "Test2"), + enzo::prm::Terminator };