[DEBUG] correct the VBO FULL implement

This commit is contained in:
Edouard DUPIN 2016-11-08 22:17:47 +01:00
parent 95bff828d8
commit 6b859a45a1
16 changed files with 363 additions and 303 deletions

View File

@ -8,9 +8,10 @@
#include <ewol/compositing/Area.hpp> #include <ewol/compositing/Area.hpp>
// VBO table property: // VBO table property:
#define EWOL_COMPOSITING_VBO_COORDINATE (0) const int32_t ewol::compositing::Area::m_vboIdCoord(0);
#define EWOL_COMPOSITING_VBO_COLOR (1) const int32_t ewol::compositing::Area::m_vboIdCoordText(1);
#define EWOL_COMPOSITING_VBO_TEXTURE (2) const int32_t ewol::compositing::Area::m_vboIdColor(2);
#define NB_VBO (3)
ewol::compositing::Area::Area(const ivec2& _size) : ewol::compositing::Area::Area(const ivec2& _size) :
m_position(0.0, 0.0, 0.0), m_position(0.0, 0.0, 0.0),
@ -26,7 +27,7 @@ ewol::compositing::Area::Area(const ivec2& _size) :
m_resource->setImageSize(_size); m_resource->setImageSize(_size);
m_resource->flush(); m_resource->flush();
// Create the VBO: // Create the VBO:
m_VBO = gale::resource::VirtualBufferObject::create(3); m_VBO = gale::resource::VirtualBufferObject::create(NB_VBO);
if (m_VBO == nullptr) { if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ..."); EWOL_ERROR("can not instanciate VBO ...");
return; return;
@ -54,7 +55,7 @@ void ewol::compositing::Area::loadProgram() {
} }
void ewol::compositing::Area::draw(bool _disableDepthTest) { void ewol::compositing::Area::draw(bool _disableDepthTest) {
if (m_VBO->bufferSize(EWOL_COMPOSITING_VBO_COORDINATE) <= 0) { if (m_VBO->bufferSize(m_vboIdCoord) <= 0) {
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -73,13 +74,13 @@ void ewol::compositing::Area::draw(bool _disableDepthTest) {
// TextureID // TextureID
m_GLprogram->setTexture0(m_GLtexID, m_resource->getRendererId()); m_GLprogram->setTexture0(m_GLtexID, m_resource->getRendererId());
// position: // position:
m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, EWOL_COMPOSITING_VBO_COORDINATE); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// Texture: // Texture:
m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, EWOL_COMPOSITING_VBO_COLOR); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdColor);
// color: // color:
m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, EWOL_COMPOSITING_VBO_TEXTURE); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdCoordText);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(EWOL_COMPOSITING_VBO_COORDINATE)); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
} }
@ -97,41 +98,41 @@ void ewol::compositing::Area::print(const ivec2& _size) {
vec2 tex(0,1); vec2 tex(0,1);
point.setX(m_position.x()); point.setX(m_position.x());
point.setY(m_position.y()); point.setY(m_position.y());
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
tex.setValue(1,1); tex.setValue(1,1);
point.setX(m_position.x() + _size.x()); point.setX(m_position.x() + _size.x());
point.setY(m_position.y()); point.setY(m_position.y());
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
tex.setValue(1,0); tex.setValue(1,0);
point.setX(m_position.x() + _size.x()); point.setX(m_position.x() + _size.x());
point.setY(m_position.y() + _size.y()); point.setY(m_position.y() + _size.y());
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
tex.setValue(0,0); tex.setValue(0,0);
point.setX(m_position.x()); point.setX(m_position.x());
point.setY(m_position.y() + _size.y()); point.setY(m_position.y() + _size.y());
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
tex.setValue(0,1); tex.setValue(0,1);
point.setX(m_position.x()); point.setX(m_position.x());
point.setY(m_position.y()); point.setY(m_position.y());
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COORDINATE, point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_COLOR, m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->pushOnBuffer(EWOL_COMPOSITING_VBO_TEXTURE, tex); m_VBO->pushOnBuffer(m_vboIdCoordText, tex);
m_VBO->flush(); m_VBO->flush();
} }

View File

@ -28,6 +28,10 @@ namespace ewol {
int32_t m_GLtexID; //!< openGL id on the element (texture ID) int32_t m_GLtexID; //!< openGL id on the element (texture ID)
private: private:
ememory::SharedPtr<ewol::resource::Texture> m_resource; //!< texture resources ememory::SharedPtr<ewol::resource::Texture> m_resource; //!< texture resources
protected:
static const int32_t m_vboIdCoord;
static const int32_t m_vboIdCoordText;
static const int32_t m_vboIdColor;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO; ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
private: private:
/** /**

View File

@ -7,6 +7,10 @@
#include <ewol/debug.hpp> #include <ewol/debug.hpp>
#include <ewol/compositing/Drawing.hpp> #include <ewol/compositing/Drawing.hpp>
// VBO table property:
const int32_t ewol::compositing::Drawing::m_vboIdCoord(0);
const int32_t ewol::compositing::Drawing::m_vboIdColor(1);
#define NB_VBO (2)
#if 0 #if 0
@ -234,6 +238,14 @@ ewol::compositing::Drawing::Drawing() :
m_triangle[iii] = m_position; m_triangle[iii] = m_position;
m_tricolor[iii] = m_color; m_tricolor[iii] = m_color;
} }
// Create the VBO:
m_VBO = gale::resource::VirtualBufferObject::create(NB_VBO);
if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ...");
return;
}
// TO facilitate some debugs we add a name of the VBO:
m_VBO->setName("[VBO] of ewol::compositing::Area");
} }
ewol::compositing::Drawing::~Drawing() { ewol::compositing::Drawing::~Drawing() {
@ -243,12 +255,12 @@ ewol::compositing::Drawing::~Drawing() {
void ewol::compositing::Drawing::generateTriangle() { void ewol::compositing::Drawing::generateTriangle() {
m_triElement = 0; m_triElement = 0;
m_coord.push_back(m_triangle[0]); m_VBO->pushOnBuffer(m_vboIdCoord, m_triangle[0]);
m_coordColor.push_back(m_tricolor[0]); m_VBO->pushOnBuffer(m_vboIdColor, m_tricolor[0]);
m_coord.push_back(m_triangle[1]); m_VBO->pushOnBuffer(m_vboIdCoord, m_triangle[1]);
m_coordColor.push_back(m_tricolor[1]); m_VBO->pushOnBuffer(m_vboIdColor, m_tricolor[1]);
m_coord.push_back(m_triangle[2]); m_VBO->pushOnBuffer(m_vboIdCoord, m_triangle[2]);
m_coordColor.push_back(m_tricolor[2]); m_VBO->pushOnBuffer(m_vboIdColor, m_tricolor[2]);
} }
void ewol::compositing::Drawing::internalSetColor(const etk::Color<>& _color) { void ewol::compositing::Drawing::internalSetColor(const etk::Color<>& _color) {
@ -269,6 +281,7 @@ void ewol::compositing::Drawing::setPoint(const vec3& _point) {
if (m_triElement >= 3) { if (m_triElement >= 3) {
generateTriangle(); generateTriangle();
} }
m_VBO->flush();
} }
void ewol::compositing::Drawing::resetCount() { void ewol::compositing::Drawing::resetCount() {
@ -294,8 +307,8 @@ void ewol::compositing::Drawing::loadProgram() {
} }
void ewol::compositing::Drawing::draw(bool _disableDepthTest) { void ewol::compositing::Drawing::draw(bool _disableDepthTest) {
if (m_coord.size() <= 0) { if (m_VBO->bufferSize(m_vboIdCoord) <= 0) {
// TODO : a remÚtre ... // TODO : set it back ...
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -310,11 +323,11 @@ void ewol::compositing::Drawing::draw(bool _disableDepthTest) {
mat4 tmpMatrix2; mat4 tmpMatrix2;
m_GLprogram->uniformMatrix(m_GLMatrixPosition, tmpMatrix2); m_GLprogram->uniformMatrix(m_GLMatrixPosition, tmpMatrix2);
// position: // position:
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// color: // color:
m_GLprogram->sendAttribute(m_GLColor, m_coordColor); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
} }
@ -322,8 +335,7 @@ void ewol::compositing::Drawing::clear() {
// call upper class // call upper class
ewol::Compositing::clear(); ewol::Compositing::clear();
// reset Buffer : // reset Buffer :
m_coord.clear(); m_VBO->clear();
m_coordColor.clear();
// reset temporal variables : // reset temporal variables :
m_position = vec3(0.0, 0.0, 0.0); m_position = vec3(0.0, 0.0, 0.0);

View File

@ -29,9 +29,10 @@ namespace ewol {
int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix)
int32_t m_GLMatrixPosition; //!< position matrix int32_t m_GLMatrixPosition; //!< position matrix
int32_t m_GLColor; //!< openGL id on the element (color buffer) int32_t m_GLColor; //!< openGL id on the element (color buffer)
public: // Background Color (display only when needed) protected:
std::vector<vec3 > m_coord; //!< internal position for the text display static const int32_t m_vboIdCoord;
std::vector<etk::Color<float> > m_coordColor; //!< internal color of the background static const int32_t m_vboIdColor;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
public: public:
/** /**
* @brief Basic constructor * @brief Basic constructor
@ -53,7 +54,7 @@ namespace ewol {
float m_thickness; //!< when drawing line and other things float m_thickness; //!< when drawing line and other things
int32_t m_triElement; //!< special counter of the single dot generated int32_t m_triElement; //!< special counter of the single dot generated
vec3 m_triangle[3]; //!< Register every system with a combinaison of tiangle vec3 m_triangle[3]; //!< Register every system with a combinaison of tiangle
etk::Color<float> m_tricolor[3]; //!< Register every the associated color foreground etk::Color<float,4> m_tricolor[3]; //!< Register every the associated color foreground
// internal API for the generation abstraction of triangles // internal API for the generation abstraction of triangles
/** /**
* @brief Lunch the generation of triangle * @brief Lunch the generation of triangle

View File

@ -9,6 +9,12 @@
const int32_t ewol::compositing::Image::sizeAuto(0); const int32_t ewol::compositing::Image::sizeAuto(0);
// VBO table property:
const int32_t ewol::compositing::Image::m_vboIdCoord(0);
const int32_t ewol::compositing::Image::m_vboIdCoordTex(1);
const int32_t ewol::compositing::Image::m_vboIdColor(2);
#define NB_VBO (3)
ewol::compositing::Image::Image(const std::string& _imageName, ewol::compositing::Image::Image(const std::string& _imageName,
bool _df, bool _df,
int32_t _size) : int32_t _size) :
@ -29,6 +35,14 @@ ewol::compositing::Image::Image(const std::string& _imageName,
m_distanceFieldMode(_df), m_distanceFieldMode(_df),
m_resource(nullptr), m_resource(nullptr),
m_resourceDF(nullptr) { m_resourceDF(nullptr) {
// Create the VBO:
m_VBO = gale::resource::VirtualBufferObject::create(NB_VBO);
if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ...");
return;
}
// TO facilitate some debugs we add a name of the VBO:
m_VBO->setName("[VBO] of ewol::compositing::Image");
setSource(_imageName, _size); setSource(_imageName, _size);
loadProgram(); loadProgram();
} }
@ -56,7 +70,7 @@ void ewol::compositing::Image::loadProgram() {
} }
void ewol::compositing::Image::draw(bool _disableDepthTest) { void ewol::compositing::Image::draw(bool _disableDepthTest) {
if (m_coord.size() <= 0) { if (m_VBO->bufferSize(m_vboIdCoord) <= 0) {
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -69,6 +83,7 @@ void ewol::compositing::Image::draw(bool _disableDepthTest) {
EWOL_ERROR("No shader ..."); EWOL_ERROR("No shader ...");
return; return;
} }
//EWOL_WARNING("Display image : " << m_VBO->bufferSize(m_vboIdCoord));
if (_disableDepthTest == true) { if (_disableDepthTest == true) {
gale::openGL::disable(gale::openGL::flag_depthTest); gale::openGL::disable(gale::openGL::flag_depthTest);
} else { } else {
@ -91,13 +106,13 @@ void ewol::compositing::Image::draw(bool _disableDepthTest) {
m_GLprogram->setTexture0(m_GLtexID, m_resourceDF->getRendererId()); m_GLprogram->setTexture0(m_GLtexID, m_resourceDF->getRendererId());
} }
// position: // position:
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// Texture: // Texture:
m_GLprogram->sendAttribute(m_GLtexture, m_coordTex); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdCoordTex);
// color: // color:
m_GLprogram->sendAttribute(m_GLColor, m_coordColor); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
// Request the draw od the elements : // Request the draw of the elements:
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
} }
@ -105,9 +120,7 @@ void ewol::compositing::Image::clear() {
// call upper class // call upper class
ewol::Compositing::clear(); ewol::Compositing::clear();
// reset Buffer : // reset Buffer :
m_coord.clear(); m_VBO->clear();
m_coordTex.clear();
m_coordColor.clear();
// reset temporal variables : // reset temporal variables :
m_position = vec3(0.0, 0.0, 0.0); m_position = vec3(0.0, 0.0, 0.0);
m_clippingPosStart = vec3(0.0, 0.0, 0.0); m_clippingPosStart = vec3(0.0, 0.0, 0.0);
@ -154,47 +167,46 @@ void ewol::compositing::Image::print(const vec2& _size) {
void ewol::compositing::Image::printPart(const vec2& _size, void ewol::compositing::Image::printPart(const vec2& _size,
const vec2& _sourcePosStart, const vec2& _sourcePosStart,
const vec2& _sourcePosStop) { const vec2& _sourcePosStop) {
//EWOL_ERROR("Debug image " << m_filename << " ==> " << m_position << " " << _size << " " << _sourcePosStart << " " << _sourcePosStop);
if (m_angle == 0.0f) { if (m_angle == 0.0f) {
vec3 point = m_position; vec3 point = m_position;
vec2 tex(_sourcePosStart.x(),_sourcePosStop.y()); vec2 tex(_sourcePosStart.x(),_sourcePosStop.y());
m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color);
tex.setValue(_sourcePosStop.x(),_sourcePosStop.y()); tex.setValue(_sourcePosStop.x(),_sourcePosStop.y());
point.setX(m_position.x() + _size.x()); point.setX(m_position.x() + _size.x());
point.setY(m_position.y()); point.setY(m_position.y());
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStop.x(),_sourcePosStart.y()); tex.setValue(_sourcePosStop.x(),_sourcePosStart.y());
point.setX(m_position.x() + _size.x()); point.setX(m_position.x() + _size.x());
point.setY(m_position.y() + _size.y()); point.setY(m_position.y() + _size.y());
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStart.x(),_sourcePosStart.y()); tex.setValue(_sourcePosStart.x(),_sourcePosStart.y());
point.setX(m_position.x()); point.setX(m_position.x());
point.setY(m_position.y() + _size.y()); point.setY(m_position.y() + _size.y());
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStart.x(),_sourcePosStop.y()); tex.setValue(_sourcePosStart.x(),_sourcePosStop.y());
point.setX(m_position.x()); point.setX(m_position.x());
point.setY(m_position.y()); point.setY(m_position.y());
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->flush();
return; return;
} }
vec3 center = m_position + vec3(_size.x(),_size.y(),0)/2.0f; vec3 center = m_position + vec3(_size.x(),_size.y(),0)/2.0f;
@ -205,43 +217,43 @@ void ewol::compositing::Image::printPart(const vec2& _size,
point.setValue(-limitedSize.x(), -limitedSize.y(), 0); point.setValue(-limitedSize.x(), -limitedSize.y(), 0);
point = point.rotate(vec3(0,0,1), m_angle) + center; point = point.rotate(vec3(0,0,1), m_angle) + center;
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStop.x(),_sourcePosStop.y()); tex.setValue(_sourcePosStop.x(),_sourcePosStop.y());
point.setValue(limitedSize.x(), -limitedSize.y(), 0); point.setValue(limitedSize.x(), -limitedSize.y(), 0);
point = point.rotate(vec3(0,0,1), m_angle) + center; point = point.rotate(vec3(0,0,1), m_angle) + center;
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStop.x(),_sourcePosStart.y()); tex.setValue(_sourcePosStop.x(),_sourcePosStart.y());
point.setValue(limitedSize.x(), limitedSize.y(), 0); point.setValue(limitedSize.x(), limitedSize.y(), 0);
point = point.rotate(vec3(0,0,1), m_angle) + center; point = point.rotate(vec3(0,0,1), m_angle) + center;
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStart.x(),_sourcePosStart.y()); tex.setValue(_sourcePosStart.x(),_sourcePosStart.y());
point.setValue(-limitedSize.x(), limitedSize.y(), 0); point.setValue(-limitedSize.x(), limitedSize.y(), 0);
point = point.rotate(vec3(0,0,1), m_angle) + center; point = point.rotate(vec3(0,0,1), m_angle) + center;
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
tex.setValue(_sourcePosStart.x(),_sourcePosStop.y()); tex.setValue(_sourcePosStart.x(),_sourcePosStop.y());
point.setValue(-limitedSize.x(), -limitedSize.y(), 0); point.setValue(-limitedSize.x(), -limitedSize.y(), 0);
point = point.rotate(vec3(0,0,1), m_angle) + center; point = point.rotate(vec3(0,0,1), m_angle) + center;
m_coord.push_back(point); m_VBO->pushOnBuffer(m_vboIdCoord, point);
m_coordTex.push_back(tex); m_VBO->pushOnBuffer(m_vboIdCoordTex, tex);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_VBO->flush();
} }
void ewol::compositing::Image::setSource(const std::string& _newFile, const vec2& _size) { void ewol::compositing::Image::setSource(const std::string& _newFile, const vec2& _size) {

View File

@ -24,7 +24,7 @@ namespace ewol {
vec3 m_clippingPosStop; //!< Clipping stop position vec3 m_clippingPosStop; //!< Clipping stop position
bool m_clippingEnable; //!< true if the clipping must be activated bool m_clippingEnable; //!< true if the clipping must be activated
private: private:
etk::Color<> m_color; //!< The text foreground color etk::Color<float,4> m_color; //!< The text foreground color
float m_angle; //!< Angle to set at the axes float m_angle; //!< Angle to set at the axes
private: private:
ememory::SharedPtr<gale::resource::Program> m_GLprogram; //!< pointer on the opengl display program ememory::SharedPtr<gale::resource::Program> m_GLprogram; //!< pointer on the opengl display program
@ -37,9 +37,10 @@ namespace ewol {
bool m_distanceFieldMode; //!< select distance field mode bool m_distanceFieldMode; //!< select distance field mode
ememory::SharedPtr<ewol::resource::TextureFile> m_resource; //!< texture resources ememory::SharedPtr<ewol::resource::TextureFile> m_resource; //!< texture resources
ememory::SharedPtr<ewol::resource::ImageDF> m_resourceDF; //!< texture resources ememory::SharedPtr<ewol::resource::ImageDF> m_resourceDF; //!< texture resources
std::vector<vec3 > m_coord; //!< internal coord of the object static const int32_t m_vboIdCoord;
std::vector<vec2 > m_coordTex; //!< internal texture coordinate for every point static const int32_t m_vboIdCoordTex;
std::vector<etk::Color<float> > m_coordColor; //!< internal color of the different point static const int32_t m_vboIdColor;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
private: private:
/** /**
* @brief load the openGL program and get all the ID needed * @brief load the openGL program and get all the ID needed

View File

@ -9,8 +9,9 @@
#include <ewol/compositing/Shaper.hpp> #include <ewol/compositing/Shaper.hpp>
// VBO table property: // VBO table property:
#define EWOL_COMPOSITING_SHAPER_VBO_COORDINATE (0) const int32_t ewol::compositing::Shaper::m_vboIdCoord(0);
#define EWOL_COMPOSITING_SHAPER_VBO_POS (1) const int32_t ewol::compositing::Shaper::m_vboIdPos(1);
#define NB_VBO (2)
ewol::compositing::Shaper::Shaper(const std::string& _shaperName) : ewol::compositing::Shaper::Shaper(const std::string& _shaperName) :
m_name(_shaperName), m_name(_shaperName),
@ -45,7 +46,7 @@ ewol::compositing::Shaper::Shaper(const std::string& _shaperName) :
m_confIdPaddingIn[iii] = -1; m_confIdPaddingIn[iii] = -1;
} }
// Create the VBO: // Create the VBO:
m_VBO = gale::resource::VirtualBufferObject::create(3); m_VBO = gale::resource::VirtualBufferObject::create(NB_VBO);
if (m_VBO == nullptr) { if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ..."); EWOL_ERROR("can not instanciate VBO ...");
return; return;
@ -180,7 +181,7 @@ void ewol::compositing::Shaper::draw(bool _disableDepthTest) {
EWOL_ERROR("No shader ..."); EWOL_ERROR("No shader ...");
return; return;
} }
if (m_VBO->bufferSize(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE) <= 0) { if (m_VBO->bufferSize(m_vboIdCoord) <= 0) {
return; return;
} }
//glScalef(m_scaling.x, m_scaling.y, 1.0); //glScalef(m_scaling.x, m_scaling.y, 1.0);
@ -189,9 +190,9 @@ void ewol::compositing::Shaper::draw(bool _disableDepthTest) {
mat4 tmpMatrix = gale::openGL::getMatrix(); mat4 tmpMatrix = gale::openGL::getMatrix();
m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position: // position:
m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, EWOL_COMPOSITING_SHAPER_VBO_COORDINATE); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// property // property
m_GLprogram->sendAttributePointer(m_GLPropertyPos, m_VBO, EWOL_COMPOSITING_SHAPER_VBO_POS); m_GLprogram->sendAttributePointer(m_GLPropertyPos, m_VBO, m_vboIdPos);
// all entry parameters : // all entry parameters :
m_GLprogram->uniform1i(m_GLStateActivate, m_stateActivate); m_GLprogram->uniform1i(m_GLStateActivate, m_stateActivate);
m_GLprogram->uniform1i(m_GLStateOld, m_stateOld); m_GLprogram->uniform1i(m_GLStateOld, m_stateOld);
@ -297,104 +298,104 @@ void ewol::compositing::Shaper::addVertexLine(float _yTop,
bool _displayOutside) { bool _displayOutside) {
if (m_nbVertexToDisplay != 0) { if (m_nbVertexToDisplay != 0) {
// change line ... // change line ...
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, m_VBO->pushOnBuffer(m_vboIdCoord,
m_VBO->getOnBufferVec2(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, m_nbVertexToDisplay-1)); m_VBO->getOnBufferVec2(m_vboIdCoord, m_nbVertexToDisplay-1));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, m_VBO->pushOnBuffer(m_vboIdPos,
m_VBO->getOnBufferVec2(EWOL_COMPOSITING_SHAPER_VBO_POS, m_nbVertexToDisplay-1)); m_VBO->getOnBufferVec2(m_vboIdPos, m_nbVertexToDisplay-1));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
if (_displayOutside == true) { if (_displayOutside == true) {
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x1, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x1, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[0],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[0],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
} else { } else {
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x2, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x2, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[1],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[1],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
} }
} }
if (_displayOutside == true) { if (_displayOutside == true) {
// A // A
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x1, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x1, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[0],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[0],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x1, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x1, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[0],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[0],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x2, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x2, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[1],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[1],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// B // B
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x2, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x2, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[1],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[1],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// C // C
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x3, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x3, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[2],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[2],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
} else { } else {
// C // C
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x2, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x2, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[1],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[1],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x2, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x2, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[1],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[1],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x3, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x3, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[2],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[2],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
} }
// D // D
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x3, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x3, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[2],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[2],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// E // E
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x4, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x4, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[3],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[3],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// F // F
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x4, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x4, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[3],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[3],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// G // G
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x5, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x5, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[4],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[4],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// H // H
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x5, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x5, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[4],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[4],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// I // I
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x6, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x6, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[5],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[5],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// J // J
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x6, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x6, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[5],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[5],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// K // K
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x7, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x7, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[6],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[6],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// L // L
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x7, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x7, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[6],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[6],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
if (_displayOutside == true) { if (_displayOutside == true) {
// M // M
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x8, _yButtom)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x8, _yButtom));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[7],_yValButtom)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[7],_yValButtom));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
// N // N
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_COORDINATE, vec2(_x8, _yTop)); m_VBO->pushOnBuffer(m_vboIdCoord, vec2(_x8, _yTop));
m_VBO->pushOnBuffer(EWOL_COMPOSITING_SHAPER_VBO_POS, vec2(_table[7],_yValTop)); m_VBO->pushOnBuffer(m_vboIdPos, vec2(_table[7],_yValTop));
m_nbVertexToDisplay++; m_nbVertexToDisplay++;
} }
} }
@ -446,6 +447,7 @@ const float modeDisplay[][8] = {
}; };
void ewol::compositing::Shaper::setShape(const vec2& _origin, const vec2& _size, const vec2& _insidePos, const vec2& _insideSize) { void ewol::compositing::Shaper::setShape(const vec2& _origin, const vec2& _size, const vec2& _insidePos, const vec2& _insideSize) {
m_VBO->clear();
ewol::Padding borderTmp = getBorder(); ewol::Padding borderTmp = getBorder();
ewol::Padding paddingIn = getPaddingIn(); ewol::Padding paddingIn = getPaddingIn();
ewol::Padding paddingOut = getPaddingOut(); ewol::Padding paddingOut = getPaddingOut();

View File

@ -76,6 +76,9 @@ namespace ewol {
// color management theme: // color management theme:
ememory::SharedPtr<ewol::resource::ColorFile> m_colorProperty; //!< input resource for color management ememory::SharedPtr<ewol::resource::ColorFile> m_colorProperty; //!< input resource for color management
std::vector<ivec2> m_listAssiciatedId; //!< Corellation ID between ColorProperty (Y) and OpenGL Program (X) std::vector<ivec2> m_listAssiciatedId; //!< Corellation ID between ColorProperty (Y) and OpenGL Program (X)
protected:
static const int32_t m_vboIdCoord;
static const int32_t m_vboIdPos;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO; ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
private: private:
/** /**

View File

@ -23,8 +23,9 @@ void ewol::compositing::Text::drawMT(const mat4& _transformationMatrix, bool _en
// draw BG in any case: // draw BG in any case:
m_vectorialDraw.draw(); m_vectorialDraw.draw();
if (m_coord.size() <= 0 || m_font == nullptr) { if ( m_VBO->bufferSize(m_vboIdCoord) <= 0
// TODO : a remĂtre ... || m_font == nullptr) {
// TODO : set it back ...
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -50,13 +51,13 @@ void ewol::compositing::Text::drawMT(const mat4& _transformationMatrix, bool _en
m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x());
m_GLprogram->uniform1i(m_GLtextHeight, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextHeight, m_font->getOpenGlSize().x());
// position: // position:
m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &m_coord[0]); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// Texture: // Texture:
m_GLprogram->sendAttribute(m_GLtexture, 2/*u,v*/, &m_coordTex[0]); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdCoordText);
// color: // color:
m_GLprogram->sendAttribute(m_GLColor, 4/*r,g,b,a*/, &m_coordColor[0]); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
// Request the draw od the elements: // Request the draw od the elements:
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
if (_enableDepthTest == true) { if (_enableDepthTest == true) {
gale::openGL::disable(gale::openGL::flag_depthTest); gale::openGL::disable(gale::openGL::flag_depthTest);
@ -67,7 +68,8 @@ void ewol::compositing::Text::drawD(bool _disableDepthTest) {
// draw BG in any case: // draw BG in any case:
m_vectorialDraw.draw(_disableDepthTest); m_vectorialDraw.draw(_disableDepthTest);
if (m_coord.size() <= 0 || m_font == nullptr) { if ( m_VBO->bufferSize(m_vboIdCoord) <= 0
|| m_font == nullptr) {
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -88,13 +90,13 @@ void ewol::compositing::Text::drawD(bool _disableDepthTest) {
m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x());
m_GLprogram->uniform1i(m_GLtextHeight, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextHeight, m_font->getOpenGlSize().x());
// position: // position:
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
// Texture: // Texture:
m_GLprogram->sendAttribute(m_GLtexture, m_coordTex); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdCoordText);
// color: // color:
m_GLprogram->sendAttribute(m_GLColor, m_coordColor); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
} }
@ -180,7 +182,7 @@ void ewol::compositing::Text::printChar(const char32_t& _charcode) {
// get the kerning ofset : // get the kerning ofset :
float kerningOffset = 0; float kerningOffset = 0;
if (true == m_kerning) { if (m_kerning == true) {
kerningOffset = myGlyph->kerningGet(m_previousCharcode); kerningOffset = myGlyph->kerningGet(m_previousCharcode);
if (kerningOffset != 0) { if (kerningOffset != 0) {
//EWOL_DEBUG("Kerning between : '" << m_previousCharcode << "'&'" << myGlyph->m_UVal << "' value : " << kerningOffset); //EWOL_DEBUG("Kerning between : '" << m_previousCharcode << "'&'" << myGlyph->m_UVal << "' value : " << kerningOffset);
@ -292,17 +294,17 @@ void ewol::compositing::Text::printChar(const char32_t& _charcode) {
* *
*/ */
// set texture coordonates : // set texture coordonates :
m_coordTex.push_back(texturePos[0]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[0]);
m_coordTex.push_back(texturePos[1]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[1]);
m_coordTex.push_back(texturePos[2]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[2]);
// set display positions : // set display positions :
m_coord.push_back(bitmapDrawPos[0]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[0]);
m_coord.push_back(bitmapDrawPos[1]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[1]);
m_coord.push_back(bitmapDrawPos[2]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[2]);
// set the color // set the color
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
/* Step 2 : /* Step 2 :
* *
* ** * **
@ -311,17 +313,17 @@ void ewol::compositing::Text::printChar(const char32_t& _charcode) {
* ******** * ********
*/ */
// set texture coordonates : // set texture coordonates :
m_coordTex.push_back(texturePos[0]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[0]);
m_coordTex.push_back(texturePos[2]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[2]);
m_coordTex.push_back(texturePos[3]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[3]);
// set display positions : // set display positions :
m_coord.push_back(bitmapDrawPos[0]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[0]);
m_coord.push_back(bitmapDrawPos[2]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[2]);
m_coord.push_back(bitmapDrawPos[3]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[3]);
// set the color // set the color
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
} }
} }
} }
@ -332,6 +334,7 @@ void ewol::compositing::Text::printChar(const char32_t& _charcode) {
//EWOL_DEBUG(" 6 print '" << charcode << "' : start=" << m_sizeDisplayStart << " stop=" << m_sizeDisplayStop << " pos=" << m_position); //EWOL_DEBUG(" 6 print '" << charcode << "' : start=" << m_sizeDisplayStart << " stop=" << m_sizeDisplayStop << " pos=" << m_position);
// Register the previous character // Register the previous character
m_previousCharcode = _charcode; m_previousCharcode = _charcode;
m_VBO->flush();
return; return;
} }

View File

@ -9,6 +9,13 @@
#include <ewol/context/Context.hpp> #include <ewol/context/Context.hpp>
#include <etk/types.hpp> #include <etk/types.hpp>
const int32_t ewol::compositing::TextBase::m_vboIdCoord(0);
const int32_t ewol::compositing::TextBase::m_vboIdCoordText(1);
const int32_t ewol::compositing::TextBase::m_vboIdColor(2);
const int32_t ewol::compositing::TextBase::m_vboIdGlyphLevel(3);
#define NB_VBO (4)
ewol::compositing::TextBase::TextBase(const std::string& _shaderName, bool _loadProgram) : ewol::compositing::TextBase::TextBase(const std::string& _shaderName, bool _loadProgram) :
m_position(0.0, 0.0, 0.0), m_position(0.0, 0.0, 0.0),
m_clippingPosStart(0.0, 0.0, 0.0), m_clippingPosStart(0.0, 0.0, 0.0),
@ -37,6 +44,14 @@ ewol::compositing::TextBase::TextBase(const std::string& _shaderName, bool _load
if (_loadProgram == true) { if (_loadProgram == true) {
loadProgram(_shaderName); loadProgram(_shaderName);
} }
// Create the VBO:
m_VBO = gale::resource::VirtualBufferObject::create(NB_VBO);
if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ...");
return;
}
// TO facilitate some debugs we add a name of the VBO:
m_VBO->setName("[VBO] of ewol::compositing::TextBase");
} }
@ -85,9 +100,7 @@ void ewol::compositing::TextBase::clear() {
// remove sub draw system // remove sub draw system
m_vectorialDraw.clear(); m_vectorialDraw.clear();
// reset Buffer: // reset Buffer:
m_coord.clear(); m_VBO->clear();
m_coordTex.clear();
m_coordColor.clear();
// reset temporal variables: // reset temporal variables:
reset(); reset();
} }

View File

@ -22,8 +22,8 @@ namespace ewol {
*/ */
class TextDecoration { class TextDecoration {
public: public:
etk::Color<> m_colorBg; //!< display background color etk::Color<float,4> m_colorBg; //!< display background color
etk::Color<> m_colorFg; //!< display foreground color etk::Color<float,4> m_colorFg; //!< display foreground color
enum ewol::font::mode m_mode; //!< display mode Regular/Bold/Italic/BoldItalic enum ewol::font::mode m_mode; //!< display mode Regular/Bold/Italic/BoldItalic
TextDecoration() { TextDecoration() {
m_colorBg = etk::color::blue; m_colorBg = etk::color::blue;
@ -57,13 +57,13 @@ namespace ewol {
vec3 m_clippingPosStop; //!< Clipping stop position vec3 m_clippingPosStop; //!< Clipping stop position
bool m_clippingEnable; //!< true if the clipping must be activated bool m_clippingEnable; //!< true if the clipping must be activated
protected: protected:
etk::Color<> m_defaultColorFg; //!< The text foreground color etk::Color<float,4> m_defaultColorFg; //!< The text foreground color
etk::Color<> m_defaultColorBg; //!< The text background color etk::Color<float,4> m_defaultColorBg; //!< The text background color
protected: protected:
etk::Color<> m_color; //!< The text foreground color etk::Color<float,4> m_color; //!< The text foreground color
etk::Color<> m_colorBg; //!< The text background color etk::Color<float,4> m_colorBg; //!< The text background color
etk::Color<> m_colorCursor; //!< The text cursor color etk::Color<float,4> m_colorCursor; //!< The text cursor color
etk::Color<> m_colorSelection; //!< The text Selection color etk::Color<float,4> m_colorSelection; //!< The text Selection color
protected: protected:
enum ewol::font::mode m_mode; //!< font display property : Regular/Bold/Italic/BoldItalic enum ewol::font::mode m_mode; //!< font display property : Regular/Bold/Italic/BoldItalic
bool m_kerning; //!< Kerning enable or disable on the next elements displayed bool m_kerning; //!< Kerning enable or disable on the next elements displayed
@ -85,9 +85,11 @@ namespace ewol {
int32_t m_selectionStartPos; //!< start position of the Selection (if == m_cursorPos ==> no selection) int32_t m_selectionStartPos; //!< start position of the Selection (if == m_cursorPos ==> no selection)
int32_t m_cursorPos; //!< Cursor position (default no cursor == > -100) int32_t m_cursorPos; //!< Cursor position (default no cursor == > -100)
protected: // Text protected: // Text
std::vector<vec3 > m_coord; //!< internal coord of the object static const int32_t m_vboIdCoord;
std::vector<vec2 > m_coordTex; //!< internal texture coordinate for every point static const int32_t m_vboIdCoordText;
std::vector<etk::Color<float> > m_coordColor; //!< internal color of the different point static const int32_t m_vboIdColor;
static const int32_t m_vboIdGlyphLevel;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
public: public:
/** /**
* @brief load the openGL program and get all the ID needed * @brief load the openGL program and get all the ID needed

View File

@ -30,11 +30,10 @@ void ewol::compositing::TextDF::updateSizeToRender(const vec2& _size) {
} }
void ewol::compositing::TextDF::drawMT(const mat4& _transformationMatrix, bool _enableDepthTest) { void ewol::compositing::TextDF::drawMT(const mat4& _transformationMatrix, bool _enableDepthTest) {
// draw BG in any case: // draw BG in any case:
m_vectorialDraw.draw(); m_vectorialDraw.draw();
if ( m_VBO->bufferSize(m_vboIdCoord) <= 0
if (m_coord.size() <= 0 || m_fontDF == nullptr) { || m_fontDF == nullptr) {
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -59,12 +58,12 @@ void ewol::compositing::TextDF::drawMT(const mat4& _transformationMatrix, bool _
m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getRendererId()); m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getRendererId());
m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x());
m_GLprogram->uniform1i(m_GLtextHeight, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextHeight, m_fontDF->getOpenGlSize().x());
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
m_GLprogram->sendAttribute(m_GLtexture, m_coordTex); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdCoordText);
m_GLprogram->sendAttribute(m_GLColor, m_coordColor); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
m_GLprogram->sendAttribute(m_GLglyphLevel, m_glyphLevel); m_GLprogram->sendAttributePointer(m_GLglyphLevel, m_VBO, m_vboIdGlyphLevel);
// Request the draw od the elements: // Request the draw od the elements:
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
if (_enableDepthTest == true) { if (_enableDepthTest == true) {
gale::openGL::disable(gale::openGL::flag_depthTest); gale::openGL::disable(gale::openGL::flag_depthTest);
@ -76,8 +75,9 @@ void ewol::compositing::TextDF::drawD(bool _disableDepthTest) {
// draw BG in any case: // draw BG in any case:
m_vectorialDraw.draw(); m_vectorialDraw.draw();
if (m_coord.size() <= 0 || m_fontDF == nullptr) { if ( m_VBO->bufferSize(m_vboIdCoord) <= 0
// TODO : a remètre ... || m_fontDF == nullptr) {
// TODO : Set it back
//EWOL_WARNING("Nothink to draw..."); //EWOL_WARNING("Nothink to draw...");
return; return;
} }
@ -97,19 +97,15 @@ void ewol::compositing::TextDF::drawD(bool _disableDepthTest) {
m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getRendererId()); m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getRendererId());
m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x());
m_GLprogram->uniform1i(m_GLtextHeight, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextHeight, m_fontDF->getOpenGlSize().x());
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, m_vboIdCoord);
m_GLprogram->sendAttribute(m_GLtexture, m_coordTex); m_GLprogram->sendAttributePointer(m_GLtexture, m_VBO, m_vboIdCoordText);
m_GLprogram->sendAttribute(m_GLColor, m_coordColor); m_GLprogram->sendAttributePointer(m_GLColor, m_VBO, m_vboIdColor);
m_GLprogram->sendAttribute(m_GLglyphLevel, m_glyphLevel); m_GLprogram->sendAttributePointer(m_GLglyphLevel, m_VBO, m_vboIdGlyphLevel);
// Request the draw od the elements: // Request the draw od the elements:
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_coord.size()); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(m_vboIdCoord));
m_GLprogram->unUse(); m_GLprogram->unUse();
} }
void ewol::compositing::TextDF::clear() {
ewol::compositing::TextBase::clear();
m_glyphLevel.clear();
}
void ewol::compositing::TextDF::loadProgram(const std::string& _shaderName) { void ewol::compositing::TextDF::loadProgram(const std::string& _shaderName) {
ewol::compositing::TextBase::loadProgram(_shaderName); ewol::compositing::TextBase::loadProgram(_shaderName);
if (m_GLprogram != nullptr) { if (m_GLprogram != nullptr) {
@ -334,20 +330,21 @@ void ewol::compositing::TextDF::printChar(const char32_t& _charcode) {
* *
*/ */
// set texture coordonates : // set texture coordonates :
m_coordTex.push_back(texturePos[0]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[0]);
m_coordTex.push_back(texturePos[1]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[1]);
m_coordTex.push_back(texturePos[2]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[2]);
// set display positions : // set display positions :
m_coord.push_back(bitmapDrawPos[0]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[0]);
m_coord.push_back(bitmapDrawPos[1]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[1]);
m_coord.push_back(bitmapDrawPos[2]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[2]);
// set the color // set the color
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_glyphLevel.push_back(glyphLevel); // set the bliph level
m_glyphLevel.push_back(glyphLevel); m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
m_glyphLevel.push_back(glyphLevel); m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
/* Step 2 : /* Step 2 :
* *
* ** * **
@ -356,20 +353,21 @@ void ewol::compositing::TextDF::printChar(const char32_t& _charcode) {
* ******** * ********
*/ */
// set texture coordonates : // set texture coordonates :
m_coordTex.push_back(texturePos[0]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[0]);
m_coordTex.push_back(texturePos[2]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[2]);
m_coordTex.push_back(texturePos[3]); m_VBO->pushOnBuffer(m_vboIdCoordText, texturePos[3]);
// set display positions : // set display positions :
m_coord.push_back(bitmapDrawPos[0]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[0]);
m_coord.push_back(bitmapDrawPos[2]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[2]);
m_coord.push_back(bitmapDrawPos[3]); m_VBO->pushOnBuffer(m_vboIdCoord, bitmapDrawPos[3]);
// set the color // set the color
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_coordColor.push_back(m_color); m_VBO->pushOnBuffer(m_vboIdColor, m_color);
m_glyphLevel.push_back(glyphLevel); // set the bliph level
m_glyphLevel.push_back(glyphLevel); m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
m_glyphLevel.push_back(glyphLevel); m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
m_VBO->pushOnBuffer(m_vboIdGlyphLevel, glyphLevel);
} }
} }
} }
@ -380,6 +378,7 @@ void ewol::compositing::TextDF::printChar(const char32_t& _charcode) {
//EWOL_DEBUG(" 6 print '" << charcode << "' : start=" << m_sizeDisplayStart << " stop=" << m_sizeDisplayStop << " pos=" << m_position); //EWOL_DEBUG(" 6 print '" << charcode << "' : start=" << m_sizeDisplayStart << " stop=" << m_sizeDisplayStop << " pos=" << m_position);
// Register the previous character // Register the previous character
m_previousCharcode = _charcode; m_previousCharcode = _charcode;
m_VBO->flush();
return; return;
} }

View File

@ -20,7 +20,6 @@ namespace ewol {
class TextDF : public ewol::compositing::TextBase { class TextDF : public ewol::compositing::TextBase {
protected: protected:
ememory::SharedPtr<ewol::resource::DistanceFieldFont> m_fontDF; //!< Font resources ememory::SharedPtr<ewol::resource::DistanceFieldFont> m_fontDF; //!< Font resources
std::vector<float> m_glyphLevel; //!< Level of display of the glyph (notmal : 0.50, bold : 0.40, super bold : 0.30 ...)
protected: protected:
int32_t m_GLglyphLevel; //!< openGL Id on the glyph level display int32_t m_GLglyphLevel; //!< openGL Id on the glyph level display
public: public:
@ -42,7 +41,6 @@ namespace ewol {
*/ */
void updateSizeToRender(const vec2& _size); void updateSizeToRender(const vec2& _size);
public: public:
virtual void clear();
virtual void drawD(bool _disableDepthTest); virtual void drawD(bool _disableDepthTest);
virtual void drawMT(const mat4& _transformationMatrix, bool _enableDepthTest); virtual void drawMT(const mat4& _transformationMatrix, bool _enableDepthTest);
protected: protected:

View File

@ -4,6 +4,8 @@
* @license APACHE v2.0 (see license file) * @license APACHE v2.0 (see license file)
*/ */
#ifndef __TARGET_OS__Web
#include <ewol/debug.hpp> #include <ewol/debug.hpp>
#include <ewol/resource/Colored3DObject.hpp> #include <ewol/resource/Colored3DObject.hpp>
#include <gale/resource/Manager.hpp> #include <gale/resource/Manager.hpp>
@ -25,11 +27,6 @@ void ewol::resource::Colored3DObject::init() {
m_GLColor = m_GLprogram->getUniform("EW_color"); m_GLColor = m_GLprogram->getUniform("EW_color");
m_GLMatrix = m_GLprogram->getUniform("EW_MatrixTransformation"); m_GLMatrix = m_GLprogram->getUniform("EW_MatrixTransformation");
} }
m_VBO = gale::resource::VirtualBufferObject::create(3);
if (m_VBO == nullptr) {
EWOL_ERROR("can not instanciate VBO ...");
return;
}
} }
ewol::resource::Colored3DObject::~Colored3DObject() { ewol::resource::Colored3DObject::~Colored3DObject() {
@ -37,17 +34,18 @@ ewol::resource::Colored3DObject::~Colored3DObject() {
} }
void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color, void ewol::resource::Colored3DObject::draw(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
bool _updateDepthBuffer, bool _updateDepthBuffer,
bool _depthtest) { bool _depthtest) {
if (m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID) <= 0) { if (_vertices.size() <= 0) {
return; return;
} }
if (m_GLprogram == nullptr) { if (m_GLprogram == nullptr) {
EWOL_ERROR("No shader ..."); EWOL_ERROR("No shader ...");
return; return;
} }
if (_depthtest == true) { if (true == _depthtest) {
gale::openGL::enable(gale::openGL::flag_depthTest); gale::openGL::enable(gale::openGL::flag_depthTest);
if (false == _updateDepthBuffer) { if (false == _updateDepthBuffer) {
glDepthMask(GL_FALSE); glDepthMask(GL_FALSE);
@ -61,11 +59,11 @@ void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color,
mat4 tmpMatrix = projMatrix * camMatrix; mat4 tmpMatrix = projMatrix * camMatrix;
m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z,unused*/, &_vertices[0], 4*sizeof(float));
// color : // color :
m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color); m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID)); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, _vertices.size());
m_GLprogram->unUse(); m_GLprogram->unUse();
// Request the draw od the elements : // Request the draw od the elements :
//glDrawArrays(GL_LINES, 0, vertices.size()); //glDrawArrays(GL_LINES, 0, vertices.size());
@ -78,11 +76,12 @@ void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color,
} }
} }
void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color, void ewol::resource::Colored3DObject::draw(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
mat4& _transformationMatrix, mat4& _transformationMatrix,
bool _updateDepthBuffer, bool _updateDepthBuffer,
bool _depthtest) { bool _depthtest) {
if (m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID) <= 0) { if (_vertices.size() <= 0) {
return; return;
} }
if (m_GLprogram == nullptr) { if (m_GLprogram == nullptr) {
@ -103,11 +102,11 @@ void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color,
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float));
// color : // color :
m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color); m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID)); gale::openGL::drawArrays(gale::openGL::renderMode::triangle, 0, _vertices.size());
m_GLprogram->unUse(); m_GLprogram->unUse();
if (true == _depthtest) { if (true == _depthtest) {
if (false == _updateDepthBuffer) { if (false == _updateDepthBuffer) {
@ -117,11 +116,12 @@ void ewol::resource::Colored3DObject::draw(const etk::Color<float>& _color,
} }
} }
void ewol::resource::Colored3DObject::drawLine(const etk::Color<float>& _color, void ewol::resource::Colored3DObject::drawLine(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
mat4& _transformationMatrix, mat4& _transformationMatrix,
bool _updateDepthBuffer, bool _updateDepthBuffer,
bool _depthtest) { bool _depthtest) {
if (m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID) <= 0) { if (_vertices.size() <= 0) {
return; return;
} }
if (m_GLprogram == nullptr) { if (m_GLprogram == nullptr) {
@ -142,11 +142,11 @@ void ewol::resource::Colored3DObject::drawLine(const etk::Color<float>& _color,
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttributePointer(m_GLPosition, m_VBO, EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float));
// color : // color :
m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color); m_GLprogram->uniform4fv(m_GLColor, 1/*r,g,b,a*/, (float*)&_color);
// Request the draw od the elements : // Request the draw od the elements :
gale::openGL::drawArrays(gale::openGL::renderMode::line, 0, m_VBO->bufferSize(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID)); gale::openGL::drawArrays(gale::openGL::renderMode::line, 0, _vertices.size());
m_GLprogram->unUse(); m_GLprogram->unUse();
if (true == _depthtest) { if (true == _depthtest) {
if (false == _updateDepthBuffer) { if (false == _updateDepthBuffer) {
@ -163,7 +163,7 @@ void ewol::resource::Colored3DObject::drawSphere(float _radius,
mat4& _transformationMatrix, mat4& _transformationMatrix,
const etk::Color<float>& _tmpColor) { const etk::Color<float>& _tmpColor) {
int i, j; int i, j;
m_VBO->clear(); std::vector<vec3> EwolVertices;
for(i = 0; i <= _lats; i++) { for(i = 0; i <= _lats; i++) {
btScalar lat0 = SIMD_PI * (-btScalar(0.5) + (btScalar) (i - 1) / _lats); btScalar lat0 = SIMD_PI * (-btScalar(0.5) + (btScalar) (i - 1) / _lats);
btScalar z0 = _radius*sin(lat0); btScalar z0 = _radius*sin(lat0);
@ -187,22 +187,22 @@ void ewol::resource::Colored3DObject::drawSphere(float _radius,
vec3 v2 = vec3(x * zr1, y * zr1, z1); vec3 v2 = vec3(x * zr1, y * zr1, z1);
vec3 v3 = vec3(x * zr0, y * zr0, z0); vec3 v3 = vec3(x * zr0, y * zr0, z0);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v1); EwolVertices.push_back(v1);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v2); EwolVertices.push_back(v2);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v3); EwolVertices.push_back(v3);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v1); EwolVertices.push_back(v1);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v3); EwolVertices.push_back(v3);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, v4); EwolVertices.push_back(v4);
} }
} }
draw(_tmpColor, _transformationMatrix); draw(EwolVertices, _tmpColor, _transformationMatrix);
} }
void ewol::resource::Colored3DObject::drawSquare(const vec3& _size, void ewol::resource::Colored3DObject::drawSquare(const vec3& _size,
mat4& _transformationMatrix, mat4& _transformationMatrix,
const etk::Color<float>& _tmpColor){ const etk::Color<float>& _tmpColor){
m_VBO->clear(); std::vector<vec3> tmpVertices;
static int indices[36] = { 0,1,2, 3,2,1, 4,0,6, static int indices[36] = { 0,1,2, 3,2,1, 4,0,6,
6,0,2, 5,1,4, 4,1,0, 6,0,2, 5,1,4, 4,1,0,
7,3,1, 7,1,5, 5,4,7, 7,3,1, 7,1,5, 5,4,7,
@ -215,15 +215,16 @@ void ewol::resource::Colored3DObject::drawSquare(const vec3& _size,
vec3(-_size[0],_size[1],-_size[2]), vec3(-_size[0],_size[1],-_size[2]),
vec3(_size[0],-_size[1],-_size[2]), vec3(_size[0],-_size[1],-_size[2]),
vec3(-_size[0],-_size[1],-_size[2])}; vec3(-_size[0],-_size[1],-_size[2])};
tmpVertices.clear();
for (int32_t iii=0 ; iii<36 ; iii+=3) { for (int32_t iii=0 ; iii<36 ; iii+=3) {
// normal calculation : // normal calculation :
//btVector3 normal = (vertices[indices[iii+2]]-vertices[indices[iii]]).cross(vertices[indices[iii+1]]-vertices[indices[iii]]); //btVector3 normal = (vertices[indices[iii+2]]-vertices[indices[iii]]).cross(vertices[indices[iii+1]]-vertices[indices[iii]]);
//normal.normalize (); //normal.normalize ();
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, vertices[indices[iii]]); tmpVertices.push_back(vertices[indices[iii]]);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, vertices[indices[iii+1]]); tmpVertices.push_back(vertices[indices[iii+1]]);
m_VBO->pushOnBuffer(EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID, vertices[indices[iii+2]]); tmpVertices.push_back(vertices[indices[iii+2]]);
} }
draw(_tmpColor, _transformationMatrix); draw(tmpVertices, _tmpColor, _transformationMatrix);
} }
namespace etk { namespace etk {
template<> std::string to_string(ewol::resource::Colored3DObject const&) { template<> std::string to_string(ewol::resource::Colored3DObject const&) {
@ -236,3 +237,5 @@ namespace etk {
ESIGNAL_DECLARE_SIGNAL(ewol::resource::Colored3DObject); ESIGNAL_DECLARE_SIGNAL(ewol::resource::Colored3DObject);
ESIGNAL_DECLARE_SIGNAL(ememory::SharedPtr<ewol::resource::Colored3DObject>); ESIGNAL_DECLARE_SIGNAL(ememory::SharedPtr<ewol::resource::Colored3DObject>);
#endif

View File

@ -5,22 +5,24 @@
*/ */
#pragma once #pragma once
#ifndef __TARGET_OS__Web
#include <etk/types.hpp> #include <etk/types.hpp>
#include <gale/resource/Resource.hpp> #include <gale/resource/Resource.hpp>
#include <ewol/resource/Image.hpp> #include <ewol/resource/Image.hpp>
#include <gale/resource/Program.hpp> #include <gale/resource/Program.hpp>
#define EWOL_RESOURCE_COLORED3DOBJECT_VBO_VERTEX_ID 0
namespace ewol { namespace ewol {
namespace resource { namespace resource {
/**
* @brief simple display of Colored3DObject ==> for DEBUG only Not availlable on ALL platform (like webGL)
*/
class Colored3DObject : public gale::Resource { class Colored3DObject : public gale::Resource {
protected: protected:
ememory::SharedPtr<gale::resource::Program> m_GLprogram; ememory::SharedPtr<gale::resource::Program> m_GLprogram;
int32_t m_GLPosition; int32_t m_GLPosition;
int32_t m_GLMatrix; int32_t m_GLMatrix;
int32_t m_GLColor; int32_t m_GLColor;
ememory::SharedPtr<gale::resource::VirtualBufferObject> m_VBO;
protected: protected:
Colored3DObject(); Colored3DObject();
void init(); void init();
@ -28,14 +30,17 @@ namespace ewol {
DECLARE_RESOURCE_FACTORY(Colored3DObject); DECLARE_RESOURCE_FACTORY(Colored3DObject);
virtual ~Colored3DObject(); virtual ~Colored3DObject();
public: public:
virtual void draw(const etk::Color<float>& _color, virtual void draw(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
bool _updateDepthBuffer=true, bool _updateDepthBuffer=true,
bool _depthtest=true); bool _depthtest=true);
virtual void draw(const etk::Color<float>& _color, virtual void draw(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
mat4& _transformationMatrix, mat4& _transformationMatrix,
bool _updateDepthBuffer=true, bool _updateDepthBuffer=true,
bool _depthtest=true); bool _depthtest=true);
virtual void drawLine(const etk::Color<float>& _color, virtual void drawLine(std::vector<vec3>& _vertices,
const etk::Color<float>& _color,
mat4& _transformationMatrix, mat4& _transformationMatrix,
bool _updateDepthBuffer=true, bool _updateDepthBuffer=true,
bool _depthtest=true); bool _depthtest=true);
@ -52,3 +57,4 @@ namespace ewol {
}; };
}; };
#endif

View File

@ -124,8 +124,8 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
std::string tmpConstruct; std::string tmpConstruct;
switch(m_idWidget) { switch(m_idWidget) {
case 0: case 0:
tmpConstruct = "<spin/>\n"; tmpConstruct = "<image src='DATA:sphere.png'/>\n";
tmpDescription = "Test ewol::widget::Spin"; tmpDescription = "Test ewol::widget::Image";
break; break;
case 1: case 1:
tmpConstruct = std::string() tmpConstruct = std::string()
@ -147,8 +147,8 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
tmpDescription = "Test ewol::widget::Label"; tmpDescription = "Test ewol::widget::Label";
break; break;
case 4: case 4:
tmpConstruct = "<image src='DATA:sphere.png'/>\n"; tmpConstruct = "<spin/>\n";
tmpDescription = "Test ewol::widget::Image"; tmpDescription = "Test ewol::widget::Spin";
break; break;
case 5: case 5:
tmpConstruct = "<checkbox><label>Simple string</label></checkbox>\n"; tmpConstruct = "<checkbox><label>Simple string</label></checkbox>\n";