On Tuesday, 4 October 2016 at 17:00:34 UTC, Mike Wey wrote:
Replace "import glgdk.GLContext;" with "import gdk.GLContext;"

Hey Mike, you've been a great help so far! Thank you :)

I thought now I am ready to draw something, but I struggle with the GLContext and GdkGlContext. Where do I get a valid Context, or how do I make it valid? My program crashes always with segmentation fault, as soon as I call a GL function except glClear.

It must be a problem with the Context... Btw, what exactly is a GLContext and what is it used for? I am not used to it, since neither Qt nor glut uses or needs a GLContext-like structure.

Would be great, if you see the error again... I think I am only missing an initialization function in my "initGL". I didn't find anything on the Internet. Here my code:

import gtk.Main;
import gtk.MainWindow;
import gtk.GLArea;
import gdk.GLContext;
import derelict.opengl3.gl;
import std.functional : toDelegate;

GLContext initGL(GLArea area) {
        DerelictGL3.load();

        /* Error happens somewhere here: */
GdkGLContext *gdkCon; /* where do I get a valid "struct GdkGLContext"?*/ GLContext context = new GLContext(gdkCon); /*needs GdkGLContext pointer for Initialization*/

context.realize(); /*which of these two functions do I need really, and why?*/
        context.makeCurrent();
        /* Runtime Warnings: */
/* Gdk-CRITICAL **: gdk_gl_context_realize:assertion 'GDK_IS_GL_CONTEXT (context)' failed */
        /*same for ...make_current...*/
        return context;
}
bool renderGL(GLContext context, GLArea area)
{
        glClearColor (0, 0, 0, 0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); /*Here the program crashes with Segmentation Fault (Some pointer is NULL)*/
        glLoadIdentity();
        glColor3f(1.0, 1.0, 0.0);
        glBegin(GL_TRIANGLES);
                glVertex3f(0, 0, -2);
                glVertex3f(1, 0, -2);
                glVertex3f(0, 1, -2);
        glEnd();
        return true;
}
void main(string[] args) {
        Main.init(args);
        MainWindow win = new MainWindow("Hello GL");
        GLArea area = new GLArea();
        area.addOnCreateContext(toDelegate(&initGL));
        area.addOnRender(toDelegate(&renderGL));
        //area.addOnResize(toDelegate(&resizeGL));
        win.add(area);
        win.showAll();
        Main.run();
}

Reply via email to