Getting GtkD working with OpenGL
Chalix via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Sep 18 12:36:16 PDT 2016
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
`_D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb':
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb+0x112): undefined reference to `glViewport'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb+0x11c): undefined reference to `glMatrixMode'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb+0x121): undefined reference to `glLoadIdentity'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb+0x153): undefined reference to `gluPerspective'
main.d:(.text._D8simpleGL8SimpleGL8SimpleGL8resizeGLMFC3gdk5Event5EventZb+0x15d): undefined reference to `glMatrixMode'
collect2: error: ld returned 1 exit status
--- errorlevel 1
More information about the Digitalmars-d-learn
mailing list