digitalmars.D.learn - Strange segfault (Derelict/OpenGL)
- Robin Schroer (63/63) Aug 29 2014 I'm not entirely sure where to post, so I will put it here.
- "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> (7/19) Aug 29 2014 Can you still try to get a backtrace with `bt`? This looks like
- Robin Schroer (18/30) Aug 29 2014 Yes, I can:
- Mike Parker (8/11) Aug 29 2014 Some code would be helpful. My first thought is that you aren't loading
- Robin Schroer (12/27) Aug 30 2014 So, I dug around a lot. I am using DerelictOrg, sorry if this was
- Mike Parker (16/29) Aug 30 2014 FYI, if you need the deprecated stuff it's all there.
- John Colvin (19/82) Aug 29 2014 Are you following this pattern?:
- ponce (3/9) Aug 29 2014 As John Colvin said, forgetting to call DerelictGL3.reload() is a
- Robin Schroer (3/13) Aug 29 2014 I definitely reload after setting the context and before trying
- Andrej Mitrovic via Digitalmars-d-learn (5/7) Aug 29 2014 Typically these kinds of errors happen when a null function pointer is
- Mike Parker (8/10) Aug 29 2014 As the README in Derelict 3 points out, that project is no longer
I'm not entirely sure where to post, so I will put it here. I'm playing around with D and Derelict 3 to make something with OpenGL (don't really know what yet). I managed to open a window, add an OpenGL context, clear the screen and flip buffers. But as soon as I try to render a triangle, my program crashes. I already tried hardcoding values in the shaders to rule them out. I end up with: Error executing command run: Program exited with code -11 Upon running with gdb, I get: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () which is not really helpful to me. dub -v's output: [...] Full exception: object.Exception source/dub/generators/build.d(405): Program exited with code -11 ---------------- dub(pure safe bool std.exception.enforce!(bool).enforce(bool, lazy const(char)[], immutable(char)[], ulong)+0x6b) [0x67346f] dub(void dub.generators.build.BuildGenerator.runTarget(dub.internal.vibeco pat.inet.path.Path, const(dub.compilers.compiler.BuildSettings), immutable(char)[][])+0x4dc) [0x62db70] dub(void dub.generators.build.BuildGenerator.generateTargets(dub.generators.generato .GeneratorSettings, const(dub.generators.generator.ProjectGenerator.TargetInfo[immutab e(char)[]]))+0x231) [0x62a75d] dub(void dub.generators.generator.ProjectGenerator.generate(dub.generators.generator.Gener torSettings)+0x2de) [0x62f9a2] dub(void dub.dub.Dub.generateProject(immutable(char)[], dub.generators.generator.GeneratorSettings)+0xaa) [0x5f1f46] dub(int dub.commandline.GenerateCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x677) [0x5e5b6b] dub(int dub.commandline.BuildCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x8d) [0x5e5e81] dub(int dub.commandline.RunCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x8d) [0x5e6041] dub(int dub.commandline.runDubCommandLine(immutable(char)[][])+0x1211) [0x5e3b8d] dub(_Dmain+0x20) [0x5e2334] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().void __lambda1()+0x18) [0x6ce504] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2a) [0x6ce45e] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()+0x30) [0x6ce4c4] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2a) [0x6ce45e] dub(_d_run_main+0x1a3) [0x6ce3df] dub(main+0x25) [0x5e2979] /lib64/libc.so.6(__libc_start_main+0xf5) [0x3dcae21d65] I am using the current master versions of Derelict, dub 0.9.21, dmd v2.066.0, on Linux 3.15.7 x86_64 I can post my source if needed, but it is quite a lot already. I'm not really sure if it is my fault or a bug in Derelict or dmd, hopefully someone is able to track this down. -- Robin Schroer
Aug 29 2014
On Friday, 29 August 2014 at 11:23:34 UTC, Robin Schroer wrote:I'm not entirely sure where to post, so I will put it here.This is the right place.I'm playing around with D and Derelict 3 to make something with OpenGL (don't really know what yet). I managed to open a window, add an OpenGL context, clear the screen and flip buffers. But as soon as I try to render a triangle, my program crashes. I already tried hardcoding values in the shaders to rule them out. I end up with: Error executing command run: Program exited with code -11 Upon running with gdb, I get: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () which is not really helpful to me.Can you still try to get a backtrace with `bt`? This looks like it's calling a null function pointer. I'm not familiar with Derelict, but I remember that some initialization needs to be done which involves setting up function pointers; your problem is probably related to that.
Aug 29 2014
On Friday, 29 August 2014 at 11:51:47 UTC, Marc Schütz wrote:On Friday, 29 August 2014 at 11:23:34 UTC, Robin Schroer wrote:Yes, I can: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) bt (this=0x7ffff7ecfe00) at source/dgame/display.d:95 display.Display.render() is what tries to render the triangle using a glBegin-block.Upon running with gdb, I get: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () which is not really helpful to me.Can you still try to get a backtrace with `bt`? This looks like it's calling a null function pointer. I'm not familiar with Derelict, but I remember that some initialization needs to be done which involves setting up function pointers; your problem is probably related to that.
Aug 29 2014
On 8/29/2014 9:16 PM, Robin Schroer wrote:On Friday, 29 August 2014 at 11:51:47 UTC, Marc Schütz wrote:display.Display.render() is what tries to render the triangle using a glBegin-block.Some code would be helpful. My first thought is that you aren't loading properly. DerelictGL3 does not load deprecated functions, but you're trying to call a deprecated function. Are you loading DerelictGL or DerelictGL3? --- This email is free from viruses and malware because avast! Antivirus protection is active. http://www.avast.com
Aug 29 2014
On Friday, 29 August 2014 at 15:20:00 UTC, Mike Parker wrote:As the README in Derelict 3 points out, that project is no longer updated. You should be using the binding from the DerelictOrg project [1] for anything new. [1] https://github.com/DerelictOrg/<stitch>On 8/29/2014 9:16 PM, Robin Schroer wrote:So, I dug around a lot. I am using DerelictOrg, sorry if this was unclear, I was under the impression that it is still version 3. But anyway, I found out that some of my GL code is actually refering to null pointers because I have been using deprecated functions. So I am able to establish an OpenGL 3.3 context without crashing (although my test does not render yet, but that is another problem). Thank you to everyone nudging me in the right direction. -- Robin SchroerOn Friday, 29 August 2014 at 11:51:47 UTC, Marc Schütz wrote:display.Display.render() is what tries to render the triangle using a glBegin-block.Some code would be helpful. My first thought is that you aren't loading properly. DerelictGL3 does not load deprecated functions, but you're trying to call a deprecated function. Are you loading DerelictGL or DerelictGL3?
Aug 30 2014
On 8/30/2014 11:12 PM, Robin Schroer wrote:FYI, if you need the deprecated stuff it's all there. ``` // Modern GL only // import derelict.opengl3.gl3; // All of it, including the deprecated stuff import derelict.opengl3.gl; void loadGL() { DerelictGL.load(); DerelictGL.reload(); // Assuming a context is already created } ``` DerelictGL extends DerelictGL3, so it loads everything. --- This email is free from viruses and malware because avast! Antivirus protection is active. http://www.avast.comSome code would be helpful. My first thought is that you aren't loading properly. DerelictGL3 does not load deprecated functions, but you're trying to call a deprecated function. Are you loading DerelictGL or DerelictGL3?So, I dug around a lot. I am using DerelictOrg, sorry if this was unclear, I was under the impression that it is still version 3. But anyway, I found out that some of my GL code is actually refering to null pointers because I have been using deprecated functions. So I am able to establish an OpenGL 3.3 context without crashing (although my test does not render yet, but that is another problem). Thank you to everyone nudging me in the right direction.
Aug 30 2014
On Friday, 29 August 2014 at 11:23:34 UTC, Robin Schroer wrote:I'm not entirely sure where to post, so I will put it here. I'm playing around with D and Derelict 3 to make something with OpenGL (don't really know what yet). I managed to open a window, add an OpenGL context, clear the screen and flip buffers. But as soon as I try to render a triangle, my program crashes. I already tried hardcoding values in the shaders to rule them out. I end up with: Error executing command run: Program exited with code -11 Upon running with gdb, I get: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () which is not really helpful to me. dub -v's output: [...] Full exception: object.Exception source/dub/generators/build.d(405): Program exited with code -11 ---------------- dub(pure safe bool std.exception.enforce!(bool).enforce(bool, lazy const(char)[], immutable(char)[], ulong)+0x6b) [0x67346f] dub(void dub.generators.build.BuildGenerator.runTarget(dub.internal.vibeco pat.inet.path.Path, const(dub.compilers.compiler.BuildSettings), immutable(char)[][])+0x4dc) [0x62db70] dub(void dub.generators.build.BuildGenerator.generateTargets(dub.generators.generato .GeneratorSettings, const(dub.generators.generator.ProjectGenerator.TargetInfo[immutab e(char)[]]))+0x231) [0x62a75d] dub(void dub.generators.generator.ProjectGenerator.generate(dub.generators.generator.Gener torSettings)+0x2de) [0x62f9a2] dub(void dub.dub.Dub.generateProject(immutable(char)[], dub.generators.generator.GeneratorSettings)+0xaa) [0x5f1f46] dub(int dub.commandline.GenerateCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x677) [0x5e5b6b] dub(int dub.commandline.BuildCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x8d) [0x5e5e81] dub(int dub.commandline.RunCommand.execute(dub.dub.Dub, immutable(char)[][], immutable(char)[][])+0x8d) [0x5e6041] dub(int dub.commandline.runDubCommandLine(immutable(char)[][])+0x1211) [0x5e3b8d] dub(_Dmain+0x20) [0x5e2334] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().void __lambda1()+0x18) [0x6ce504] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2a) [0x6ce45e] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()+0x30) [0x6ce4c4] dub(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2a) [0x6ce45e] dub(_d_run_main+0x1a3) [0x6ce3df] dub(main+0x25) [0x5e2979] /lib64/libc.so.6(__libc_start_main+0xf5) [0x3dcae21d65] I am using the current master versions of Derelict, dub 0.9.21, dmd v2.066.0, on Linux 3.15.7 x86_64 I can post my source if needed, but it is quite a lot already. I'm not really sure if it is my fault or a bug in Derelict or dmd, hopefully someone is able to track this down. -- Robin SchroerAre you following this pattern?: // For core API functions. import derelict.opengl3.gl3; void main() { // Load OpenGL versions 1.0 and 1.1. DerelictGL3.load(); // Create an OpenGL context with another library (like SDL 2 or GLFW 3) ... // Load versions 1.2+ and all supported ARB and EXT extensions. DerelictGL3.reload(); // Now OpenGL functions can be called. ... } The "Segfault in ??" error is usually from calling a function pointer that hasn't been initialised, e.g. a more recent OpenGL api function that is only bound by calling DerelictGL3.reload();
Aug 29 2014
On Friday, 29 August 2014 at 11:23:34 UTC, Robin Schroer wrote:I'm not entirely sure where to post, so I will put it here. I'm playing around with D and Derelict 3 to make something with OpenGL (don't really know what yet). I managed to open a window, add an OpenGL context, clear the screen and flip buffers. But as soon as I try to render a triangle, my program crashes.As John Colvin said, forgetting to call DerelictGL3.reload() is a common error.
Aug 29 2014
On Friday, 29 August 2014 at 12:41:38 UTC, ponce wrote:On Friday, 29 August 2014 at 11:23:34 UTC, Robin Schroer wrote:I definitely reload after setting the context and before trying to render.I'm not entirely sure where to post, so I will put it here. I'm playing around with D and Derelict 3 to make something with OpenGL (don't really know what yet). I managed to open a window, add an OpenGL context, clear the screen and flip buffers. But as soon as I try to render a triangle, my program crashes.As John Colvin said, forgetting to call DerelictGL3.reload() is a common error.
Aug 29 2014
On 8/29/14, Robin Schroer via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:I definitely reload after setting the context and before trying to render.Typically these kinds of errors happen when a null function pointer is called. I'd add a few checks in some places to see what might have been left uninitialized.
Aug 29 2014
On 8/29/2014 8:23 PM, Robin Schroer wrote:I'm not entirely sure where to post, so I will put it here. I'm playing around with D and Derelict 3 to make something with OpenGLAs the README in Derelict 3 points out, that project is no longer updated. You should be using the binding from the DerelictOrg project [1] for anything new. [1] https://github.com/DerelictOrg/ --- This email is free from viruses and malware because avast! Antivirus protection is active. http://www.avast.com
Aug 29 2014