Re: Getting GtkD working with OpenGL

2016-10-06 Thread Mike Wey via Digitalmars-d-learn

On 10/06/2016 05:18 PM, Chalix wrote:

On Thursday, 6 October 2016 at 13:35:01 UTC, Mike Parker wrote:

So, change DerelictGL3.load to DerelictGL.load, then add a call to
DerelictGL.reload after creating and activating the context.


Thank you! That fixed the segmentation fault problem and the crash :)

But I still struggle with the right Context...

if I do something like this

DerelictGL.load();
area.makeCurrent();
DerelictGL.reload();

I get an (runtime) error (on the terminal where I run my application):

(LibraryTest:2984): Gtk-CRITICAL **: gtk_gl_area_make_current: assertion
'gtk_widget_get_realized (widget)' failed
derelict.util.exception.DerelictException@gl3.d(85): DerelictGL3.reload
failure: An OpenGL context is not currently active.
[...]


After all, I really don't know, what a GLContext is, what I need it for
and how to use it. If somebody can explain it to me, I would be happy! I
didn't find anything about it on the Internet, but I like to know, whats
going on behind my code...

I will keep on playing around with all the context functions, maybe I
find something by accident that works xD



When you don't register an callback for the createContext signal 
(addOnCreateContext), gtk does the following internally:


```
context = area.getWindow().createGlContext();
```
to get an context that renders to the GLArea.

gdk.GLContext is an platform independent abstraction for the context you 
would normally use with openGL. like the one's returned by 
wglCreateContext or glxCreateContext.


makeCurrent() sets that context as the one that is rendered to.
realize() i think makes sure the context is initialized, but 
makeCurrent() also calls realize, so makeCurrent is probably the one you 
want to use.


--
Mike Wey


Re: Getting GtkD working with OpenGL

2016-10-06 Thread Chalix via Digitalmars-d-learn

On Thursday, 6 October 2016 at 13:35:01 UTC, Mike Parker wrote:
So, change DerelictGL3.load to DerelictGL.load, then add a call 
to DerelictGL.reload after creating and activating the context.


Thank you! That fixed the segmentation fault problem and the 
crash :)


But I still struggle with the right Context...

if I do something like this

DerelictGL.load();
area.makeCurrent();
DerelictGL.reload();

I get an (runtime) error (on the terminal where I run my 
application):


(LibraryTest:2984): Gtk-CRITICAL **: gtk_gl_area_make_current: 
assertion 'gtk_widget_get_realized (widget)' failed
derelict.util.exception.DerelictException@gl3.d(85): 
DerelictGL3.reload failure: An OpenGL context is not currently 
active.

[...]


After all, I really don't know, what a GLContext is, what I need 
it for and how to use it. If somebody can explain it to me, I 
would be happy! I didn't find anything about it on the Internet, 
but I like to know, whats going on behind my code...


I will keep on playing around with all the context functions, 
maybe I find something by accident that works xD





Re: Getting GtkD working with OpenGL

2016-10-06 Thread Mike Parker via Digitalmars-d-learn

On Thursday, 6 October 2016 at 10:49:40 UTC, Chalix wrote:


glMatrixMode(GL_MODELVIEW); /*Here the program crashes with


There are two things wrong with your use of Derelict.

First, though you are correctly importing derelict.opengl3.gl to 
get the deprecated functions (which the gl3 module does not 
expose), you are calling DerelictGL3.load and not 
DerelictGL.load. The former loads only the core 1.1 functions. To 
load the deprecated 1.1 functions, you need the latter instead.


Second, once the context is created and activated, you need to 
call DerelictGL3.reload to load all of the functions available in 
the context for OpenGL 1.2 and higher as well all available 
extensions supported by Derelict.


So, change DerelictGL3.load to DerelictGL.load, then add a call 
to DerelictGL.reload after creating and activating the context.


Re: Getting GtkD working with OpenGL

2016-10-06 Thread Chalix via Digitalmars-d-learn

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();
}



Re: Getting GtkD working with OpenGL

2016-10-04 Thread Mike Wey via Digitalmars-d-learn

On 10/03/2016 11:46 PM, Chalix wrote:

On Monday, 3 October 2016 at 18:00:53 UTC, Mike Wey wrote:

The signal functions can be found in the gobject.Signals module.

But you should use the GLArea.addOnCreateContext / addOnRender /
addOnResize functions to attach a D delegate to the signal.
You will still need to link with the OpenGL libraries or use someting
like Derelict.


Hi Mike, thanks for your fast answer again!

I just read about this delegates and I liked the concept. I experimented
with it for a while and read a bit on the Internet, but I still don't
get it working...

My minimal example looks like this:

import gtk.Main;
import gtk.MainWindow;
import gtk.GLArea;
import glgdk.GLContext;

void main(string[] args)
{
bool render(GLContext context, GLArea area)
{
return true;
}

Main.init(args);
MainWindow win = new MainWindow("Hello World");
GLArea area = new GLArea();

area.addOnRender(&render,cast(GConnectFlags)0);

win.add(area);
win.showAll();
Main.run();
}

If I compile it, I get this error:

$ dmd main.d -I/usr/local/include/d/gtkd-3 -L-lgtkd-3
main.d(27):
Error: function gtk.GLArea.GLArea.addOnRender
(bool delegate(GLContext, GLArea) dlg, GConnectFlags connectFlags =
cast(GConnectFlags)0)
is not callable using argument types
(bool delegate(GLContext context, GLArea area), GConnectFlags)

I cant see, what I am doing wrong... Someone else sees the error?
Tomorrow I try to subclass the GLArea, if this works I am happy :) But
I'd like to use the handler stuff.

Ah, and I know now, that I have to link against the GL and GLU library,
but which module do I have to import, to make the functions visible for
the compiler? Or do I need another binding therefore?


Replace "import glgdk.GLContext;" with "import gdk.GLContext;"

The error is a bit confusing without the fully qualified names of the 
types, but GLArea depends on the OpenGL functionality build in to GDK, 
and doesn't depend on gtkglext.


--
Mike Wey


Re: Getting GtkD working with OpenGL

2016-10-03 Thread Chalix via Digitalmars-d-learn

On Monday, 3 October 2016 at 18:00:53 UTC, Mike Wey wrote:

The signal functions can be found in the gobject.Signals module.

But you should use the GLArea.addOnCreateContext / addOnRender 
/ addOnResize functions to attach a D delegate to the signal.
You will still need to link with the OpenGL libraries or use 
someting like Derelict.


Hi Mike, thanks for your fast answer again!

I just read about this delegates and I liked the concept. I 
experimented with it for a while and read a bit on the Internet, 
but I still don't get it working...


My minimal example looks like this:

import gtk.Main;
import gtk.MainWindow;
import gtk.GLArea;
import glgdk.GLContext;

void main(string[] args)
{
bool render(GLContext context, GLArea area)
{
return true;
}

Main.init(args);
MainWindow win = new MainWindow("Hello World");
GLArea area = new GLArea();

area.addOnRender(&render,cast(GConnectFlags)0);

win.add(area);
win.showAll();
Main.run();
}

If I compile it, I get this error:

$ dmd main.d -I/usr/local/include/d/gtkd-3 -L-lgtkd-3
main.d(27):
Error: function gtk.GLArea.GLArea.addOnRender
(bool delegate(GLContext, GLArea) dlg, GConnectFlags connectFlags 
= cast(GConnectFlags)0)

is not callable using argument types
(bool delegate(GLContext context, GLArea area), GConnectFlags)

I cant see, what I am doing wrong... Someone else sees the error? 
Tomorrow I try to subclass the GLArea, if this works I am happy 
:) But I'd like to use the handler stuff.


Ah, and I know now, that I have to link against the GL and GLU 
library, but which module do I have to import, to make the 
functions visible for the compiler? Or do I need another binding 
therefore?


Re: Getting GtkD working with OpenGL

2016-10-03 Thread Mike Wey via Digitalmars-d-learn

On 10/03/2016 01:50 PM, Chalix wrote:

On Sunday, 18 September 2016 at 21:41:45 UTC, Mike Wey wrote:

The demo still uses the old GtkGLExt binding, which usually isn't
available in de distributions repositories.

The newer GLArea is easier to use since it's part of GTK.

As for the linker errors, you'll need to link with the OpenGL libraries:
"-L-lGL -L-lGLU"


Hey, thanks for your fast answer! I had a lot of other work to do, so I
could only continue working on this project now.

Yeah, that solved my problem :) Now it links. Although if I execute the
program, it complains about the missing GtkGLExt library, like expected...
Library load failed: libgdkglext-3.0.so.0

So I wanted to install this library from here:
https://projects.gnome.org/gtkglext/download.html
but the ./configure script tells me,
No package 'pangox' found (pangox >= 1.0.0)

I looked at the folder /usr/lib/x86_64-linux-gnu/ and there is a file
called "libpangox-1.0.so.0.0.0". So I don't know, why this is not
working...


You will need the Gtk3 port of gtkglext: https://github.com/tdz/gtkglext
Last time i tried compiling it i needed to remove the documentation 
generation from the make files.



Anyway, I want to follow Mikes advice and use GLArea instead, so if
there is not a quick fix available, lets skip the problems with the
GtkGLExt library...



But, sadly enough, I did not get GLArea working, too. The documentation
https://developer.gnome.org/gtk3/stable/GtkGLArea.html
says, I have to connect my render function to the widget like this:
g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL);
But, my compiler can't find the g_signal_connect method (and the GL
Methods...):
main.d(22): Error: undefined identifier 'g_signal_connect'
main.d(39): Error: undefined identifier 'glClearColor'
main.d(40): Error: undefined identifier 'glClear'

There might some include files (or import files, as you say in D)
missing, but I could not figure out, where to find them for D...

Could you tell me, where this g_signal_connect method can be found? And
what I have to include for the GL functionality? Simply "import
gtk.GLArea;" does not do the trick...


The signal functions can be found in the gobject.Signals module.

But you should use the GLArea.addOnCreateContext / addOnRender / 
addOnResize functions to attach a D delegate to the signal.
You will still need to link with the OpenGL libraries or use someting 
like Derelict.



Btw, is g_signal_connect a GTK method? I intend to use my program
platform independent, so if this is dependent on gnome, it would not be
good.


It's a GLib/GObject method, it's available on any platform GTK runs on.


Or is there any other way to get the GLArea working? I am used to the Qt
Libraries, where you create a QGLWidget and simply override the init and
render functions.


Thanks for reading this far, would be great if we could solve this
problem :D



--
Mike Wey


Re: Getting GtkD working with OpenGL

2016-10-03 Thread Chalix via Digitalmars-d-learn

On Sunday, 18 September 2016 at 21:41:45 UTC, Mike Wey wrote:
The demo still uses the old GtkGLExt binding, which usually 
isn't available in de distributions repositories.


The newer GLArea is easier to use since it's part of GTK.

As for the linker errors, you'll need to link with the OpenGL 
libraries:

"-L-lGL -L-lGLU"


Hey, thanks for your fast answer! I had a lot of other work to 
do, so I could only continue working on this project now.


Yeah, that solved my problem :) Now it links. Although if I 
execute the program, it complains about the missing GtkGLExt 
library, like expected...

Library load failed: libgdkglext-3.0.so.0

So I wanted to install this library from here:
https://projects.gnome.org/gtkglext/download.html
but the ./configure script tells me,
No package 'pangox' found (pangox >= 1.0.0)

I looked at the folder /usr/lib/x86_64-linux-gnu/ and there is a 
file called "libpangox-1.0.so.0.0.0". So I don't know, why this 
is not working...


Anyway, I want to follow Mikes advice and use GLArea instead, so 
if there is not a quick fix available, lets skip the problems 
with the GtkGLExt library...




But, sadly enough, I did not get GLArea working, too. The 
documentation

https://developer.gnome.org/gtk3/stable/GtkGLArea.html
says, I have to connect my render function to the widget like 
this:

g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL);
But, my compiler can't find the g_signal_connect method (and the 
GL Methods...):

main.d(22): Error: undefined identifier 'g_signal_connect'
main.d(39): Error: undefined identifier 'glClearColor'
main.d(40): Error: undefined identifier 'glClear'

There might some include files (or import files, as you say in D) 
missing, but I could not figure out, where to find them for D...


Could you tell me, where this g_signal_connect method can be 
found? And what I have to include for the GL functionality? 
Simply "import gtk.GLArea;" does not do the trick...


Btw, is g_signal_connect a GTK method? I intend to use my program 
platform independent, so if this is dependent on gnome, it would 
not be good.


Or is there any other way to get the GLArea working? I am used to 
the Qt Libraries, where you create a QGLWidget and simply 
override the init and render functions.



Thanks for reading this far, would be great if we could solve 
this problem :D


Re: Getting GtkD working with OpenGL

2016-09-18 Thread Mike Wey via Digitalmars-d-learn

On 09/18/2016 09:36 PM, Chalix wrote:

Hi All!

This weekend I explored Dlang and I think it's very promising. So I
wanted to create some projects I've created with C++ already - for the
sake of comparison.

I wanted to create a new class which inherits from DrawingArea (from the
Gtk library). This will be my OpenGL-Widget with functions like
"drawGL", which I have to override.

So I downloaded the "GtkD-3.3.0.zip" from here:
http://gtkd.org/download.html and compiled it successfully (with "make
all").

Now I've got the libraries gstreamerd-3, gtkd-3, gtkdgl-3, gtkdsv-3 and
vted-3. I also got the module files for the import at
"/usr/local/include/d/gtkd-3/", after I did a "make install".

Now I tested a little example I found somewhere in the web, which looks
like:

import gtk.MainWindow;
import gtk.Label;
import gtk.Main;
import gtk.GLArea;
void main(string[] args)
{
Main.init(args);
MainWindow win = new MainWindow("Hello World");
GLArea area = new GLArea();
win.add(area);
win.setDefaultSize(200, 100);
win.showAll();
Main.run();
}

This compiles fine and I get an empty black window. (I compiled with the
options: "dmd main.d -I/usr/local/include/d/gtkd-3
-L/pathToLib/libgtkd-3.a")



Now I scanned through the demos at the GtkD Library and I found one,
that fits my needs perfectly. It is located at
".../GtkD-3.3.0/demos/gl/simple/SimpleGL.d" (I post the source code in
an extra answer, since it is a bit lengthy...)

This demo compiles fine (with "dmd main.d -c -I/...", -c tells the
compiler not to link).
But the linker gives an error here (command was: "dmd main.o
-L/libgtkd-3.a -L/libgtkdgl-3.a ...", I linked to all the libs mentioned
above).
I get a very lengthy error message, and I cant figure out, why the
reference to all the gl stuff is missing. Would be really great, if some
one could give me a hint!

Ah, yeah, just do avoid the answer "make it with dub!": Actually I did
it also with dub and I get the same error messages... If you are
interested, I can provide you also my .json file. But I like to know
whats going on behind, so I prefer the way to install my libs manually.
Would be great, if I get this working.



The demo still uses the old GtkGLExt binding, which usually isn't 
available in de distributions repositories.


The newer GLArea is easier to use since it's part of GTK.

As for the linker errors, you'll need to link with the OpenGL libraries:
"-L-lGL -L-lGLU"

--
Mike Wey


Re: Getting GtkD working with OpenGL

2016-09-18 Thread Chalix via Digitalmars-d-learn

Here the code I actually wanted to compile (SimpleGL.d):

/*
 * This file is part of gtkD.
 *
 * dui is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as 
published by
 * the Free Software Foundation; either version 3 of the License, 
or

 * (at your option) any later version.
 *
 * dui is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General 
Public License

 * along with dui; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 
02110, USA

 */

module simpleGL.SimpleGL;

private import gdk.Event;
private import gtk.DrawingArea;
private import gtk.Main;
private import gtk.MainWindow;
private import gtk.Widget;
private import glgdk.GLConfig;
private import glgdk.GLContext;
private import glgdk.GLdInit;
private import glgdk.GLWindow;
private import glgtk.GLCapability;
private import gtkglc.glgdktypes;

private import gtkglc.gl;
private import gtkglc.glu;

/**
 * This is a Simple class extending the DrawingArea widget.
 * A really simple Demo illustrating OpenGL with GtkD
 * It uses the GLCapability mixin to add the GL capabilities to 
the widget.

 * This example is provided under the terms of the GPL License.
 * Note the initialization of the GLCapabilities on the 
constructor.

 *
 * @author p...@tuxfamily.org
 */
class SimpleGL : DrawingArea
{

GLfloat width;
GLfloat height;

	/** need to include the mixin to add GL capabilities to this 
widget */

mixin GLCapability;

/**
 * Construct a simple DrawingArea and sets the GLCapabilities
 */
this()
{
super(300, 300);
setGlCapability();  // set the GL capabilities for this 
widget
}

/**
 * put any gl initializations here
 * returns true to consume the event
 */
void initGL()
{
resizeGL(null);
}

/**
	 * This method is called every time the window must be paint or 
repaint

 * This is where you put the OpenGL call to draw something.
	 * This method call be called directly by the application 
without an event object

 * to force redrawing of the scene.
 * returns true to consume the event
 */
bool drawGL()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();

gluLookAt(0, 0, 10, 0, 0, 0, 0, 1,0); //Set the camera position

//Just Draw a tri-colored triangle
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();

return true;
}

/**
 * This method is called when the window is resized
 * returns true to consume the event
 */
bool resizeGL(Event event = null)
{
GLfloat w;
GLfloat h;

if ( event is null || event.type != GdkEventType.CONFIGURE )
{
w = getWidth();
h = getHeight();
}
else
{
w = event.configure.width;
h = event.configure.height;
}

width = w;
height = h;

		glViewport (0, 0, cast(int)w, cast(int)h); //Adjust the 
viewport according to new window dimensions


/*
 * Update the projection Matrix accoding to the new dimension
 * and reset the OpenGL state to MODELVIEW
 */
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(20, w/h, 0.1, 10);
glMatrixMode (GL_MODELVIEW);

return true;
}
}

void main(string[] args)
{
Main.init(args);

GLdInit.init(args);

SimpleGL simpleGL = new SimpleGL();
MainWindow window = new MainWindow("Simplest OpenGL Example");
window.add(simpleGL);
window.showAll();

Main.run();
}


Getting GtkD working with OpenGL

2016-09-18 Thread Chalix via Digitalmars-d-learn

Hi All!

This weekend I explored Dlang and I think it's very promising. So 
I wanted to create some projects I've created with C++ already - 
for the sake of comparison.


I wanted to create a new class which inherits from DrawingArea 
(from the Gtk library). This will be my OpenGL-Widget with 
functions like "drawGL", which I have to override.


So I downloaded the "GtkD-3.3.0.zip" from here: 
http://gtkd.org/download.html and compiled it successfully (with 
"make all").


Now I've got the libraries gstreamerd-3, gtkd-3, gtkdgl-3, 
gtkdsv-3 and vted-3. I also got the module files for the import 
at "/usr/local/include/d/gtkd-3/", after I did a "make install".


Now I tested a little example I found somewhere in the web, which 
looks like:


import gtk.MainWindow;
import gtk.Label;
import gtk.Main;
import gtk.GLArea;
void main(string[] args)
{
Main.init(args);
MainWindow win = new MainWindow("Hello World");
GLArea area = new GLArea();
win.add(area);
win.setDefaultSize(200, 100);
win.showAll();
Main.run();
}

This compiles fine and I get an empty black window. (I compiled 
with the options: "dmd main.d -I/usr/local/include/d/gtkd-3 
-L/pathToLib/libgtkd-3.a")




Now I scanned through the demos at the GtkD Library and I found 
one, that fits my needs perfectly. It is located at 
".../GtkD-3.3.0/demos/gl/simple/SimpleGL.d" (I post the source 
code in an extra answer, since it is a bit lengthy...)


This demo compiles fine (with "dmd main.d -c -I/...", -c tells 
the compiler not to link).
But the linker gives an error here (command was: "dmd main.o 
-L/libgtkd-3.a -L/libgtkdgl-3.a ...", I linked to all the libs 
mentioned above).
I get a very lengthy error message, and I cant figure out, why 
the reference to all the gl stuff is missing. Would be really 
great, if some one could give me a hint!


Ah, yeah, just do avoid the answer "make it with dub!": Actually 
I did it also with dub and I get the same error messages... If 
you are interested, I can provide you also my .json file. But I 
like to know whats going on behind, so I prefer the way to 
install my libs manually. Would be great, if I get this working.


$ dmd main.o -L/.../GtkD-3.3.0/libgtkd-3.a 
-L/.../GtkD-3.3.0/libgtkdgl-3.a 
-L/.../GtkD-3.3.0/libgstreamerd-3.a 
-L/.../GtkD-3.3.0/libgtkdsv-3.a -L/.../GtkD-3.3.0/libvted-3.a

main.o:
In function 
`_D8simpleGL8SimpleGL8SimpleGL8__mixin712realizeFrameMFC3gtk6Widget6WidgetZv':

main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin712realizeFrameMFC3gtk6Widget6WidgetZv+0xcf):
 undefined reference to `glFlush'
main.o: In function 
`_D8simpleGL8SimpleGL8SimpleGL8__mixin79drawFrameMFC5cairo7Context7ContextC3gtk6Widget6WidgetZb':

main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin79drawFrameMFC5cairo7Context7ContextC3gtk6Widget6WidgetZb+0xc0):
 undefined reference to `glFlush'
main.o: In function 
`_D8simpleGL8SimpleGL8SimpleGL8__mixin714configureFrameMFC3gdk5Event5EventC3gtk6Widget6WidgetZb':

main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin714configureFrameMFC3gdk5Event5EventC3gtk6Widget6WidgetZb+0x11a):
 undefined reference to `glFlush'
main.o: In function 
`_D8simpleGL8SimpleGL8SimpleGL8__mixin78mapFrameMFC3gtk6Widget6WidgetZv':

main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin78mapFrameMFC3gtk6Widget6WidgetZv+0xbb):
 undefined reference to `glFlush'
main.o: In function 
`_D8simpleGL8SimpleGL8SimpleGL8__mixin710unmapFrameMFC3gtk6Widget6WidgetZv':

main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin710unmapFrameMFC3gtk6Widget6WidgetZv+0xbb):
 undefined reference to `glFlush'
main.o:main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8__mixin715visibilityFrameMFC3gdk5Event5EventC3gtk6Widget6WidgetZb+0xc8):
 more undefined references to `glFlush' follow
main.o: In function `_D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb':
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x45): 
undefined reference to `glClear'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x4a): 
undefined reference to `glLoadIdentity'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0xa9): 
undefined reference to `gluLookAt'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0xb7): 
undefined reference to `glBegin'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0xdb): 
undefined reference to `glColor3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0xff): 
undefined reference to `glVertex3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x123): 
undefined reference to `glColor3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x142): 
undefined reference to `glVertex3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x166): 
undefined reference to `glColor3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x18a): 
undefined reference to `glVertex3f'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL6drawGLMFZb+0x18f): 
undefined reference to `glEnd'
main.o: In function 
`_D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5Eve