[DEV] correct new API

This commit is contained in:
Edouard DUPIN 2015-12-02 21:54:55 +01:00
parent a776582367
commit 4496e42c22
22 changed files with 93 additions and 121 deletions

View File

@ -432,7 +432,7 @@ etk::Color<uint8_t,4> esvg::Base::parseColor(const std::string& _inputData) {
* @param[in] _element standart XML node * @param[in] _element standart XML node
* @return true if no problem arrived * @return true if no problem arrived
*/ */
bool esvg::Base::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Base::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
SVG_ERROR("NOT IMPLEMENTED"); SVG_ERROR("NOT IMPLEMENTED");
_sizeMax.setValue(0,0); _sizeMax.setValue(0,0);
return false; return false;

View File

@ -67,7 +67,7 @@ namespace esvg {
Base() {}; Base() {};
Base(PaintState _parentPaintState); Base(PaintState _parentPaintState);
virtual ~Base() { }; virtual ~Base() { };
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level=1); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level=1);

View File

@ -22,7 +22,7 @@ esvg::Circle::~Circle() {
} }
bool esvg::Circle::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Circle::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
m_radius = 0.0; m_radius = 0.0;
m_position.setValue(0,0); m_position.setValue(0,0);
if (_element == nullptr) { if (_element == nullptr) {

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Circle(PaintState _parentPaintState); Circle(PaintState _parentPaintState);
~Circle(); ~Circle();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -22,7 +22,7 @@ esvg::Ellipse::~Ellipse() {
} }
bool esvg::Ellipse::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Ellipse::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
if (_element == nullptr) { if (_element == nullptr) {
return false; return false;
} }

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Ellipse(PaintState _parentPaintState); Ellipse(PaintState _parentPaintState);
~Ellipse(); ~Ellipse();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -31,7 +31,7 @@ esvg::Group::~Group() {
} }
bool esvg::Group::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Group::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
if (_element == nullptr) { if (_element == nullptr) {
return false; return false;
} }
@ -84,7 +84,7 @@ bool esvg::Group::parse(const std::shared_ptr<exml::Element>& _element, mat2& _p
if (elementParser == nullptr) { if (elementParser == nullptr) {
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" allocation error or not supported ..."); SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" allocation error or not supported ...");
} else { } else {
if (false == elementParser->parse(child, m_transformMatrix, tmpPos)) { if (false == elementParser->parseXML(child, m_transformMatrix, tmpPos)) {
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR"); SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR");
delete(elementParser); delete(elementParser);
elementParser = nullptr; elementParser = nullptr;

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Group(PaintState _parentPaintState); Group(PaintState _parentPaintState);
~Group(); ~Group();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t spacing); virtual void display(int32_t spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -23,7 +23,7 @@ esvg::Line::~Line() {
} }
bool esvg::Line::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Line::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
// line must have a minimum size... // line must have a minimum size...
m_paint.strokeWidth = 1; m_paint.strokeWidth = 1;
if (_element == nullptr) { if (_element == nullptr) {

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Line(PaintState _parentPaintState); Line(PaintState _parentPaintState);
~Line(); ~Line();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -62,7 +62,7 @@ const char * extractCmd(const char* _input, char& _cmd, std::vector<float>& _out
return outputPointer; return outputPointer;
} }
bool esvg::Path::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Path::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
if (_element == nullptr) { if (_element == nullptr) {
return false; return false;
} }

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Path(PaintState _parentPaintState); Path(PaintState _parentPaintState);
~Path(); ~Path();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -22,7 +22,7 @@ esvg::Polygon::~Polygon() {
} }
bool esvg::Polygon::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Polygon::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
if (_element == nullptr) { if (_element == nullptr) {
return false; return false;
} }

View File

@ -26,7 +26,7 @@ namespace esvg {
public: public:
Polygon(PaintState parentPaintState); Polygon(PaintState parentPaintState);
~Polygon(); ~Polygon();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -22,7 +22,7 @@ esvg::Polyline::~Polyline() {
} }
bool esvg::Polyline::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Polyline::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
// line must have a minimum size... // line must have a minimum size...
m_paint.strokeWidth = 1; m_paint.strokeWidth = 1;
if (_element == nullptr) { if (_element == nullptr) {

View File

@ -19,7 +19,7 @@ namespace esvg {
public: public:
Polyline(PaintState _parentPaintState); Polyline(PaintState _parentPaintState);
~Polyline(); ~Polyline();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -25,7 +25,7 @@ esvg::Rectangle::~Rectangle() {
} }
bool esvg::Rectangle::parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) { bool esvg::Rectangle::parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax) {
if (_element == nullptr) { if (_element == nullptr) {
return false; return false;
} }

View File

@ -20,7 +20,7 @@ namespace esvg {
public: public:
Rectangle(PaintState _parentPaintState); Rectangle(PaintState _parentPaintState);
~Rectangle(); ~Rectangle();
virtual bool parse(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax); virtual bool parseXML(const std::shared_ptr<exml::Element>& _element, mat2& _parentTrans, vec2& _sizeMax);
virtual void display(int32_t _spacing); virtual void display(int32_t _spacing);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level); virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level);
}; };

View File

@ -389,15 +389,12 @@ const ivec2& esvg::Renderer::getSize() const {
return m_size; return m_size;
} }
std::vector<etk::Color<float,4>> esvg::Renderer::getData() {
uint8_t* esvg::Renderer::getDataPointer() { return m_buffer;
return nullptr; //&m_buffer[0]; }
};
uint32_t esvg::Renderer::getDataSize() const {
return m_buffer.size();
};
void esvg::Renderer::setInterpolationRecurtionMax(int32_t _value) { void esvg::Renderer::setInterpolationRecurtionMax(int32_t _value) {
m_interpolationRecurtionMax = std::avg(1, _value, 200); m_interpolationRecurtionMax = std::avg(1, _value, 200);

View File

@ -32,8 +32,7 @@ namespace esvg {
protected: protected:
std::vector<etk::Color<float,4>> m_buffer; std::vector<etk::Color<float,4>> m_buffer;
public: public:
uint8_t* getDataPointer(); std::vector<etk::Color<float,4>> getData();
uint32_t getDataSize() const;
protected: protected:
int32_t m_interpolationRecurtionMax; int32_t m_interpolationRecurtionMax;
public: public:

View File

@ -23,8 +23,7 @@
#define __class__ "Document" #define __class__ "Document"
esvg::Document::Document() : esvg::Document::Document() {
m_renderedElement(nullptr) {
m_fileName = ""; m_fileName = "";
m_version = "0.0"; m_version = "0.0";
m_loadOK = false; m_loadOK = false;
@ -32,8 +31,7 @@ esvg::Document::Document() :
} }
esvg::Document::~Document() { esvg::Document::~Document() {
delete(m_renderedElement);
m_renderedElement = nullptr;
} }
@ -48,8 +46,7 @@ void esvg::Document::displayDebug() {
} }
void esvg::Document::draw(esvg::Renderer& _myRenderer, mat2& _basicTrans) void esvg::Document::draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level) {
{
for (int32_t iii=0; iii<m_subElementList.size(); iii++) { for (int32_t iii=0; iii<m_subElementList.size(); iii++) {
if (m_subElementList[iii] != nullptr) { if (m_subElementList[iii] != nullptr) {
m_subElementList[iii]->draw(_myRenderer, _basicTrans); m_subElementList[iii]->draw(_myRenderer, _basicTrans);
@ -57,105 +54,83 @@ void esvg::Document::draw(esvg::Renderer& _myRenderer, mat2& _basicTrans)
} }
} }
void esvg::Document::generateTestFile()
{
int32_t sizeX = m_size.x();
if (sizeX == 0) {
sizeX = 64;
}
int32_t sizeY = m_size.y();
if (sizeY == 0) {
sizeY = 64;
}
delete(m_renderedElement);
m_renderedElement = nullptr;
m_renderedElement = new esvg::Renderer(ivec2(sizeX, sizeY));
// create the first element matrix modification ...
mat2 basicTrans;
//basicTrans *= etk::mat2Translate(vec2(-g_base_dx, -g_base_dy));
//basicTrans *= etk::mat2Scale(vec2(2, 2));
//basicTrans *= etk::mat2Rotate(vec2(g_angle));
//basicTrans *= etk::mat2Skew(vec2(2.0, 5.0));
//basicTrans *= etk::mat2Translate(vec2(width*0.3, height/2));
//basicTrans *= etk::mat2Translate(vec2(width/3, height/3));
draw(*m_renderedElement, basicTrans);
std::string tmpFileOut = "yyy_out_";
tmpFileOut += m_fileName;
tmpFileOut += ".ppm";
m_renderedElement->writePPM(tmpFileOut);
}
// FOR TEST only ... // FOR TEST only ...
void esvg::Document::generateAnImage(const ivec2& _size, const std::string& _fileName, bool _visualDebug) { void esvg::Document::generateAnImage(const ivec2& _size, const std::string& _fileName, bool _visualDebug) {
int32_t sizeX = _size.x(); ivec2 sizeRender = _size;
if (sizeX == 0) { if (sizeRender.x() <= 0) {
SVG_ERROR("SizeX == 0 ==> set 64"); sizeRender.setX(m_size.x());
sizeX = 64;
} }
int32_t sizeY = _size.y(); if (sizeRender.y() <= 0) {
if (sizeY == 0) { sizeRender.setY(m_size.y());
SVG_ERROR("SizeY == 0 ==> set 64");
sizeY = 64;
} }
SVG_DEBUG("Generate size (" << sizeX << "," << sizeY << ")"); SVG_DEBUG("Generate size " << sizeRender);
delete(m_renderedElement);
m_renderedElement = nullptr;
m_renderedElement = new esvg::Renderer(ivec2(sizeX, sizeY), _visualDebug); std::shared_ptr<esvg::Renderer> renderedElement = std::make_shared<esvg::Renderer>(sizeRender, _visualDebug);
// create the first element matrix modification ... // create the first element matrix modification ...
mat2 basicTrans; mat2 basicTrans;
//basicTrans *= etk::mat2Translate(vec2(-g_base_dx, -g_base_dy)); basicTrans *= etk::mat2Scale(vec2(sizeRender.x()/m_size.x(), sizeRender.y()/m_size.y()));
basicTrans *= etk::mat2Scale(vec2(sizeX/m_size.x(), sizeY/m_size.y()));
//basicTrans *= etk::mat2Rotate(g_angle);// + agg::pi); draw(*renderedElement, basicTrans);
//basicTrans *= etk::mat2Skew(vec2(2.0, 5.0));
//basicTrans *= etk::mat2Translate(vec2(width*0.3, height/2));
//basicTrans *= etk::mat2Translate(vec2(width/3, height/3));
draw(*m_renderedElement, basicTrans);
if (etk::end_with(_fileName, ".ppm") == true) { if (etk::end_with(_fileName, ".ppm") == true) {
m_renderedElement->writePPM(_fileName); renderedElement->writePPM(_fileName);
} else if (etk::end_with(_fileName, ".bmp") == true) { } else if (etk::end_with(_fileName, ".bmp") == true) {
m_renderedElement->writeBMP(_fileName); renderedElement->writeBMP(_fileName);
} else { } else {
SVG_ERROR("Can not store with this extention : " << _fileName << " not in .bmp/.ppm"); SVG_ERROR("Can not store with this extention : " << _fileName << " not in .bmp/.ppm");
} }
} }
/*
void esvg::Document::generateAnImage(draw::Image& _output) {
generateAnImage(ivec2(m_size.x(),m_size.y()), _output); std::vector<etk::Color<float,4>> esvg::Document::renderImageFloatRGBA(ivec2& _size) {
if (_size.x() <= 0) {
_size.setX(m_size.x());
}
if (_size.y() <= 0) {
_size.setY(m_size.y());
}
SVG_DEBUG("Generate size " << _size);
std::shared_ptr<esvg::Renderer> renderedElement = std::make_shared<esvg::Renderer>(_size);
// create the first element matrix modification ...
mat2 basicTrans;
basicTrans *= etk::mat2Scale(vec2(_size.x()/m_size.x(), _size.y()/m_size.y()));
draw(*renderedElement, basicTrans);
// direct return the generated data ...
return renderedElement->getData();
} }
void esvg::Document::generateAnImage(ivec2 _size, draw::Image& _output) { std::vector<etk::Color<float,3>> esvg::Document::renderImageFloatRGB(ivec2& _size) {
generateAnImage(_size.x(), _size.y()); std::vector<etk::Color<float,4>> data = renderImageFloatRGBA(_size);
_output.resize(_size); // Reduce scope:
draw::Color tmpp(0,0,0,0); std::vector<etk::Color<float,3>> out;
_output.setFillColor(tmpp); out.resize(data.size());
_output.clear(); for (size_t iii=0; iii<data.size(); ++iii) {
if(NULL != m_renderedElement) { out[iii] = data[iii];
uint8_t* pointerOnData = m_renderedElement->getDataPointer();
int32_t sizeData = m_renderedElement->getDataSize();
uint8_t* tmpOut = (uint8_t*)_output.getTextureDataPointer();
memcpy(tmpOut, pointerOnData, sizeData);
} }
} return out;
*/
uint8_t* esvg::Document::getPointerOnData() {
if(m_renderedElement == nullptr) {
return nullptr;
}
return m_renderedElement->getDataPointer();
} }
uint32_t esvg::Document::getSizeOnData() { std::vector<etk::Color<uint8_t,4>> esvg::Document::renderImageU8RGBA(ivec2& _size) {
if(m_renderedElement == nullptr) { std::vector<etk::Color<float,4>> data = renderImageFloatRGBA(_size);
return 0; // Reduce scope:
std::vector<etk::Color<uint8_t,4>> out;
out.resize(data.size());
for (size_t iii=0; iii<data.size(); ++iii) {
out[iii] = data[iii];
} }
return m_renderedElement->getDataSize(); return out;
}
std::vector<etk::Color<uint8_t,3>> esvg::Document::renderImageU8RGB(ivec2& _size) {
std::vector<etk::Color<float,4>> data = renderImageFloatRGBA(_size);
// Reduce scope:
std::vector<etk::Color<uint8_t,3>> out;
out.resize(data.size());
for (size_t iii=0; iii<data.size(); ++iii) {
out[iii] = data[iii];
}
return out;
} }
void esvg::Document::clear() { void esvg::Document::clear() {
@ -208,7 +183,7 @@ bool esvg::Document::load(const std::string& _file) {
m_loadOK = false; m_loadOK = false;
return m_loadOK; return m_loadOK;
} }
std::shared_ptr<exml::Element> root = doc.getNamed("svg" ); std::shared_ptr<exml::Element> root = doc.getNamed("svg");
if (root == nullptr) { if (root == nullptr) {
SVG_ERROR("(l ?) main node not find: \"svg\" in \"" << m_fileName << "\""); SVG_ERROR("(l ?) main node not find: \"svg\" in \"" << m_fileName << "\"");
m_loadOK = false; m_loadOK = false;
@ -283,7 +258,7 @@ bool esvg::Document::parseXMLData(const std::shared_ptr<exml::Element>& _root) {
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" allocation error or not supported ..."); SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" allocation error or not supported ...");
continue; continue;
} }
if (elementParser->parse(child, m_transformMatrix, size) == false) { if (elementParser->parseXML(child, m_transformMatrix, size) == false) {
SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR"); SVG_ERROR("(l "<<child->getPos()<<") error on node: \""<<child->getValue()<<"\" Sub Parsing ERROR");
delete(elementParser); delete(elementParser);
elementParser = nullptr; elementParser = nullptr;

View File

@ -26,10 +26,8 @@ namespace esvg {
std::string m_title; std::string m_title;
std::vector<esvg::Base*> m_subElementList; std::vector<esvg::Base*> m_subElementList;
vec2 m_size; vec2 m_size;
esvg::Renderer* m_renderedElement;
public: public:
Document(); Document();
Document(const std::string& _fileName);
~Document(); ~Document();
void clear(); void clear();
/** /**
@ -67,13 +65,16 @@ namespace esvg {
return m_loadOK; return m_loadOK;
}; };
void displayDebug(); void displayDebug();
void generateTestFile();
void generateAnImage(const ivec2& _size, const std::string& _fileName, bool _visualDebug=false); void generateAnImage(const ivec2& _size, const std::string& _fileName, bool _visualDebug=false);
//void generateAnImage(ivec2 _size, draw::Image& _output); //void generateAnImage(ivec2 _size, draw::Image& _output);
//void generateAnImage(draw::Image& _output); //void generateAnImage(draw::Image& _output);
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans); std::vector<etk::Color<float,4>> renderImageFloatRGBA(ivec2& _size);
uint8_t* getPointerOnData(); std::vector<etk::Color<float,3>> renderImageFloatRGB(ivec2& _size);
uint32_t getSizeOnData(); std::vector<etk::Color<uint8_t,4>> renderImageU8RGBA(ivec2& _size);
std::vector<etk::Color<uint8_t,3>> renderImageU8RGB(ivec2& _size);
protected:
virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level=0);
public:
vec2 getDefinedSize() { vec2 getDefinedSize() {
return m_size; return m_size;
}; };