ich habe hier ein kniffeliges Problemchen, an dem ich gestern den ganzen Tag herumgebastelt habe und eine Lösung gefunden habe, die aber eher unschön ist.
Ziel: Ich möchte ein vollständig objektorientiertes 3D-Progrämmchen basteln, das mir stereoskopische Bilder auf den 3D-Fernseher anzeigt.
Hierzu habe ich eine Klasse "window" definiert, die sich um das ganze Anzeige-Gedöns kümmern soll (MVC-Pattern halt).
Um mit der OpenGL-Hardware sprechen zu können, muss ich jedoch z.B. einen ErrorCallback als Funktionspointer an die genutzte Bibliothek übergeben.
Grobe Struktur ist also zur Zeit recht einfach:
Code: Alles auswählen
class window { ... Definitionsbums ... };
void window::ErrorCallback( int errorNo, const char* description ) { ... }
Meine Lösung:
Code: Alles auswählen
window::window() {
void (*fcnPtr)(int, const char*);
fcnPtr = reinterpret_cast<void(*)(int, const char*)>(&window::ErrorCallback); // C-Funktionspointer auf C++-Prozedur (Yay!!) - aber mit Warning (Nay!!). :)
glfwSetErrorCallback( fcnPtr );
std::cout << "Constructor window class" << std::endl;
}
Code: Alles auswählen
g++ -c -std=c++17 -O2 -o window.o /home/torben/Development/eclipse-workspace/OpenGL-3D/window.cpp
/home/torben/Development/eclipse-workspace/OpenGL-3D/window.cpp: In Konstruktor »window::window()«:
/home/torben/Development/eclipse-workspace/OpenGL-3D/window.cpp:35:80: Warnung: Umwandlung von »void (window::*)(int, const char*)« nach »void (*)(int, const char*)« [-Wpmf-conversions]
35 | fcnPtr = reinterpret_cast<void(*)(int, const char*)>(&window::ErrorCallback); // C-Funktionspointer auf C++-Prozedur (Yay!!) - aber mit Warning. :)
| ^
g++ -lglfw -lGLEW -o OpenGL-3D OpenGL-3D.o window.o
Viele Grüße,
Lev