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