Original Post
i have yet another problem cuz of Dev C++
i wrote all the code to make a simple OpenGl window but when i try to compile it i get 31 errors!!!
here is the code(dont get mad cuz its long
)
//include all the needed header files
#include
#include
#include
#include
//This is the OpenGl rendering context
HGLRC hRC=NULL;
//This is the windows device context
HDC hDC=NULL;
//This is the handle to the window
HWND hWnd;
//This is the instance of the window
HINSTANCE hInstance;
//An array to monitor key presses
bool keys[256];
//Variable to tell if the window is minimized or not
bool active=true;
//Variable to check if the window is fullscreen or not
bool fullscreen=true;
//This is the prototype for the message handler
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
//This is the function that resizes the winddow
GLvoid ReSizeGLScene( GLsizei width, GLsizei height)
{
//If the height is zero, make it equal 1
if (height==0)
{
height=1;
}
//Reset the current viewport
glViewport( 0, 0, width, height);
//Select the projection matrix
glMatrixMode(GL_PROJECTION);
//Reset the projection matrix
glLoadIdentity();
//Calculate the aspect ratio of the window
gluPerspective(45.0f, (GLfloat)width/(Glfloat)height, 0.1f, 100.0f);
//Select the modelview matrix
glMatrixMode(GL_MODELVIEW);
//Reset the modelview matrix
glLoadIdentity();
}
//This is the function that sets up OpenGL
int InitGL(GLvoid)
{
//Enable smooth shading
glShadeModel(GL_SMOOTH);
//Set the color of the screen when it clears
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f);
//Setup the depth buffer
glClearDepth( 1.0f);
//Enable depth testing
glEnable(GL_DEPTH_TEST);
//The type of depth test to do
glDepthFunc(GL_LEQUAL);
//Get the best perspective correction done
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
//Return true
return true;
}
//This is the function in which we draw everything
int DrawGLScene( GLvoid)
{
//Clear the screen and the depth buffer
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Reset the current modelview matrix
glLoadIdentity();
//Return true
return true;
}
//This function kills the window
Glvoid KillGLWindow( Glvoid)
{
//Check if we are in fullscreen mode
if (fullscreen)
{
//Return us back to our original desktop
ChangeDisplaySettings( NULL, 0);
//Show the cursor
ShowCursor(true);
}
//Check if we have a rendering context
if (hRC)
{
//Try to release the RC and DC contexts
if (!wglMakeCurrent( NULL, NULL))
{
//Tell the user the RC and DC could not be releases
MessageBox( NULL, "Release Of DC And RC Failed.", "Shutdown Error",
MB_OK | MB_INFORMATION);
}
//Can we delete the context
if (!wglDeleteContext(hRC))
{
//Tell the user the RC could not be released
MessageBox( NULL, "Release Rendering Context Failed.", "Shutdown Error",
MB_OK |MB_ICONINFORMATION);
}
//Set hRC to NULL
hRC=NULL;
}
//Can we release the DC
if (hDC && !ReleaseDC(hWnd, hDC))
{
//Tell the user we can''t release the DC
MessageBox( NULL, "Relase Device Contxet Failed", "Shutdown Error",
MB_OK | MB_INFORMATION);
//Set the DC to NULL
hDC=NULL;
}
//Can we delete the window
if (hWnd && !DestroyWindow(hWnd))
{
//Tell the user we can''t delete the window
MessageBox( NULL, "Could not release hWnd", "Shutdown Error",
MB_OK | MB_INFORMATION);
//Set hWnd to NULL
hWnd=NULL;
}
//Can we unregister the class
if (!UnregisterClass("OpenGL", hInstance))
{
//Tell the user we can''t unregister the class
MessageBox( NULL, "Could Not Unregister Class", "Shutdown Error",
MB_OK | MB_INFORMATION);
//Set hInstance to NULL
hInstance=NULL;
}
}
//This function creates the OpenGL window
bool CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
//Hold results for the pixel search in this variable
GLuint PixelFormat;
//The windows class structure
WNDCLASS wc;
//Window Extended Style
DWORD dwExStyle;
//Window Style
DWORD dwStyle;
//Create a RECT
RECT WindowRect;
//Set left value to 0
WindowRect.left=(long)0;
//Set right value to requested width
WindowRect.right=(long)width;
//Set top value to 0
WindowRect.top=(long)0;
//Set bottom value to requested height
WindowRect.bottom=(long)height;
//Fullscreen has to equal fullscreenflag
fullscreen=fullscreenflag;
//Initiliaze some variables
hInstance=GetModuleHandle(NULL);
wc.style=CS_HREDRAW |CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc=(WNDPROC)WndProc;
wc.cbclsExtra=0;
wc.WndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon( NULL, IDI_WINLOGO);
wc.hCursor=LoadCursor( NULL, IDC_ARROW);
wc.hbrbackground=NULL;
wc.lpszMenuName=NULL;
wc.lpszClassName="OpenGL";
//Register the class
if (!RegisterClass(&wc))
{
//Tell the user class could not be registered
MessageBox( NULL, "Failed To Register The Windows Class", "Shutdown Error",
MB_OK | MB_INFORMATION);
//Return False
return false;
}
//Check if we should run in fullscreen mode
if (fullscreen)
{
//The device mode
DEVMODE dmScreenSettings;
//make sure memory is cleared
memset(&dmScreenSettings, 0, NULL, sizeof(dmScreenSettings));
//Size of the devmode structure
dmScreenSettings.dmSize=sizeof(dmScreenSettings);
//Selected screen width
dmScreenSettings.dmPelsWidth=width;
//Selected screen height
dmScreenSettings.dmPelsHeight=height;
//Selected bits per pixec
dmScreenSettings.dmBitsPerPel=bits;
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
//Try to set selected mode
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
//If we can''t get fullscreen, offer 2 choices
if (MessageBox( NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?",
"NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
{
//Fullscreen equals false
fullscreen=false;
}
else
{
//Tell the user program will close
MessageBox( NULL, "Proram Will Now Close", "Error", MB_OK |MB_ICONSTOP);
//Return False
return false;
}
}
}
//Are we still in fullscreen mode?
if (fullscreen)
{
//Window extended style
dwExStyle=WS_EX_APPWINDOW;
//Windows style
dwStyle=WS_POPUP;
//Hide mouse pointer
ShowCursor(false);
}
else
{
//Windows extended style
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
//Windows style
dwStyle=WS_OVERLAPPEDWINDOW;
}
//Adjust window to true requested size
AdjustWindowRectEx( &WindowRect, dwStyle, false, dwExStyle);
//Create the window
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)))
{
//Reset the display
KillGLWindow();
//Tell the user window could not be created
MessageBox( NULL, "Window Creation Error", "Error", MB_OK | MB_ICONEXCLAMATION);
//Return false
return false;
}
//Tell window how we want things to be
static PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAWTOWINDOW | PFD_SUPPRTOPENGL |
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
};
//Get a device context
if (!(hDC=GetDC(hWnd))
{
//Reset the display
KillGLWindow();
//Tell the user we can''t create a device context
MessagBox(NULL, "Can''t Create A GL Device Context", "Error", MB_OK | MB_ICONEXCLAMATION);
////Return false
return false;
}
// Did Windows Find A Matching Pixel Format?
if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))
{
//Reset the display
KillGLWindow();
//Tell the user we can''t find suitable PixelFormat
MessageBox(NULL,"Can''t Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
//Return false
return false;
}
// Are We Able To Set The Pixel Format?
if (!SetPixelFormat(hDC,PixelFormat,&pfd))
{
//Reset the display
KillGLWindow();
//Tell the user we can''t set the PixelFormat
MessageBox(NULL,"Can''t Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
//Return false
return false;
}
// Are We Able To Get A Rendering Context?
if (!(hRC=wglCreateContext(hDC)))
{
//Reset the display
KillGLWindow();
//Tell the user we can''t create a Gl rendering context
MessageBox(NULL,"Can''t Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
//Return false
return false;
}
// Try To Activate The Rendering Context
if (!wglMakeCurrent(hDC,hRC))
{
//Reset the display
KillGLWindow();
//Tell the user we can''t activate the Gl rendering context
MessageBox(NULL,"Can''t Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
//Return false
return false;
}
//Show the window
ShowWindow( hWnd, SW_SHOW);
//Slightly higher priority
SetForegroundWindow( hWnd);
//Set the keyboard focus
SetFocus( hWnd);
//Set perspective Gl scene
ReSizeGLScene( width, height);
//Initialize our new Gl window
if (!InitGL())
{
//Reset the display
KillGLWindow();
//Tell the user initialization failed
MessageBox( NULL, "Initialization Failed", "Error", MB_OK | MB_ICONEXCLAMATION);
//Return false
return false;
}
//Return true
return true;
}
//The message handler
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//Check the windows message
switch(uMsg)
{
//Watch for windows activation message
case WM_ACTIVE:
{
//Check the minimization state
if (!HIWORD( wParam))
{
//Program is active
active=true;
}
else
{
//Program is no longer active
active=false;
}
//Return to the message loop
return 0;
}
//Intercept system commands
case WM_SYSCOMMAND:
{
//Check system calls
switch( wParam)
{
//Screen saver is trying to start
case SC_SCREENSAVE:
//Monitor is trying to enter power save mode
case SC_MONITORPOWER:
//Prevent from happening
return 0;
}
//Exit
break;
}
//Did we get a close message
case WM_CLOSE:
{
//Post a quit message
PostQuitMessage(0);
//Jump back
return 0;
}
//Is a key being held
case WM_KEYDOWN:
{
//Mark the key as true
keys[wParam]=true;
//Jump back
return 0;
}
//A key has been released
case WM_KEYUP:
{
//Mark the key as false
keys[wParam]=false;
//Jump back
return 0;
}
//Resize the OpenGL window
case WM_SIZE:
{
//LOWORD=width, HIWORD=height
ReSizeScene(LOWORD(lParam), HIWORD(lParam));
//Jump back
return 0;
}
}
//The deafult message handler
return DefWindowProc( hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow)
{
//Windows message structure
MSG msg;
//Bool variable to quit loop
bool done=false;
//Ask the user if they want to run in fullscreen mode
if (MessageBox( NULL, "Would you like to run in fullscreen mode?", "Start fullscreen?",
MB_YESNO | MB_ICONEXCLAMATION) == ID_NO)
{
//Make fullscreen false
fullscreen=false;
}
//Create our OpenGl window
if (!CreateGLWindow( "Nehe''s OpenGL framework", 640, 480, 16, fullscreen))
{
//Quit if window was not created
return 0;
}
//Loop until done=true
while(!done)
{
//Is there a message on the queue
if (PeekMessage( &msg, NULL, 0, 0, PM_REMOVE))
{
//Was it a quit message?
if (msg.message==WM_QUIT)
{
//Done is true
done=true;
}
else
{
//Translate the message
TranslateMessage(&msg);
//Dispatch the message
DispatchMessage(&msg);
}
}
else
{
//Draw the screen and watch for ESC key
if (active && !DrawGLScene() || keys[VK_EX])
{
//Done equals true
done=true;
}
else
{
//Swap the buffer for double buffering
SwapBuffers(hDC);
}
//Is F1 being pressed
if (keys[VK_F1])
{
//Make the key false
keys[VK_F1]=false;
//Kill our current window
KillGLWindow();
//Toggle Fullscreen mode, window mode
fullscreen=!fullscreen;
//Make the OpenGl window again
if (!CreateGLWindow( "Nehe''s OpenGl framework", 640, 480, 16, fullscreen))
{
//Quit
return 0;
}
}
}
}
//Shutdown
//Kill the window
KillGLWindow();
//Exit the program
return (msg.wParam);
}
wat did i do wrong this time
i included all the needed .a files and everything