Comments (8)
Thank you for your help.
I was able to compile and link for windows & MSVC, following these changes:
- Comment 'glTexParameteri' and 'glGenerateMipmap' in 'draw_lines_tris.cpp' (cinoli'b/gl)
- Add 'glut' lib in .pro file (glut32)
- Add '#include <qgl.h>' instead of 'GL/gl.h' & 'GL/glu.h'
from cinolib.
Hi,
I tested CinoLib on windows, using Qt4.8, and everything works fine. Could you please be more specific on the compile errors you are receiving?
from cinolib.
I donnot think this project could compile correctly without any modification on windows7 above.
For example, There is no function random() on windows. and no definition of M_PI_2 .
Furthermore, because of GLUT, so win32 not x64 is required, because of c++11, so vs2017 above is required.
If we use QGLWidget on qt5.10, why GL/gl.h should be include? It would produce compile errors.
from cinolib.
I am sure it works just because I have a number of collaborators using cinolib on Windows, and they did not report any issue to me. That being said, I am not an expert (it's been a while since the last time I used a windows machine). The only thing that comes to my mind right now is that maybe they are using a different compiler (MinGW and not MSVC). I will speak to them and get back to you ASAP. If they confirm this is a compiler issue, I will add MSVC compatibility to my TODO list. But be aware that making cinolib work with any compiler is not top priority to me right now, so I won't work on it soon.
The random() function appears only in the Shewchuk's predicates, which were written in C99, not fully supported by MSVC according to https://stackoverflow.com/questions/9610747/which-c99-features-are-available-in-the-ms-visual-studio-compiler. This is not my code, but rather a wrap of an extremely diffused tool for robust geometry processing. I therefore prefer not to edit it. At the moment I can only suggest you to either change compiler or comment that part (it won't hurt, it's just a wrap currently unused within cinolib). But thanks for the information, I will look for a more "modern" version of Shewchuk's predicates. Maybe there exists one...
Regarding includes: you are right, gl.h was unnecessary. I removed it from cinolib/gui/qt/glcanvas.h
Anyways, what compile errors were you getting? Because I was getting none, and I am not aware of any other person using cinolib and getting errors to this regard.
from cinolib.
These is the error I got when I compiled the first sample project:
E:/tools/qt/qt5101/Tools/mingw530_32/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'E:/projects/cinolib/examples/build-01_base_app_trimesh-Desktop_Qt_5_10_1_MinGW_32bit-Debug'
g++ -c -fno-keep-inline-dllexport -Wno-deprecated-declarations -O2 -std=gnu++11 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DCINOLIB_USES_OPENGL -DCINOLIB_USES_QT -DDATA_PATH=\"E:/projects/cinolib/examples/01_base_app_trimesh/../data/\" -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\01_base_app_trimesh -I. -I..\..\external\eigen -I..\..\include -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include\QtOpenGL -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include\QtWidgets -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include\QtGui -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include\QtANGLE -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\include\QtCore -Irelease -I..\..\..\..\tools\qt\qt5101\5.10.1\mingw53_32\mkspecs\win32-g++ -o release\main.o ..\01_base_app_trimesh\main.cpp
In file included from ..\..\include/cinolib/Shewchuk_predicates.h:70:0,
from ..\..\include/cinolib/geometry/polygon.cpp:34,
from ..\..\include/cinolib/geometry/polygon.h:104,
from ..\..\include/cinolib/meshes/abstract_polygonmesh.cpp:36,
from ..\..\include/cinolib/meshes/abstract_polygonmesh.h:180,
from ..\..\include/cinolib/meshes/trimesh.h:37,
from ..\..\include/cinolib/meshes/meshes.h:35,
from ..\01_base_app_trimesh\main.cpp:13:
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'double cinolib::doublerand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:516:14: error: 'random' was not declared in this scope
a = random();
^
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'double cinolib::narrowdoublerand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:543:14: error: 'random' was not declared in this scope
a = random();
^
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'double cinolib::uniformdoublerand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:567:14: error: 'random' was not declared in this scope
a = random();
^
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'float cinolib::floatrand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:588:14: error: 'random' was not declared in this scope
a = random();
^
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'float cinolib::narrowfloatrand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:614:14: error: 'random' was not declared in this scope
a = random();
^
..\..\include/cinolib/Shewchuk_predicates.cpp: In function 'float cinolib::uniformfloatrand()':
..\..\include/cinolib/Shewchuk_predicates.cpp:637:14: error: 'random' was not declared in this scope
a = random();
^
In file included from ..\..\include/cinolib/gl/draw_lines_tris.h:97:0,
from ..\..\include/cinolib/meshes/abstract_drawable_polygonmesh.h:38,
from ..\..\include/cinolib/meshes/drawable_trimesh.h:37,
from ..\..\include/cinolib/meshes/meshes.h:38,
from ..\01_base_app_trimesh\main.cpp:13:
..\..\include/cinolib/gl/draw_lines_tris.cpp: In function 'void cinolib::render_tris(const cinolib::RenderData&)':
..\..\include/cinolib/gl/draw_lines_tris.cpp:74:43: error: 'glGenerateMipmap' was not declared in this scope
glGenerateMipmap(GL_TEXTURE_2D);
^
In file included from ..\..\include/cinolib/meshes/drawable_trimesh.h:37:0,
from ..\..\include/cinolib/meshes/meshes.h:38,
from ..\01_base_app_trimesh\main.cpp:13:
..\..\include/cinolib/meshes/abstract_drawable_polygonmesh.h: In instantiation of 'cinolib::SurfaceMeshControlPanel<Mesh>::connect()::<lambda()> [with Mesh = cinolib::DrawableTrimesh<>]':
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:520:14: required from 'struct cinolib::SurfaceMeshControlPanel<Mesh>::connect() [with Mesh = cinolib::DrawableTrimesh<>]::<lambda()>'
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:515:25: required from 'void cinolib::SurfaceMeshControlPanel<Mesh>::connect() [with Mesh = cinolib::DrawableTrimesh<>]'
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:408:12: required from 'cinolib::SurfaceMeshControlPanel<Mesh>::SurfaceMeshControlPanel(Mesh*, cinolib::GLcanvas*, QWidget*) [with Mesh = cinolib::DrawableTrimesh<>]'
..\01_base_app_trimesh\main.cpp:30:80: required from here
..\..\include/cinolib/meshes/abstract_drawable_polygonmesh.h:44:7: warning: defaulted move assignment for 'cinolib::AbstractDrawablePolygonMesh<cinolib::Trimesh<> >' calls a non-trivial move assignment operator for virtual base 'cinolib::Trimesh<>' [-Wvirtual-move-assign]
class AbstractDrawablePolygonMesh : public virtual Mesh, public DrawableObject
^
In file included from E:/tools/qt/qt5101/Tools/mingw530_32/i686-w64-mingw32/include/c++/cassert:43:0,
from ..\..\external\eigen/Eigen/Core:289,
from ..\..\external\eigen/Eigen/Dense:1,
from ..\..\include/cinolib/geometry/tetrahedron.cpp:36,
from ..\..\include/cinolib/geometry/tetrahedron.h:73,
from ..\..\include/cinolib/meshes/tetmesh.cpp:34,
from ..\..\include/cinolib/meshes/tetmesh.h:157,
from ..\..\include/cinolib/meshes/meshes.h:43,
from ..\01_base_app_trimesh\main.cpp:13:
..\..\include/cinolib/scalar_field.cpp: In instantiation of 'void cinolib::ScalarField::copy_to_mesh(Mesh&, int) const [with Mesh = cinolib::DrawableTrimesh<>]':
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:676:52: required from 'cinolib::SurfaceMeshControlPanel<Mesh>::connect()::<lambda()> [with Mesh = cinolib::DrawableTrimesh<>]'
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:676:36: required from 'struct cinolib::SurfaceMeshControlPanel<Mesh>::connect() [with Mesh = cinolib::DrawableTrimesh<>]::<lambda()>'
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:669:25: required from 'void cinolib::SurfaceMeshControlPanel<Mesh>::connect() [with Mesh = cinolib::DrawableTrimesh<>]'
..\..\include/cinolib/gui/qt/surface_mesh_control_panel.cpp:408:12: required from 'cinolib::SurfaceMeshControlPanel<Mesh>::SurfaceMeshControlPanel(Mesh*, cinolib::GLcanvas*, QWidget*) [with Mesh = cinolib::DrawableTrimesh<>]'
..\01_base_app_trimesh\main.cpp:30:80: required from here
..\..\include/cinolib/scalar_field.cpp:77:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
assert(rows() == m.num_verts());
^
In file included from ..\..\include/cinolib/scalar_field.h:89:0,
from ..\..\include/cinolib/gui/qt/surface_mesh_control_panel.h:36,
from ..\..\include/cinolib/gui/qt/qt_gui_tools.h:35,
from ..\01_base_app_trimesh\main.cpp:14:
..\..\include/cinolib/scalar_field.cpp:78:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(uint vid=0; vid<rows(); ++vid)
^
Makefile.Release:743: recipe for target 'release/main.o' failed
mingw32-make[1]: Leaving directory 'E:/projects/cinolib/examples/build-01_base_app_trimesh-Desktop_Qt_5_10_1_MinGW_32bit-Debug'
mingw32-make[1]: *** [release/main.o] Error 1
Makefile:36: recipe for target 'release' failed
mingw32-make: *** [release] Error 2
from cinolib.
Little update: I talked with some windows users, who confirmed they had to tweak something to make the library compile. I am now in the process of incorporating their local changes into the master branch.
@trlsmax, thank you for the full log. All your errors should have been fixed. I commented all the calls to the C random function (I realized they were not used in the actual predicates).
from cinolib.
Hello,
Could you please upload an update of the qt.pro file for compilation with Windows 10 and Msvc 2017 ?or at lEast give indications, since there are many compile errors (GL).
thank you
from cinolib.
Hi @yvanblanchard
unfortunately I haven't been a windows user for the last 15 years so I am not an expert. That being said, I am supervising a few students that work on windows and managed to compile the library. They also experienced similar issues. Two things that I remember:
-
the *.exe does not exist problem that you reported in your email seems to be related wiht some path containing spaces somewhere inside Qt, and always occurred to my windows student when they tried to compile the library examples. However, it does not seem to arise if you create an empty project, and literally copy paste the code in the examples and build
-
the GL related stuff depends on the fact that by default windows loads a super old GL version with no extensions. I also use legacy GL code in CinoLib, but it relies on an extension for the call to
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
, which is contained in the file draw_lines_tris.cpp, line 80. Just comment it out, it will do no harm
I know that what I am proposing are horrible hacks, but at the moment it is not worth for me addressing these issues in a more permanent way. I plan to do major changes to the library to fix all of this, getting rid of Qt for the interface, and moving to glfw + ImGui, also implementing a shader-based rendering pipeline. I am not sure when all of this will happen, CinoLib is just a side project to support my real job (academic research). I wish my days were 48h long :P
from cinolib.
Related Issues (20)
- Undefined reference to `orient2d' / `orient3d' HOT 1
- how to use the hex_transition_install function? HOT 1
- transform and bake_rotation_matrix undefined in hex_transition_orient.cpp HOT 1
- Is it possible to offset a mesh preserving its sharp edges? HOT 6
- How to generate a cinolib? HOT 2
- Cut a volume mesh based on embedded level set HOT 15
- no member named 'update_hex_quality' HOT 3
- OpenGL rendering: soft shadows HOT 3
- How to use remesh_Botsch_Kobbelt_2004 without gl HOT 3
- Orient a closed surface mesh HOT 4
- Custom data in Tetmesh HOT 1
- All-hexahedral meshing? HOT 1
- Shadow casting question HOT 5
- Embed a polyline into a mesh HOT 4
- error when run sliced_CLI_loader HOT 1
- CMD + click ,What button is cmd in surface_painter project HOT 1
- Link errors HOT 1
- information HOT 8
- Imgui control hidden HOT 2
- How to implement algorithms such as QEM HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cinolib.