# Segfault in glDrawArrays without CMake (How to link openGL without CMAKE?)

**URL:** https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413
**Category:** Support
**Created:** [August 14, 2024, 6:06am UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413 "2024-08-14T06:06:17Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![metamurk](https://discourse.vtk.org/user_avatar/discourse.vtk.org/metamurk/32/9665_2.png) [@metamurk](https://discourse.vtk.org/u/metamurk)
#### Post date: [August 14, 2024, 6:06am UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413/1 "2024-08-14T06:06:17Z")

</div>

Hello together.

I’m using vtk 9.3.1. i build it because of project envrionemnt without cmake, but linked vtk in VS22 directly. Everything works, I used auto\_init. But…

I know try to derive from vtkOpenGLPolyDataMapper and call glDrawArrays . This cannot be linked. When I link Opengl directly, it builds, but segfaults in gl calls.

Whenn I build this class in a cmake environemnt, it runs.

How can I get these gl calls in my VS environment?  
Thank you very much

---

<div class="post-metadata">

### Author: ![metamurk](https://discourse.vtk.org/user_avatar/discourse.vtk.org/metamurk/32/9665_2.png) [@metamurk](https://discourse.vtk.org/u/metamurk)
#### Post date: [August 14, 2024, 9:52am UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413/2 "2024-08-14T09:52:56Z")

</div>

This is the stack trace:

| | ucrtbased.dll!00007ffdac510b11() | Unbekannt |
| --- | --- | --- |
| | ucrtbased.dll!00007ffdac50f565() | Unbekannt |
| \> | vtkRenderingOpenGL2-9.3d.dll!operator delete(void \* block) Zeile 38 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!operator delete(void \* block, unsigned \_\_int64 \_\_formal) Zeile 32 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Deallocate\<16,0\>(void \* \_Ptr, unsigned \_\_int64 \_Bytes) Zeile 268 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Default\_allocator\_traits\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>::deallocate(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al, std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\> \* const \_Ptr, const unsigned \_\_int64 \_Count) Zeile 720 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>::\_Freenode0\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al, std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\> \* \_Ptr) Zeile 375 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>::\_Freenode\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al, std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\> \* \_Ptr) Zeile 382 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\_val\<std::\_Tree\_simple\_types\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\>::\_Erase\_tree\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al, std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\> \* \_Rootnode) Zeile 747 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\_val\<std::\_Tree\_simple\_types\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\>::\_Erase\_tree\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al, std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\> \* \_Rootnode) Zeile 746 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\_val\<std::\_Tree\_simple\_types\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\>::\_Erase\_head\<std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\>\>(std::allocator\<std::\_Tree\_node\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>,void \*\>\> & \_Al) Zeile 754 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::\_Tree\<std::\_Tmap\_traits\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>,0\>\>::~\_Tree\<std::\_Tmap\_traits\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>,0\>\>() Zeile 1075 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!std::map\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\>::~map\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\>() | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLPolyDataMapper::ReplaceShaderRenderPass(std::map\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\> shaders, vtkRenderer \* \_\_formal, vtkActor \* act, bool prePass) Zeile 587 | C++ |
| | PCMA.exe!vtkOpenGLGridMapper::ReplaceShaderValues(std::map\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\> shaders, vtkRenderer \* ren, vtkActor \* actor) Zeile 43 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLPolyDataMapper::BuildShaders(std::map\<enum vtkShader::Type,vtkShader \*,std::less,std::allocator\<std::pair\<enum vtkShader::Type const ,vtkShader \*\>\>\> shaders, vtkRenderer \* ren, vtkActor \* actor) Zeile 310 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLPolyDataMapper::UpdateShaders(vtkOpenGLHelper & cellBO, vtkRenderer \* ren, vtkActor \* actor) Zeile 2605 | C++ |
| | PCMA.exe!vtkOpenGLGridMapper::RenderPiece(vtkRenderer \* ren, vtkActor \* actor) Zeile 253 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkPolyDataMapper::Render(vtkRenderer \* ren, vtkActor \* act) Zeile 36 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLActor::Render(vtkRenderer \* ren, vtkMapper \* mapper) Zeile 95 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkActor::RenderTranslucentPolygonalGeometry(vtkViewport \* vp) Zeile 286 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkProp::RenderFilteredTranslucentPolygonalGeometry(vtkViewport \* v, vtkInformation \* requiredKeys) Zeile 288 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkDefaultPass::RenderFilteredTranslucentPolygonalGeometry(const vtkRenderState \* s) Zeile 115 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkTranslucentPass::Render(const vtkRenderState \* s) Zeile 33 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOrderIndependentTranslucentPass::Render(const vtkRenderState \* s) Zeile 336 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLRenderer::DeviceRenderTranslucentPolygonalGeometry(vtkFrameBufferObjectBase \* fbo) Zeile 552 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLRenderer::UpdateGeometry(vtkFrameBufferObjectBase \* fbo) Zeile 398 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLRenderer::DeviceRender() Zeile 292 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkRenderer::Render() Zeile 374 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkRendererCollection::Render() Zeile 42 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkRenderWindow::DoStereoRender() Zeile 347 | C++ |
| | vtkRenderingCore-9.3d.dll!vtkRenderWindow::Render() Zeile 306 | C++ |
| | vtkRenderingOpenGL2-9.3d.dll!vtkOpenGLRenderWindow::Render() Zeile 2766 | C++ |
| | PCMA.exe!Gehring::PCMA::wxVTKRenderWindowInteractor::Render() Zeile 385 | C++ |
| | PCMA.exe!Gehring::PCMA::wxVTKRenderWindowInteractor::OnPaint(wxPaintEvent & \_\_formal) Zeile 194 | C++ |
| | [Externer Code] | |
| | PCMA.exe!WinMain(HINSTANCE\_\_ \* hInstance, HINSTANCE\_\_ \* hPrevInstance, char \* lpCmdLine, int nCmdShow) Zeile 19 | C++ |
| | [Externer Code] | |

---

<div class="post-metadata">

### Author: ![Jens\_Munk\_Hansen](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jens_munk_hansen/32/1215_2.png) [@Jens\_Munk\_Hansen](https://discourse.vtk.org/u/Jens_Munk_Hansen)
#### Post date: [August 14, 2024, 6:25pm UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413/3 "2024-08-14T18:25:38Z")

</div>

It looks a lot like you have some 32/64-bit issues or perhaps binaries are incompatible. Deriving from `vtkOpenGLPolyDataMapper` is generally a bad idea. As far as I recall, the mappers are created using a factory and the platform / settings determine which mapper is returned.

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [August 16, 2024, 9:39pm UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413/4 "2024-08-16T21:39:34Z")

</div>

Hello,

When I derive VTK classes, I do like this:

In the header:

```cpp
#include <vtkObjectFactory.h>
#include <vtkInteractorStyleTrackballCamera.h> //header of base class
#include <vtkSmartPointer.h>

// v3dMouseInteractor derives from a VTK class.
class v3dMouseInteractor : public vtkInteractorStyleTrackballCamera {

public:
    static v3dMouseInteractor* New(); //"constructor" of derived class
    vtkTypeMacro(v3dMouseInteractor, vtkInteractorStyleTrackballCamera)
    // ^-----derived goes here ^-------base goes here

...

};

```

In the `.cpp`:

```cpp
// Implementation of the New() function for the drived class.
vtkStandardNewMacro(v3dMouseInteractor);
...

```

I also build my VTK project sans CMake, then I have to put these in the very beginning of the OpenGL-dealing `.cpp`s (the modules that need initialization may vary according to your needs). Module names are after their respective `.dll`/`.so` libraries.

```cpp
//----------Since we're not building with CMake, we need to init the VTK modules------------------
//--------------linking with the VTK libraries is often not enough--------------------------------
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2) // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
...
//------------------------------------------------------------------------------------------------

```

I hope this helps,  
PC

---

<div class="post-metadata">

### Author: ![Jens\_Munk\_Hansen](https://discourse.vtk.org/user_avatar/discourse.vtk.org/jens_munk_hansen/32/1215_2.png) [@Jens\_Munk\_Hansen](https://discourse.vtk.org/u/Jens_Munk_Hansen)
#### Post date: [September 10, 2024, 6:03pm UTC](https://discourse.vtk.org/t/segfault-in-gldrawarrays-without-cmake-how-to-link-opengl-without-cmake/14413/5 "2024-09-10T18:03:23Z")

</div>

I believe that you only include the `vtkObjectFactory.h` in the .cxx file
