JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=74ab8f32e676d2847dbfdf4a948dc7f3Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

OpenGL - Initialisierung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 23.11.2004, 19:54    Titel: OpenGL - Initialisierung Antworten mit Zitat

Hi @all,
ich hab mir mal aus diversen OpenGL-Tutorials eine Initialisierungsroutine zusammen gebastelt, nur funktioniert das nicht so wie ich will...
D.h., funktionieren tuts schon, nur ist das erzeugte Fenster irgendwie "durchsichtig" und ich kann nichts hinein "zeichnen"... =/

Mir gings als ich das geschrieben hab hauptsächlich um den Lerneffekt, drum hab ich die Kommentare und ganzen Fehlerbehandlungssachen entfernt um etwas an Übersicht und Durchblick zu gewinnen... (jaja, hätte ich nicht machen sollen Wink )...

Mir leuchtet außerdem die Funktion der Pixeldescriptor-Struktur nicht ganz ein, könnte mir das jemand erklären? Kenn mich mit der WinAPI eigentlich nicht wirklich aus... =/

Hier der Code:
Code:
Init(GLuint uiScrWidth, GLuint uiScrHeight, GLuint uiBpp, bool bFullscreen,
                std::string strTitle,
                LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)){
   hInstance = GetModuleHandle(NULL);
   
   sSettings.uiScrWidth = uiScrWidth;
   sSettings.uiScrHeight = uiScrHeight;
   sSettings.uiBpp = uiBpp;
   sSettings.bFullscreen = bFullscreen;

   WNDCLASS   wc;
   DWORD      dwExStyle;                  
   DWORD      dwStyle;
   
   RECT WindowRect;                     
   WindowRect.left=(long)0;               
   WindowRect.right=(long)sSettings.uiScrWidth;               
   WindowRect.top=(long)0;                  
   WindowRect.bottom=(long)sSettings.uiScrHeight;


   wc.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;   
   wc.lpfnWndProc      = (WNDPROC)WndProc;   
   wc.cbClsExtra      = 0;               
   wc.cbWndExtra      = 0;               
   wc.hInstance      = hInstance;            
   wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO);   
   wc.hCursor         = Loa dCursor(NULL, IDC_ARROW);   
   wc.hbrBackground   = NULL;      
   wc.lpszMenuName      = NULL;   
   wc.lpszClassName   = "OpenGL";   

   RegisterClass(&wc);            

   if(sSettings.bFullscreen){
      DEVMODE dmScreenSettings;
      memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
      dmScreenSettings.dmSize=sizeof(dmScreenSettings);
      dmScreenSettings.dmPelsWidth   = sSettings.uiScrWidth;
      dmScreenSettings.dmPelsHeight   = sSettings.uiScrHeight;
      dmScreenSettings.dmBitsPerPel   = sSettings.uiBpp;
      dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

      ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN);
      

      dwExStyle=WS_EX_APPWINDOW;
      dwStyle=WS_POPUP;
      ShowCursor(FALSE);
   }
   else {
      dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
      dwStyle=WS_OVERLAPPEDWINDOW;
   }

   AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
   
   hWnd=CreateWindowEx(dwExStyle,
               "OpenGL",
               strTitle.c_str(),
               WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle,
               0, 0,
               WindowRect.right-WindowRect.left,
               WindowRect.bottom-WindowRect.top,
               NULL,               
               NULL,
               hInstance,            
               NULL);



   static   PIXELFORMATDESCRIPTOR pfd = {
      sizeof(PIXELFORMATDESCRIPTOR),   // Größe des Pixel Format Descriptors
      1,                        // Versions Nummer
      PFD_DRAW_TO_WINDOW |         // Format muss Fenster unterstützen
      PFD_SUPPORT_OPENGL |         // Format muss OpenGL unterstützen
      PFD_DOUBLEBUFFER,            // Muss Double Buffering unterstützen
      PFD_TYPE_RGBA,               // Fordere ein RGBA Format an
      sSettings.uiBpp,            // wähle unsere Farbtiefe aus
      0, 0, 0, 0, 0, 0,            // Color Bits werden ignoriert
      0,                        // Kein Alpha Buffer
      0,                        // Shift Bit wird ignoriert
      0,                        // Kein Accumulation Buffer
      0, 0, 0, 0,                  // Accumulation Bits werden ignoriert
      16,                        // 16Bit Z-Buffer (Depth Buffer)
      0,                        // Kein Stencil Buffer
      0,                        // Kein Auxiliary Buffer
      PFD_MAIN_PLANE,               // Haupt-Zeichen-Schicht
      0,                        // Reserviert
      0, 0, 0                     // Layer Masken werden ignoriert
   };

   hDC = GetDC(hWnd);
   
    SetPixelFormat(hDC,ChoosePixelFormat(hDC,&pfd),&pfd);

   
   hRC = wglCreateContext(hDC);
   
   wglMakeCurrent(hDC,hRC);


   ShowWindow(hWnd,SW_SHOW);
   SetForegroundWindow(hWnd);
   SetFocus(hWnd);   
   
   Resize(sSettings.uiScrWidth, sSettings.uiScrHeight);   
   
   
   glShadeModel(GL_SMOOTH);
   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
   glClearDepth(1.0f);
   glEnable(GL_DEPTH_TEST);
   glDepthFunc(GL_LEQUAL);
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
   glEnable(GL_TEXTURE_2D);
}


p.s.:

sSettings:
Code:
struct settings {
   GLuint uiScrWidth, uiScrHeight, uiBpp;
   bool bFullscreen;
};



p.p.s.:
Code:
Resize(GLuint uiScrWidth, GLuint uiScrHeight){
   if(sSettings.uiScrHeight==0) sSettings.uiScrHeight=1;

   glViewport(0, 0, sSettings.uiScrWidth, sSettings.uiScrHeight);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();

   gluPerspective(45.0f,(GLfloat)sSettings.uiScrWidth/(GLfloat)sSettings.uiScrHeight,0.1f,100.0f);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 23.11.2004, 20:18    Titel: Antworten mit Zitat

Problem gelöst? Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 23.11.2004, 20:20    Titel: Antworten mit Zitat

Hehe, denk schon... Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum