OpenGL Fenster erstellen



  • Ich möchte einen Mapeditor entwickeln (mehr zur Übung als zum fertigstellen), also brauch ich ein Hauptfenster und 4 "Child"-Fenster für die 4-Perspectiven (3D,Top,Front,Left), das funzt auch alles einwandfrei, wenn ich aber nun für das 3D-Fenster OpenGL initialisieren will, schafft es windows nicht ein Pixelformat zu finden. Folgend ein wenig Code zur Fehlerfindung 🙂

    Edit (c) Headhunter : c++ Tags gesetzt

    //Hauptfenster
         wndclass.cbSize        = sizeof (wndclass) ;
         wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (DKGRAY_BRUSH) ;
         wndclass.lpszMenuName  = "Menu";
         wndclass.lpszClassName = szAppName ;
         wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
    //3D-Fenster
         Window3D.cbSize        = sizeof (Window3D) ;
         Window3D.style         = CS_OWNDC ;
         Window3D.lpfnWndProc   = WndProc3D ;
         Window3D.cbClsExtra    = 0 ;
         Window3D.cbWndExtra    = 0 ;
         Window3D.hInstance     = hInstance ;
         Window3D.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         Window3D.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         Window3D.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
         Window3D.lpszMenuName  = NULL;
         Window3D.lpszClassName = "3DWindow" ;
         Window3D.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
    
         //Hier steht eigentlich der Code zum registrieren der Fenster
    
         //Hauptfenster
         hwnd = CreateWindow (szAppName, "Titel", WS_OVERLAPPEDWINDOW ,
                              10, 10, 500, 300,
                              NULL, NULL, hInstance, NULL) ;
         //3D-Fenster 
         hwnd3D= CreateWindowEx( WS_EX_CLIENTEDGE, "3DWindow", "",
                                 WS_CLIPCHILDREN | WS_CHILD | WS_CLIPSIBLINGS ,
                                 0, 0, 250, 150, 
                       hwnd, NULL, NULL, NULL );
    
         //Das Pixelformat
         PIXELFORMATDESCRIPTOR pfd=
         {
       sizeof(PIXELFORMATDESCRIPTOR),1, 
            PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER, 
            PFD_TYPE_RGBA, 
            32, 
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
            16, 
            0, 0, 
            PFD_MAIN_PLANE, 
            0, 0, 0, 0 
         };
    
       if (!(hDC = GetDC(hwnd3D)))
       {
          //KillGLWindow();
          ErrorMsg("Kann GL-DeviceContext nicht erstellen.");
          return FALSE;
       }
       if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd))) //<----HIER KOMMT DER
       {                                                  //     FEHLER
          //KillGLWindow();
          ErrorMsg("Kann kein passendes Pixelformat finden.");//BZW. HIER
          return FALSE;
       }
    

    Weiß einer woran das liegen kann, ich vermute ja das es an den Fenstereinstellungen liegt da das Pixelformat funzt wenn ich genau den Code aus dem NEHE-Tutorial nehme.
    ]

    [ Dieser Beitrag wurde am 11.02.2003 um 13:24 Uhr von Headhunter editiert. ]



  • Set bei dem 3D-Fenster auch mal CS_HREDRAW | CS_VREDRAW



  • Das bringt auch nichts, zum. hab ich schonmal probiert OpenGL in dem Hauptfenster zu erstellen, wo genau der selbe fehler kam.



  • Dieser hier stammt aus einem (funktionierenden 😃 ) Projekt von mir:

    PIXELFORMATDESCRIPTOR pfd = 
        { 
            sizeof(PIXELFORMATDESCRIPTOR), 
            1,                   
            PFD_DRAW_TO_WINDOW |
            PFD_SUPPORT_OPENGL |
            PFD_DOUBLEBUFFER,
            PFD_TYPE_RGBA,
            24,
            0, 0, 0, 0, 0, 0,
            0,              
            0,                    
            0,                
            0, 0, 0, 0,          
            8,                    
            0,                    
            0,                    
            PFD_MAIN_PLANE,       
            0,                    
            0, 0, 0              
        };
    


  • Was so ziemlich das selbe is, bis auf die anderen buffer- und farbtiefen, trotzdem danke. Es liegt ja glaub ich auch nicht am Pixelformat sondern am fenster.



  • Achso wenn ich beim Fehler mit getlasterror den Fehlercode hole bringt er die nummer 125, was laut msdn soviel bedeutet wie "Kann Modul nicht finden" oder so, falls das hier jemand weiterhilft.



  • Achso, danke Headhunter, das nächste mal denk ich dran 🙂



  • So wie ich das sehe hast du schlicht und ergreifend RegisterClass vergessen! Also:

    RegisterClass(&wndclass);
    RegisterClass(&Window3D);
    


  • Window3D.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

    //Hier steht eigentlich der Code zum registrieren der Fenster

    //Hauptfenster
    hwnd = CreateWindow (szAppName, "Titel", WS_OVERLAPPEDWINDOW ,

    Ich hab jetz alles nochmal neu programmiert und jetz funzt es, was weiß ich woran es lag 😕


Anmelden zum Antworten