MSVC-2008,GTK+ mit GtkGlExt+OpenGL, (code inside!)



  • Hallo zusammen 🙂 ,

    ich versuche nun schon seit Tagen mein MSVC2008 mit GTK+, GtkGlExt und OpenGl zu verheiraten aber es will einfach nicht klappen. Es ist kein Problem ein OpenGL Projekt mit dem Studio zu erstellen, auch ein GTK+ Projekt funktioniert problemlos.
    Aber ein GTK+ Projekt mit OpenGL (und natürlich GtkGlExt) will einfach nicht laufen.
    Ich habe es schon soweit bekommen daß das Testprojekt

    http://oracle.bridgewayconsulting.com.au/~danni/misc/gtkglext-example.c

    compiliert wird, am Ende kommt jedoch wieder eine Fehlermeldung.
    Lib's und DLL's etc. habe ich alle in den entsprechenden Verzeichnissen.
    Ich habe dann von Code::Blocks gehört und diesen installiert, mit dieser IDE klappt auch alles hervorragend. Da ich aber das Studio schon seit Version 4 gewohnt bin ist Code::Blocks indiskutabel.

    Ich nutze WinXP, MSVC 2008 original, GTK+ und Glade 3.6.7.

    Könnt Ihr mir irgendwie helfen, ich bräuchte eine Step By Step-Anleitung wie ich das Studio 2008, GTK+ undGtkGlExt mitsamt OpenGL in einem Projekt vereine, was ich im Studio wo einstellen muß etc.
    Ich suche und (ver)-suche schon lange, das ist keine Bitte meine Hausaufgaben zu machen aber ich komme einfach nicht weiter.

    Ich bedanke mich schon jetzt für Eure Hilfe 🙂 .
    Duckler

    P.S.: Ich möchte kein gtkmm nutzen!



  • ...weiß denn wirklich niemand Rat?! 😕 😞

    Viele Grüße,
    Duckler



  • ..... habe ich die Frage irgendwie falsch gestellt?

    Gruß,
    Duckler



  • Hallo,

    duckler schrieb:

    ..... habe ich die Frage irgendwie falsch gestellt?

    das wohl nicht, aber für potenzielle Helfer, die zwar deinen Code betrachten können, aber gerade nicht die Möglichkeit haben, in deiner Umgebung:

    WinXP, MSVC 2008 original, GTK+ und Glade 3.6.7

    zu kompilieren, wäre es hilfreich, die Fehlermeldung zu sehen (da der Code kompiliert, hilft er in dieser Situation beim Erkennen eines "Nicht-Compiler-Fehlers" nicht), denn oft reicht auch das den Forenteilnehmern, um Hinweise zur Lösung zu geben.

    MfG,

    Probe-Nutzer



  • Hi Probe-Nutzer,

    Natürlich hast Du recht, ich hoffe nur daß ich jetzt nicht zuviel des Guten getan habe, hier kommt alles.
    Ich poste mal den Code inclusive der Fehlermeldung!

    Hier mein Code:

    #include <gtk/gtk.h>
    #include <gtk/gtkgl.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_opengl.h>
    #include <math.h>
    
    #ifdef _WIN32
    #undef main
    #endif
    
    float boxv[][3] = {
    	{ -0.5, -0.5, -0.5 },
    	{  0.5, -0.5, -0.5 },
    	{  0.5,  0.5, -0.5 },
    	{ -0.5,  0.5, -0.5 },
    	{ -0.5, -0.5,  0.5 },
    	{  0.5, -0.5,  0.5 },
    	{  0.5,  0.5,  0.5 },
    	{ -0.5,  0.5,  0.5 }
    };
    #define ALPHA 0.5
    
    static float ang = 30.;
    
    static gboolean
    expose (GtkWidget *da, GdkEventExpose *event, gpointer user_data)
    {
    	GdkGLContext *glcontext = gtk_widget_get_gl_context (da);
    	GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da);
    
    	if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
    	{
    		g_assert_not_reached ();
    	}
    
    	/* draw in here */
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glPushMatrix();
    
    	glRotatef (ang, 1, 0, 1);
    	// glRotatef (ang, 0, 1, 0);
    	// glRotatef (ang, 0, 0, 1);
    
    	glShadeModel(GL_FLAT);
    
    #if 0
    	glBegin (GL_QUADS);
    	glColor4f(0.0, 0.0, 1.0, ALPHA);
    	glVertex3fv(boxv[0]);
    	glVertex3fv(boxv[1]);
    	glVertex3fv(boxv[2]);
    	glVertex3fv(boxv[3]);
    
    	glColor4f(1.0, 1.0, 0.0, ALPHA);
    	glVertex3fv(boxv[0]);
    	glVertex3fv(boxv[4]);
    	glVertex3fv(boxv[5]);
    	glVertex3fv(boxv[1]);
    
    	glColor4f(0.0, 1.0, 1.0, ALPHA);
    	glVertex3fv(boxv[2]);
    	glVertex3fv(boxv[6]);
    	glVertex3fv(boxv[7]);
    	glVertex3fv(boxv[3]);
    
    	glColor4f(1.0, 0.0, 0.0, ALPHA);
    	glVertex3fv(boxv[4]);
    	glVertex3fv(boxv[5]);
    	glVertex3fv(boxv[6]);
    	glVertex3fv(boxv[7]);
    
    	glColor4f(1.0, 0.0, 1.0, ALPHA);
    	glVertex3fv(boxv[0]);
    	glVertex3fv(boxv[3]);
    	glVertex3fv(boxv[7]);
    	glVertex3fv(boxv[4]);
    
    	glColor4f(0.0, 1.0, 0.0, ALPHA);
    	glVertex3fv(boxv[1]);
    	glVertex3fv(boxv[5]);
    	glVertex3fv(boxv[6]);
    	glVertex3fv(boxv[2]);
    
    	glEnd ();
    #endif
    
    	glBegin (GL_LINES);
    	glColor3f (1., 0., 0.);
    	glVertex3f (0., 0., 0.);
    	glVertex3f (1., 0., 0.);
    	glEnd ();
    
    	glBegin (GL_LINES);
    	glColor3f (0., 1., 0.);
    	glVertex3f (0., 0., 0.);
    	glVertex3f (0., 1., 0.);
    	glEnd ();
    
    	glBegin (GL_LINES);
    	glColor3f (0., 0., 1.);
    	glVertex3f (0., 0., 0.);
    	glVertex3f (0., 0., 1.);
    	glEnd ();
    
    	glBegin(GL_LINES);
    	glColor3f (1., 1., 1.);
    	glVertex3fv(boxv[0]);
    	glVertex3fv(boxv[1]);
    
    	glVertex3fv(boxv[1]);
    	glVertex3fv(boxv[2]);
    
    	glVertex3fv(boxv[2]);
    	glVertex3fv(boxv[3]);
    
    	glVertex3fv(boxv[3]);
    	glVertex3fv(boxv[0]);
    
    	glVertex3fv(boxv[4]);
    	glVertex3fv(boxv[5]);
    
    	glVertex3fv(boxv[5]);
    	glVertex3fv(boxv[6]);
    
    	glVertex3fv(boxv[6]);
    	glVertex3fv(boxv[7]);
    
    	glVertex3fv(boxv[7]);
    	glVertex3fv(boxv[4]);
    
    	glVertex3fv(boxv[0]);
    	glVertex3fv(boxv[4]);
    
    	glVertex3fv(boxv[1]);
    	glVertex3fv(boxv[5]);
    
    	glVertex3fv(boxv[2]);
    	glVertex3fv(boxv[6]);
    
    	glVertex3fv(boxv[3]);
    	glVertex3fv(boxv[7]);
    	glEnd();
    
    	glPopMatrix ();
    
    	if (gdk_gl_drawable_is_double_buffered (gldrawable))
    		gdk_gl_drawable_swap_buffers (gldrawable);
    
    	else
    		glFlush ();
    
    	gdk_gl_drawable_gl_end (gldrawable);
    
    	return TRUE;
    }
    
    static gboolean configure (GtkWidget *da, GdkEventConfigure *event, gpointer user_data)
    {
    	GdkGLContext *glcontext = gtk_widget_get_gl_context (da);
    	GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da);
    
    	if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))
    	{
    		g_assert_not_reached ();
    	}
    
    	glLoadIdentity();
    	glViewport (0, 0, da->allocation.width, da->allocation.height);
    	glOrtho (-10,10,-10,10,-20050,10000);
    	glEnable (GL_BLEND);
    	glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
    	glScalef (10., 10., 10.);
    
    	gdk_gl_drawable_gl_end (gldrawable);
    
    	return TRUE;
    }
    
    static gboolean rotate (gpointer user_data)
    {
    	GtkWidget *da = GTK_WIDGET (user_data);
    
    	ang++;
    
    	gdk_window_invalidate_rect (da->window, &da->allocation, FALSE);
    	gdk_window_process_updates (da->window, FALSE);
    
    	return TRUE;
    }
    
    int main (int argc, char **argv)
    {
    	GtkWidget *window;
    	GtkWidget *da;
    	GdkGLConfig *glconfig;
    
    	gtk_init (&argc, &argv);
    	gtk_gl_init (&argc, &argv);
    
    	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
    	da = gtk_drawing_area_new ();
    
    	gtk_container_add (GTK_CONTAINER (window), da);
    	g_signal_connect_swapped (window, "destroy",
    		G_CALLBACK (gtk_main_quit), NULL);
    	gtk_widget_set_events (da, GDK_EXPOSURE_MASK);
    
    	gtk_widget_show (window);
    
    	/* prepare GL */
    	glconfig = gdk_gl_config_new_by_mode (
    		GDK_GL_MODE_RGB |
    		GDK_GL_MODE_DEPTH |
    		GDK_GL_MODE_DOUBLE);
    
    	if (!glconfig)
    	{
    		g_assert_not_reached ();
    	}
    
    	if (!gtk_widget_set_gl_capability (da, glconfig, NULL, TRUE,
    		GDK_GL_RGBA_TYPE))
    	{
    		g_assert_not_reached ();
    	}
    
    	g_signal_connect (da, "configure-event",
    		G_CALLBACK (configure), NULL);
    	g_signal_connect (da, "expose-event",
    		G_CALLBACK (expose), NULL);
    
    	gtk_widget_show_all (window);
    
    	g_timeout_add (1000 / 60, rotate, da);
    
    	gtk_main ();
    }
    

    Das ist die Ausgabe kurz nach dem starten (während des Buildprozesses):

    ------ Erstellen gestartet: Projekt: GTK_Test_Projekt, Konfiguration: Debug Win32 ------
    Kompilieren...
    stdafx.cpp
    Kompilieren...
    GTK_Test_Projekt.cpp
    Manifest in Ressourcen wird kompiliert...
    Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
    Copyright (C) Microsoft Corporation. All rights reserved.
    Verknüpfen...
    LINK : E:\WORKING\MISC\GTK\GTK_Test_Projekt\Debug\GTK_Test_Projekt.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollständiger Link wird durchgeführt.
    Das Manifest wird eingebettet...
    Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
    Copyright (C) Microsoft Corporation. All rights reserved.

    **Wenn ich diesen Code ausführe wird kompiliert und verknüpft, aber kurz vor dem Start erscheint ein Dialog:
    **

    Unbehandelte Ausnahme bei 0x00019fc0 in GTK_Test_Projekt.exe: 0xC0000005:

    Zugriffsverletzung beim Lesen an Position 0x00019fc0.

    **Das ist die komplette Kompilerausgabe:
    **

    "GTK_Test_Projekt.exe": "E:\WORKING\MISC\GTK\GTK_Test_Projekt\Debug\GTK_Test_Projekt.exe" geladen, Symbole wurden geladen.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\ntdll.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\kernel32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgtk-win32-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgdk_pixbuf-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgio-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libglib-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\advapi32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\secur32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\msvcrt.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\ole32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\gdi32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\user32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\shell32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\shlwapi.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\ws2_32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\ws2help.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgmodule-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgobject-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgthread-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\zlib1.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\dnsapi.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libpng14-14.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libgdk-win32-2.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libcairo-2.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libfontconfig-1.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libexpat-1.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\freetype6.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\msimg32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libpango-1.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libpangocairo-1.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libpangoft2-1.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libpangowin32-1.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\imm32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\libatk-1.0-0.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\comctl32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\comdlg32.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\system32\winspool.drv" wurde geladen
    "GTK_Test_Projekt.exe": "C:\Programme\Kaspersky Lab\Kaspersky Internet Security 2010\mzvkbd3.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\Programme\Kaspersky Lab\Kaspersky Internet Security 2010\kloehk.dll" wurde geladen
    "GTK_Test_Projekt.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll" wurde geladen
    Eine Ausnahme (erste Chance) bei 0x00019fc0 in GTK_Test_Projekt.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00019fc0.
    Unbehandelte Ausnahme bei 0x00019fc0 in GTK_Test_Projekt.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00019fc0.
    Das Programm "[5124] GTK_Test_Projekt.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.

    Ich hoffe das ist aussagekräftig und nicht zuviel!

    Vielen Dank daß Ihr Euch die Mühe macht,
    hoffentlich könnt Ihr mir helfen 😉

    Duckler


Anmelden zum Antworten