PDA

View Full Version : WGL_ARB_create_context is not supported



swethasharma
04-03-2012, 11:39 PM
Hello,

I was trying to create context in opengl.I was able create the window but WGL_ARB_create_context is not supported?
I would like to know why?


#include <Windows.h>
#include <stdio.h>

#include <GL/glew.h>
#include <GL/wglew.h>
#include <GL/gl.h>

#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glew32.lib")
HGLRC hrc;
HDC hdc;
HWND hwnd;
HINSTANCE hInstance;
int running=1;
int windowWidth;
int windowHeight;

void setupScene(void)
{
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
}

void reshapeWindow(int w,int h)
{
windowWidth = w; // Set the window width
windowHeight = h; // Set the window height
}

void renderScene(void) {
glViewport(0, 0, windowWidth, windowHeight); // Set the viewport size to fill the window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Clear required buffers
SwapBuffers(hdc); // Swap buffers so we can see our rendering
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
//WNDCLASS wndclass;


switch(message)
{
case WM_SIZE:
{
reshapeWindow(LOWORD(lparam), HIWORD(lparam)); // Send the new window size to our OpenGLContext
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}


}
return DefWindowProc(hwnd,message,wparam,lparam);
}

int CreateGLcontext(HWND hwnd)
{
PIXELFORMATDESCRIPTOR pfd;
int nPixelFormat;
HGLRC tempcontext;
BOOL bResult;
GLenum err;
int attribs[]={WGL_CONTEXT_MAJOR_VERSION_ARB,3,WGL_CONTEXT_MINO R_VERSION_ARB,1,WGL_CONTEXT_FLAGS_ARB,WGL_CONTEXT_ FORWARD_COMPATIBLE_BIT_ARB,0};
const char*GLversionstring;
int OpenGLVersion[2];
memset(&amp;pfd,0,sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion=1;
pfd.dwFlags=PFD_DOUBLEBUFFER|PFD_SUPPORT_OPENGL|PF D_DRAW_TO_WINDOW;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=24;
pfd.cDepthBits=16;
pfd.iLayerType=PFD_MAIN_PLANE;
hdc=GetDC(hwnd);

nPixelFormat=ChoosePixelFormat(hdc,&amp;pfd);
if(nPixelFormat==0)
return 0;
bResult=SetPixelFormat(hdc,nPixelFormat,&amp;pfd);
if(!bResult)
return 0;
tempcontext=wglCreateContext(hdc);
wglMakeCurrent(hdc,tempcontext);
err=glewInit();

if(GLEW_OK!=err)
{

printf("glew is not initialized");

}

if(glewIsSupported("WGL_ARB_create_context")==1)
{
hrc=wglCreateContextAttribsARB(hdc,0,attribs);
wglMakeCurrent(NULL,NULL);
wglDeleteContext(tempcontext);
wglMakeCurrent(hdc,hrc);
}
else
{
hrc=tempcontext;
}
GLversionstring=glGetString(GL_VERSION);

glGetIntegerv(GL_MAJOR_VERSION,&amp;OpenGLVersion[0]);
glGetIntegerv(GL_MINOR_VERSION,&amp;OpenGLVersion[1]);

if(!hrc) return 0;

return 1;




}

int createWindow(LPCWSTR title,int width,int height)
{
WNDCLASS wndclass;


HWND hwnd;
DWORD dwExStyle= WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;
hInstance=GetModuleHandle(NULL);
wndclass.style=CS_OWNDC;
wndclass.lpfnWndProc=(WNDPROC)WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_WINLOGO);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject( BLACK_BRUSH );
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=title;
if(!RegisterClass(&amp;wndclass))
return 0;
hwnd=CreateWindowEx(dwExStyle,title,title,WS_OVERL APPEDWINDOW,CW_USEDEFAULT,0,width,height,NULL,NULL ,hInstance,NULL);
CreateGLcontext(hwnd);
ShowWindow(hwnd,SW_SHOW);
//UpdateWindow(hwnd);
return 1;


}


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nCmdShow)
{
MSG msg;
size_t convertedChars=0;
const unsigned int newsize=100;
char wcstring[100];
char *orig="OpenGL Project";
size_t origsize=strlen(orig)+1;



mbstowcs_s(&amp;convertedChars,wcstring,origsize,orig, _TRUNCATE);
createWindow(wcstring,640,400);
//setupscene

setupScene();

while(running)
{
if(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)
{
running=0;
}
else
{
TranslateMessage(&amp;msg);
DispatchMessage(&amp;msg);
}
}
else
{
//render scene

renderScene();


}

}

wglMakeCurrent(NULL,NULL);
wglDeleteContext(hrc);
ReleaseDC(hwnd,hdc);
return (int) msg.wParam;

}