OpenGL installieren?



  • Hallo,

    leider werde ich aus Google nicht schlau. Ich möchte gerne OpenGL in einem Projekt verwenden. (System: Windows 7 64 Bit)

    // MAIN_CPP
    
    #include <Windows.h>
    #include <conio.h>
    #include <gl\GL.h>
    #include <gl\GLU.h>
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
    unsigned char	key_pressed( HWND hWnd );
    MSG				msg;
    
    void opengl_setup(HWND hWnd);
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){
    
    	HWND			hWnd;
    	WNDCLASSEX		WndClassEx;
    	char			szClassName[] = "OpenGL";
    	char			szWindowTitle[] = "Tutorial 3 OpenGL";
    
    	WndClassEx.cbSize				= sizeof( WNDCLASSEX );
    	WndClassEx.cbClsExtra			= 0;
    	WndClassEx.cbWndExtra			= 0;
    	WndClassEx.hInstance			= hInstance;
    	WndClassEx.hbrBackground		= (HBRUSH) GetStockObject( BLACK_BRUSH );
    	WndClassEx.hIcon				= LoadIcon(hInstance, IDI_APPLICATION);
    	WndClassEx.hCursor				= LoadCursor(hInstance, IDC_ARROW );
    	WndClassEx.hIconSm				= 0;
    	WndClassEx.lpfnWndProc			= WndProc;
    	WndClassEx.style				= 0;
    	WndClassEx.lpszClassName		= szClassName;
    	WndClassEx.lpszMenuName			= 0;
    
    	if ( !RegisterClassEx( &WndClassEx ) ){
    		MessageBox( 0, "Fail to register WndClassEx", "Error", MB_OK | MB_ICONERROR );
    		return false;
    	};
    
    	hWnd = CreateWindow(szClassName,
    						szWindowTitle,
    						WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    						CW_USEDEFAULT,
    						CW_USEDEFAULT,
    						640, 420, 0, 0, hInstance, 0);
    
    	if( !hWnd ){
    		MessageBox( 0, "Fail to create window", "Error", MB_OK | MB_ICONERROR );
    		return false;
    	};
    
    	ShowWindow( hWnd, iCmdShow );
    	UpdateWindow( hWnd );
    	opengl_setup( hWnd );
    
    	while( true ){
    		if( key_pressed( hWnd ) ){
    			break;
    		};
    	};
    
    	return (int) msg.wParam;
    };
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    	switch(msg){
    
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    
    	default:
    		return DefWindowProc( hWnd, msg, wParam, lParam );
    		break;
    
    	};
    	return 0;
    };
    
    unsigned char key_pressed(HWND hWnd){
    	if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ){
    		if( msg.message == WM_QUIT || msg.message == WM_KEYDOWN ){ // || = oder
    			return true;
    		};
    
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
    	};
    
    	return 0;
    };
    
    void opengl_setup(HWND hWnd){
    	HDC		hDC; // handle to a device context = Zusammenhang zum Gerät
    	HGLRC	hGLRC; // handle to a gl render context
    	PIXELFORMATDESCRIPTOR pfd;
    	int		iFormat;
    
    	memset( &pfd, 0, sizeof( pfd ) ); // setzt alles auf Null
    
    	pfd.nSize			= sizeof( PIXELFORMATDESCRIPTOR );
    	pfd.nVersion		= 1;
    	pfd.dwFlags			= PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; // DOUBLEBUFFER = imaginärer Screen
    	pfd.iPixelType		= PFD_TYPE_RGBA; // Rot, Grün, Blau und Alpha-Kanal für Transparenz
    	pfd.cColorBits		= 32;
    	pfd.cDepthBits		= 32; // Bits in der Tiefe
    	pfd.cAlphaBits		= 8;
    
    	hDC = GetDC( hWnd ); // vom Fenster den Context bekommen
    	iFormat = ChoosePixelFormat( hDC, &pfd );
    	SetPixelFormat( hDC, iFormat, &pfd );
    
    [b]	hGLRC = wglCreateContext( hDC );
    	wglMakeCurrent( hDC, hGLRC );[/b]
    
    };
    

    Er sagt mir aber:

    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__wglMakeCurrent@8" in Funktion ""void __cdecl opengl_setup(struct HWND__ *)" (?opengl_setup@@YAXPAUHWND__@@@Z)".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__wglCreateContext@4" in Funktion ""void __cdecl opengl_setup(struct HWND__ *)" (?opengl_setup@@YAXPAUHWND__@@@Z)".

    Was mache ich falsch? Soweit ich das verstanden habe, muss ich doch gar nichts extra installieren, das sollte Windows doch schon selber gemacht haben? Ich habe auch nichts an Downloads dazu gefunden im Netz.

    Was ist falsch?

    Danke,

    Grüße,

    Thilo



  • Du hast vergessen opengl32.lib zu linken.



  • Also muss ich das hier hinzufügen?

    #pragma comment( lib, "opengl32.lib" )
    

    Super, damit klappt es vorerst. Muss ich noch andere Libs linken, für später?



  • Ich würde von #pragma comment abraten. Sowas gehört nicht in den Code sondern ins Buildsystem. Besser die lib in den Projekteigenschaften unter Linker > Additional Dependencies eintragen.



  • Okay, klappt. Danke für die schnelle Hilfe 🙂


Anmelden zum Antworten