Find mein Fehler bei OpenGL Vollbild Modus nicht...



  • Hi Leute,
    ich wollt grad mal wieder ein Vollbild-Fenstermodus Programm für ein Spiel compilen.
    Aber hier liegt auch shcon gleich mien problem, ich kann den fehler verdammt noch mal nicht finden.
    Bin ich jetzt ganz duch einander oder sieht einer den fehler ?
    Währe dankbar wenn mir einer helfen könnte.

    #include <windows.h>
    #include <gl\gl.h>
    #include <gl\glu.h>
    #include <gl\glaux.h>
    
    HGLRC hRC=NULL;
    HDC hDC=NULL;
    HWND hWnd=NULL;
    HINSTANCE hInstance;
    
    bool keys[256];
    bool active=TRUE;
    bool fullscreen=TRUE;
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    
    GLvoid ReSizeGLScene(GLsizei width,GLsizei height)
    {
    if(height==0)
    {
    height=1;
    }
    glViewport(0,0,width,height);
    glLoadIdentity();
    glMatrixMode(GL_PROJECTION);
    
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.0f,100.0f);
    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }
    
    int InitGL(GLvoid)
    {
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClearDepth(0.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
    return TRUE;
    }
    
    GLvoid KillGLWindow(GLvoid)								
    {
    	if (fullscreen)										
    	{
    		ChangeDisplaySettings(NULL,0);					
    		ShowCursor(TRUE);								
    	}
    }
    
    BOOL CreateGLWindow(char* title,int width,int height,int bits,bool fullscreenflag)
    {{
    GLuint PixelFormat;
    WNDCLASS wc;
    DWORD dwExStyle;
    DWORD dwStyle;
    RECT WindowRect;
    WindowRect.left=(long)0;
    WindowRect.left=(long)width;
    WindowRect.top=(long)0;
    WindowRect.bottom=(long)height;
    
    if(!RegisterClass(&wc))
    {
    MessageBox(NULL,"Konnte die Registerklassen nicht registrieren","Fehler",MB_OK);
    return FALSE;
    }
    
    hInstance =GetModuleHandle(NULL);
    wc.hInstance=hInstance;
    wc.lpfnWndProc=(WNDPROC)WndProc;
    wc.lpszMenuName=NULL;
    wc.lpszClassName="OpenGL";
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hbrBackground=NULL;
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hIcon=LoadIcon(NULL,IDI_WARNING);
    
    if(fullscreen)
    {
    DEVMODE dmScreenSettings;
    dmScreenSettings.dmPelsWidth=width;
    dmScreenSettings.dmPelsHeight=height;
    dmScreenSettings.dmBitsPerPel=bits;
    dmScreenSettings.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
    
    if(ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
    {
    if(MessageBox(NULL,"Konnte nicht im Vollbild Modus starten/nMöchten sie im Fenster Modus starten?","Fehler",MB_YESNO)==IDYES)
    {
    fullscreen=FALSE;
    }
    }
    
    if(fullscreen)
    {
    dwExStyle=WS_EX_APPWINDOW;
    dwStyle=WS_POPUP;
    ShowCursor(FALSE);
    }
    else
    {
    dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
    dwStyle=WS_OVERLAPPEDWINDOW;
    }
    
    	if (!(hWnd=CreateWindowEx(	dwExStyle,							
    								"OpenGL",						
    								title,							
    								dwStyle |						
    								WS_CLIPSIBLINGS |					
    								WS_CLIPCHILDREN,				
    								0, 0,								
    								WindowRect.right-WindowRect.left,	
    								WindowRect.bottom-WindowRect.top,	
    								NULL,								
    								NULL,							
    								hInstance,						
    								NULL)))	
    
    	static	PIXELFORMATDESCRIPTOR pfd=				
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),			
    		1,										
    		PFD_DRAW_TO_WINDOW |						
    		PFD_SUPPORT_OPENGL |						
    		PFD_DOUBLEBUFFER,							
    		PFD_TYPE_RGBA,							
    		bits,										
    		0, 0, 0, 0, 0, 0,						
    		0,											
    		0,											
    		0,										
    		0, 0, 0, 0,								
    		16,											
    		0,											
    		0,										
    		PFD_MAIN_PLANE,								
    		0,											
    		0, 0, 0										
    	};
    }
    
    ShowWindow(hWnd,SW_SHOW);
    SetForegroundWindow(hWnd);
    SetFocus(hWnd);
    ReSizeGLScene(width,height);
    return TRUE;
    }
    
    }
    LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_CLOSE:
    {
    PostQuitMessage(0);
    return 0;
    }
    return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return FALSE;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
    {
    MSG msg;
    bool done=FALSE;
    
    if(!CreateGLWindow("Mein Fenster...",1024,768,32))
    {
    return 0;
    }
    
    while(!done)
    {
    if(PeekMessage(&msg,0,0,NULL,PM_REMOVE))
    {
    if(msg.message==TRUE)
    {
    done=TRUE;
    }
    else
    {
    DispatchMessage(&msg);
    TranslateMessage(&msg);
    }
    }
    else
    {
    if(active)
    {
    if(keys[VK_ESCAPE])
    {
    done=TRUE;
    }
    }
    
    }
    }
    }
    }
    
    KillGLWindow();
    return (msg.wParam);
    }
    

    Edit:
    Ich seh grad, es muss an irgendeiner KLammer liegen die fehlt oder so. Finde den Fehler aber nicht



  • Hallo

    Ein Fehler während des Kompilierens? Da sagt doch der Compiler, wo der Fehler liegt. Bei diesen Einrückungen hätte ich auch Probleme mit Klammern.

    chrische



  • Ja aber er kann mir ja nicht genau sagen wo der Fehler liegt.
    Dachte nur, es wüsste jetzt einer auf Anhieb wo so ne dre**s Klammer fehlt.
    Danke wie immer im Vor raus.



  • Hallo

    voraus (mit einem r).

    chrische



  • Ein Tipp: Rück deinen Code ein, dann sieht man auf Anhieb dass und auch meistens wo eine Klammer fehlt.



  • Entschuldige, aber ich versteh nicht was du mit Einrücken meinst 😕
    Danke im Voraus.



  • Hallo

    Er meinte die Benutzung der Tab-Taste.

    chrische



  • Ja, aber das bringt doch wahrscheinlich nichts.
    Aber ich probier mal weiter....



  • Hallo

    Es hilft die Blöcke zu erkennen und somit fehlende Klammern zu finden.

    chrische



  • Naja, ich denke mal ich bin schon etwas weiter. Ich bin jetzt soweit das er mir nur nicht die Klammer nach dem BOOL CreateGLwindow(....) compilet, nämlich :
    {.
    Allerdings kann ich es mir nicht erklären weil ich die Klammer hinterher wieder schliesse.

    BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
    {    
    
    	GLuint		PixelFormat;			// Holds The Results After Searching For A Match
    	WNDCLASS	wc;						// Windows Class Structure
    	DWORD		dwExStyle;				// Window Extended Style
    	DWORD		dwStyle;				// Window Style
    	RECT		WindowRect;				// Grabs Rectangle Upper Left / Lower Right Values
    	WindowRect.left=(long)0;			// Set Left Value To 0
    	WindowRect.right=(long)width;		// Set Right Value To Requested Width
    	WindowRect.top=(long)0;				// Set Top Value To 0
    	WindowRect.bottom=(long)height;		// Set Bottom Value To Requested Height
    
    	fullscreen=fullscreenflag;			// Set The Global Fullscreen Flag
    
    	hInstance			= GetModuleHandle(NULL);				// Grab An Instance For Our Window
    	wc.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;	// Redraw On Size, And Own DC For Window.
    	wc.lpfnWndProc		= (WNDPROC) WndProc;					// WndProc Handles Messages
    	wc.cbClsExtra		= 0;									// No Extra Window Data
    	wc.cbWndExtra		= 0;									// No Extra Window Data
    	wc.hInstance		= hInstance;							// Set The Instance
    	wc.hIcon			= LoadIcon(NULL, IDI_WINLOGO);			// Load The Default Icon
    	wc.hCursor			= LoadCursor(NULL, IDC_ARROW);			// Load The Arrow Pointer
    	wc.hbrBackground	= NULL;									// No Background Required For GL
    	wc.lpszMenuName		= NULL;									// We Don't Want A Menu
    	wc.lpszClassName	= "OpenGL";								// Set The Class Name
    
    	if (!RegisterClass(&wc))									// Attempt To Register The Window Class
    	{
    		MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;											// Return FALSE
    	}
    
    	if(fullscreen)
    	{                                                                                                                  
                      DEVMODE dmScreenSettings;
                      dmScreenSettings.dmPelsWidth=width;
                      dmScreenSettings.dmPelsHeight=height;
                      dmScreenSettings.dmBitsPerPel=bits;
                      dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
                      }
    
                      if(fullscreen)
                      {
                                    dwExStyle=WS_EX_APPWINDOW;
                                    dwStyle=WS_POPUP;
                                    ShowCursor(TRUE);
                                    }
    
                                    else
                                    {
                                        dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
                                        dwStyle=WS_OVERLAPPEDWINDOW;
                                        }
    
                                        if(!(hWnd=CreateWindowEx(
                                        dwExStyle,
                                        "OpenGL",
                                        title,
                                        WS_CLIPSIBLINGS |
                                        WS_CLIPCHILDREN |
                                        dwStyle,
                                        0,0,
                                        WindowRect.right-WindowRect.left,
                                        WindowRect.bottom-WindowRect.top,
                                        NULL,
                                        NULL,
                                        hInstance,
                                        NULL)))
    
                                        static PIXELFORMATDESCRIPTOR pfd= 
                                        {
                                               sizeof(PIXELFORMATDESCRIPTOR),
                                               1,
                                               PFD_DRAW_TO_WINDOW |
                                               PFD_SUPPORT_OPENGL |
                                               PFD_DOUBLEBUFFER |
                                               PFD_TYPE_RGBA,
                                               0,0,0,0,0,0,
                                               0,
                                               0,
                                               0,
                                               0,0,0,0,
                                               0,
                                               PFD_MAIN_PLANE,
                                               0,
                                               0,0,0
                                               };
    
                                               ShowWindow(hWnd,SW_SHOW);
                                               SetForegroundWindow(hWnd);
                                               SetFocus(hWnd);
                                               ReSizeGLScene(width,height);
                                               return TRUE;
                                               }
    
                      LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
                      {
                              switch(message)
                              {
                                             case WM_CLOSE:
                                                  {
                                                           PostQuitMessage(0);
                                                           return 0;
                                                           }
    
                                                           }
                                                           return DefWindowProc(hWnd,message,wParam,lParam);
                                                           }
    
                                                           int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
                                                           {
                                                               MSG msg;
                                                               bool done=FALSE;
    
                                                               if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
                                                               {
                                                                                            fullscreen=FALSE;
                                                                                            }
    
                                                                                            if(!CreateGLWindow("Steve's Fenster",1024,768,32))
                                                                                            {
                                                                                                                        return 0;
                                                                                                                        }
    
                                                                                                                        while(!done)
                                                                                                                        {
                                                                                                                                    if(PeekMessage(&msg,0,0,NULL,PM_REMOVE))
                                                                                                                                    {
                                                                                                                                                                            if(msg.message=WM_QUIT)
                                                                                                                                                                            {
                                                                                                                                                                                                done=TRUE;
                                                                                                                                                                                                }
                                                                                                                                                                                                else
                                                                                                                                                                                                {
    
                                                               DispatchMessage(&msg);
                                                               TranslateMessage(&msg);
                                                               }
    
                                                             }
                                                             }
    
                                                             if(active)
                                                             {
                                                                       if(keys[VK_ESCAPE])
                                                                       {
                                                                                          done=TRUE;
                                                                                          }
                                                                                          else
                                                                                          {
                                                                                              DrawGLscene();
                                                                                              SwapBuffer(hDC);
                                                                                              }
                                                                                              }
    
                                                                                               KillGLWindow();
                                                                                              return (msg.wParam);
                                                                                              }
    


  • Wie wärs wenn du die Fehlermeldung hier postest?



  • Naja, ich denke mal ich bin schon etwas weiter. Ich bin jetzt soweit das er mir nur nicht die Klammer nach dem BOOL CreateGLwindow(....) compilet, nämlich :
    {.
    Allerdings kann ich es mir nicht erklären weil ich die Klammer hinterher wieder schliesse.

    BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
    {    
    
    	GLuint		PixelFormat;			// Holds The Results After Searching For A Match
    	WNDCLASS	wc;						// Windows Class Structure
    	DWORD		dwExStyle;				// Window Extended Style
    	DWORD		dwStyle;				// Window Style
    	RECT		WindowRect;				// Grabs Rectangle Upper Left / Lower Right Values
    	WindowRect.left=(long)0;			// Set Left Value To 0
    	WindowRect.right=(long)width;		// Set Right Value To Requested Width
    	WindowRect.top=(long)0;				// Set Top Value To 0
    	WindowRect.bottom=(long)height;		// Set Bottom Value To Requested Height
    
    	fullscreen=fullscreenflag;			// Set The Global Fullscreen Flag
    
    	hInstance			= GetModuleHandle(NULL);				// Grab An Instance For Our Window
    	wc.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;	// Redraw On Size, And Own DC For Window.
    	wc.lpfnWndProc		= (WNDPROC) WndProc;					// WndProc Handles Messages
    	wc.cbClsExtra		= 0;									// No Extra Window Data
    	wc.cbWndExtra		= 0;									// No Extra Window Data
    	wc.hInstance		= hInstance;							// Set The Instance
    	wc.hIcon			= LoadIcon(NULL, IDI_WINLOGO);			// Load The Default Icon
    	wc.hCursor			= LoadCursor(NULL, IDC_ARROW);			// Load The Arrow Pointer
    	wc.hbrBackground	= NULL;									// No Background Required For GL
    	wc.lpszMenuName		= NULL;									// We Don't Want A Menu
    	wc.lpszClassName	= "OpenGL";								// Set The Class Name
    
    	if (!RegisterClass(&wc))									// Attempt To Register The Window Class
    	{
    		MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    		return FALSE;											// Return FALSE
    	}
    
    	if(fullscreen)
    	{                                                                                                                  
                      DEVMODE dmScreenSettings;
                      dmScreenSettings.dmPelsWidth=width;
                      dmScreenSettings.dmPelsHeight=height;
                      dmScreenSettings.dmBitsPerPel=bits;
                      dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
                      }
    
                      if(fullscreen)
                      {
                                    dwExStyle=WS_EX_APPWINDOW;
                                    dwStyle=WS_POPUP;
                                    ShowCursor(TRUE);
                                    }
    
                                    else
                                    {
                                        dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
                                        dwStyle=WS_OVERLAPPEDWINDOW;
                                        }
    
                                        if(!(hWnd=CreateWindowEx(
                                        dwExStyle,
                                        "OpenGL",
                                        title,
                                        WS_CLIPSIBLINGS |
                                        WS_CLIPCHILDREN |
                                        dwStyle,
                                        0,0,
                                        WindowRect.right-WindowRect.left,
                                        WindowRect.bottom-WindowRect.top,
                                        NULL,
                                        NULL,
                                        hInstance,
                                        NULL)))
    
                                        static PIXELFORMATDESCRIPTOR pfd= 
                                        {
                                               sizeof(PIXELFORMATDESCRIPTOR),
                                               1,
                                               PFD_DRAW_TO_WINDOW |
                                               PFD_SUPPORT_OPENGL |
                                               PFD_DOUBLEBUFFER |
                                               PFD_TYPE_RGBA,
                                               0,0,0,0,0,0,
                                               0,
                                               0,
                                               0,
                                               0,0,0,0,
                                               0,
                                               PFD_MAIN_PLANE,
                                               0,
                                               0,0,0
                                               };
    
                                               ShowWindow(hWnd,SW_SHOW);
                                               SetForegroundWindow(hWnd);
                                               SetFocus(hWnd);
                                               ReSizeGLScene(width,height);
                                               return TRUE;
                                               }
    
                      LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
                      {
                              switch(message)
                              {
                                             case WM_CLOSE:
                                                  {
                                                           PostQuitMessage(0);
                                                           return 0;
                                                           }
    
                                                           }
                                                           return DefWindowProc(hWnd,message,wParam,lParam);
                                                           }
    
                                                           int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
                                                           {
                                                               MSG msg;
                                                               bool done=FALSE;
    
                                                               if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
                                                               {
                                                                                            fullscreen=FALSE;
                                                                                            }
    
                                                                                            if(!CreateGLWindow("Steve's Fenster",1024,768,32))
                                                                                            {
                                                                                                                        return 0;
                                                                                                                        }
    
                                                                                                                        while(!done)
                                                                                                                        {
                                                                                                                                    if(PeekMessage(&msg,0,0,NULL,PM_REMOVE))
                                                                                                                                    {
                                                                                                                                                                            if(msg.message=WM_QUIT)
                                                                                                                                                                            {
                                                                                                                                                                                                done=TRUE;
                                                                                                                                                                                                }
                                                                                                                                                                                                else
                                                                                                                                                                                                {
    
                                                               DispatchMessage(&msg);
                                                               TranslateMessage(&msg);
                                                               }
    
                                                             }
                                                             }
    
                                                             if(active)
                                                             {
                                                                       if(keys[VK_ESCAPE])
                                                                       {
                                                                                          done=TRUE;
                                                                                          }
                                                                                          else
                                                                                          {
                                                                                              DrawGLscene();
                                                                                              SwapBuffer(hDC);
                                                                                              }
                                                                                              }
    
                                                                                               KillGLWindow();
                                                                                              return (msg.wParam);
                                                                                              }
    


  • weiss denn wirklich keiner die Lösung/Antwort ?



  • du bist lustig.



  • Hallo

    Warum schreibst du uns nicht, was der Compiler meldet?

    chrische



  • Compiler Fehlermeldung :
    In function BOOL CreateGLWindow(char*, int, int, int, bool)': a function-definition is not allowed here before '{' token 168 D:\\Dokumente und expected,' or `;' before '{' token



  • Ich wiess jetzt wenigstens shcon einmal, das es von diesem Code stück abhängt :

    BOOL CreateGLWindow(char* title,int width,int height,int bits,bool fullscreenflag)
    		{
    

    Der Compiler sagt mir dann immer das er die Klammer nicht compilen kann, weil
    danach eine Variablen deklaration folgt.
    Danke im Voraus.



  • Bei CreateGLWindow ist keine Funktionsdefinition erlaubt vor einenm {, stattdessen wird ein ; oder , erwartet. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)


Anmelden zum Antworten