Commit 391cf7b0 authored by Sylvain Thery's avatar Sylvain Thery

fix schnapps selection with double

parent 6c2a7b92
...@@ -191,7 +191,7 @@ bool AttributeMultiVector<T>::copy(const AttributeMultiVectorGen* atmvg) ...@@ -191,7 +191,7 @@ bool AttributeMultiVector<T>::copy(const AttributeMultiVectorGen* atmvg)
} }
for (unsigned int i = 0; i < atmv->m_tableData.size(); ++i) for (unsigned int i = 0; i < atmv->m_tableData.size(); ++i)
std::memcpy(m_tableData[i], atmv->m_tableData[i], _BLOCKSIZE_ * sizeof(T)); std::memcpy( (void*) m_tableData[i], (void*) atmv->m_tableData[i], _BLOCKSIZE_ * sizeof(T));
return true; return true;
} }
......
...@@ -28,23 +28,42 @@ namespace CGoGN ...@@ -28,23 +28,42 @@ namespace CGoGN
namespace Utils namespace Utils
{ {
template <typename T> template <unsigned int VEC_DIM, typename T>
void VBO::updateData(std::vector<T>& data) void VBO::updateData(std::vector<T>& data)
{ {
if (m_lock) if (m_lock)
{ {
CGoGNerr << "Error locked VBO" << CGoGNendl; CGoGNerr << "VBO::updateData : Error locked VBO" << CGoGNendl;
return; return;
} }
if (data.empty()) if (data.empty())
return; return;
m_data_size = sizeof(T) / sizeof(float); m_data_size = VEC_DIM;
m_nbElts = uint32(data.size()); m_nbElts = uint32(data.size());
glBindBuffer(GL_ARRAY_BUFFER, *m_id); glBindBuffer(GL_ARRAY_BUFFER, *m_id);
glBufferData(GL_ARRAY_BUFFER, m_nbElts * sizeof(T), &(data[0]), GL_STREAM_DRAW);
if (sizeof(T) / sizeof(double) == VEC_DIM)
{
unsigned int nbf = m_nbElts * m_data_size;
float* buffer = new float[nbf];
float* ptr_out = buffer;
double* ptr_in = reinterpret_cast<double*>(&(data[0]));
for (unsigned int i=0; i<nbf; ++i)
*ptr_out++ = float(*ptr_in++);
glBufferData(GL_ARRAY_BUFFER, nbf * sizeof(float), buffer, GL_STREAM_DRAW);
delete[] buffer;
return;
}
if (sizeof(T) / sizeof(float) == VEC_DIM)
{
glBufferData(GL_ARRAY_BUFFER, m_nbElts * VEC_DIM * sizeof(float), &(data[0]), GL_STREAM_DRAW);
return;
}
// we should normally never reach this code
CGoGNerr << "VBO::updateData : Error only float, double, VecXf, VecXd" << CGoGNendl;
} }
} // namespace Utils } // namespace Utils
......
...@@ -142,8 +142,10 @@ public: ...@@ -142,8 +142,10 @@ public:
/** /**
* update data from given data vector * update data from given data vector
* @warning use only with include vbo.h (not vbo_base.h) * @warning use only with include vbo.h (not vbo_base.h)
* @tparam VEC_DIM dim of vec (1,2,3 or 4)
* @param data a vector of float/VecXf or double/VecXd
*/ */
template <typename T> template <unsigned int VEC_DIM, typename T>
void updateData(std::vector<T>& data); void updateData(std::vector<T>& data);
void* lockPtr(); void* lockPtr();
......
...@@ -39,43 +39,7 @@ namespace CGoGN ...@@ -39,43 +39,7 @@ namespace CGoGN
namespace Utils namespace Utils
{ {
//#ifdef CGOGN_USE_OGL_CORE_PROFILE
//unsigned int GLSLShader::CURRENT_OGL_VERSION = 3;
//unsigned int GLSLShader::MAJOR_OGL_CORE = 3;
//unsigned int GLSLShader::MINOR_OGL_CORE = 3;
//#else
//unsigned int GLSLShader::CURRENT_OGL_VERSION = 2;
//unsigned int GLSLShader::MAJOR_OGL_CORE = 2;
//unsigned int GLSLShader::MINOR_OGL_CORE = 1;
//#endif
//std::string GLSLShader::DEFINES_GL2=\
//"#version 110\n"
//"#define PRECISION float pipo_PRECISION\n"
//"#define ATTRIBUTE attribute\n"
//"#define VARYING_VERT varying\n"
//"#define VARYING_FRAG varying\n"
//"#define FRAG_OUT_DEF float pipo_FRAGDEF\n"
//"#define FRAG_OUT gl_FragColor\n"
//"#define INVARIANT_POS float pipo_INVARIANT\n"
//"#define TEXTURE2D texture2D\n";
//std::string GLSLShader::DEFINES_GL3=\
//"#version 150\n"
//"#define PRECISION precision highp float\n"
//"#define ATTRIBUTE in\n"
//"#define VARYING_VERT out\n"
//"#define VARYING_FRAG in\n"
//"#define FRAG_OUT_DEF out vec4 outFragColor\n"
//"#define FRAG_OUT outFragColor\n"
//"#define INVARIANT_POS invariant gl_Position\n"
//"#define TEXTURE2D texture\n";
//std::string* GLSLShader::DEFINES_GL = NULL;
std::vector<std::string> GLSLShader::m_pathes; std::vector<std::string> GLSLShader::m_pathes;
......
...@@ -78,10 +78,7 @@ Dependencies ...@@ -78,10 +78,7 @@ Dependencies
------------ ------------
* install (or compile) Qt (choose 32/64 bits) * install (or compile) Qt (choose 32/64 bits)
* install python 2.7 (choose 32/64 bits) (Needed for SCHNApps) * install python 2.7 (choose 32/64 bits) (Needed for SCHNApps)
* Other Windows dependencies are furnished at: * Other Windows dependencies are furnished at: http://cgogn.unistra.fr/download
* http://cgogn.unistra.fr/Dependencies/dependencies.txt
* http://cgogn.unistra.fr/Dependencies/windows_dependencies32.zip
* http://cgogn.unistra.fr/Dependencies/windows_dependencies64.zip
**Supported compilers: Visual C++ 2013 (12.0) or greater** **Supported compilers: Visual C++ 2013 (12.0) or greater**
......
...@@ -24,11 +24,12 @@ ADD_SUBDIRECTORY(surface_subdivision) ...@@ -24,11 +24,12 @@ ADD_SUBDIRECTORY(surface_subdivision)
ADD_SUBDIRECTORY(surface_selection) ADD_SUBDIRECTORY(surface_selection)
ADD_SUBDIRECTORY(surface_deformation) ADD_SUBDIRECTORY(surface_deformation)
ADD_SUBDIRECTORY(surface_modelisation) ADD_SUBDIRECTORY(surface_modelisation)
ADD_SUBDIRECTORY(surface_radiance)
ADD_SUBDIRECTORY(surface_distance) ADD_SUBDIRECTORY(surface_distance)
ADD_SUBDIRECTORY(volume_import) ADD_SUBDIRECTORY(volume_import)
#ADD_SUBDIRECTORY(surface_tilings) #ADD_SUBDIRECTORY(surface_tilings)
#ADD_SUBDIRECTORY(surface_radiance)
#ADD_SUBDIRECTORY(cage2D_deformation) #ADD_SUBDIRECTORY(cage2D_deformation)
#ADD_SUBDIRECTORY(cage3D_deformation) #ADD_SUBDIRECTORY(cage3D_deformation)
......
...@@ -110,7 +110,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -110,7 +110,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
CellSelectorGen* selector = m_schnapps->getSelectedSelector(orbit); CellSelectorGen* selector = m_schnapps->getSelectedSelector(orbit);
if(selector) if(selector)
{ {
unsigned int nbCells = map->getGenericMap()->getNbCells(orbit); // unsigned int nbCells = map->getGenericMap()->getNbCells(orbit);
switch(orbit) switch(orbit)
{ {
case VERTEX : { case VERTEX : {
...@@ -132,7 +132,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -132,7 +132,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
{ {
std::vector<PFP2::VEC3> selectionPoint; std::vector<PFP2::VEC3> selectionPoint;
selectionPoint.push_back(p.positionAttribute[m_selectingVertex]); selectionPoint.push_back(p.positionAttribute[m_selectingVertex]);
m_selectionSphereVBO->updateData(selectionPoint); m_selectionSphereVBO->updateData<3>(selectionPoint);
m_pointSprite->setAttributePosition(m_selectionSphereVBO); m_pointSprite->setAttributePosition(m_selectionSphereVBO);
m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f)); m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f));
m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f)); m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f));
...@@ -184,7 +184,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -184,7 +184,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
// PFP2::MAP* m = static_cast<MapHandler<PFP2>*>(map)->getMap(); // PFP2::MAP* m = static_cast<MapHandler<PFP2>*>(map)->getMap();
std::vector<PFP2::VEC3> selectionPoint; std::vector<PFP2::VEC3> selectionPoint;
selectionPoint.push_back(p.positionAttribute[m_selectingEdge.dart]); selectionPoint.push_back(p.positionAttribute[m_selectingEdge.dart]);
m_selectionSphereVBO->updateData(selectionPoint); m_selectionSphereVBO->updateData<3>(selectionPoint);
m_pointSprite->setAttributePosition(m_selectionSphereVBO); m_pointSprite->setAttributePosition(m_selectionSphereVBO);
m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f)); m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f));
...@@ -237,7 +237,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -237,7 +237,7 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
std::vector<PFP2::VEC3> selectionPoint; std::vector<PFP2::VEC3> selectionPoint;
selectionPoint.push_back(p.positionAttribute[m_selectingFace.dart]); selectionPoint.push_back(p.positionAttribute[m_selectingFace.dart]);
m_selectionSphereVBO->updateData(selectionPoint); m_selectionSphereVBO->updateData<3>(selectionPoint);
m_pointSprite->setAttributePosition(m_selectionSphereVBO); m_pointSprite->setAttributePosition(m_selectionSphereVBO);
m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f)); m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f));
...@@ -561,7 +561,7 @@ void Surface_Selection_Plugin::updateSelectedCellsRendering() ...@@ -561,7 +561,7 @@ void Surface_Selection_Plugin::updateSelectedCellsRendering()
std::vector<PFP2::VEC3> selectedPoints; std::vector<PFP2::VEC3> selectedPoints;
for(std::vector<Vertex>::const_iterator v = selectedCells.begin(); v != selectedCells.end(); ++v) for(std::vector<Vertex>::const_iterator v = selectedCells.begin(); v != selectedCells.end(); ++v)
selectedPoints.push_back(p.positionAttribute[*v]); selectedPoints.push_back(p.positionAttribute[*v]);
m_selectedVerticesVBO->updateData(selectedPoints); m_selectedVerticesVBO->updateData<3>(selectedPoints);
m_selectedVertices_dirty = false; m_selectedVertices_dirty = false;
break; break;
} }
......
...@@ -178,11 +178,11 @@ void Surface_Selection_DockTab::clearPressed() ...@@ -178,11 +178,11 @@ void Surface_Selection_DockTab::clearPressed()
{ {
MapHandlerGen* map = m_schnapps->getSelectedMap(); MapHandlerGen* map = m_schnapps->getSelectedMap();
unsigned int orbit = m_schnapps->getCurrentOrbit(); unsigned int orbit = m_schnapps->getCurrentOrbit();
CellSelectorGen* sel = m_schnapps->getSelectedSelector(orbit);
if (map) if (map && sel)
{ {
m_plugin->clearSelection(map->getName(), orbit, m_schnapps->getSelectedSelector(orbit)->getName()); m_plugin->clearSelection(map->getName(), orbit, sel->getName());
m_plugin->pythonRecording("clearSelection", "", map->getName(), orbit, m_schnapps->getSelectedSelector(orbit)->getName()); m_plugin->pythonRecording("clearSelection", "", map->getName(), orbit, sel->getName());
} }
} }
} }
......
...@@ -329,7 +329,7 @@ void View::init() ...@@ -329,7 +329,7 @@ void View::init()
std::cout << "using " << glGetString(GL_VERSION) << std::endl; std::cout << "using " << glGetString(GL_VERSION) << std::endl;
qglviewer::Camera* c = this->camera(); // qglviewer::Camera* c = this->camera();
this->setCamera(m_currentCamera); this->setCamera(m_currentCamera);
// delete c; // delete c;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment