Я пытаюсь настроить простой VisualStudio2010 OpenGL Project
Я начинаю с нового проекта Win32 и заменяю _tWinMain следующим:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
//MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_GLPREDICTOR, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
HDC hdc = GetDC(hWnd);
if (hdc == NULL)
return FALSE;
if(!SetPF(hdc))
return FALSE;
mainApp = new GLPredictor(hdc);
HGLRC tmpContext = wglCreateContext (hdc);
wglMakeCurrent(hdc, tmpContext);
//create opengl 4.2 context
/*GLenum error = glewInit();
if(error != GLEW_OK)
return false;
int attributes[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
0
};
if(wglewIsSupported("WGL_ARB_create_context")==1){
HGLRC context = wglCreateContextAttribsARB(hdc, NULL,attributes);
wglMakeCurrent(NULL, NULL);
wglDeleteContext(tmpContext);
wglMakeCurrent(hdc,context);
}
else{
return FALSE;
}
int glVersion[2] = {-1,-1};
glGetIntegerv(GL_MAJOR_VERSION, &glVersion[0]);
glGetIntegerv(GL_MINOR_VERSION, &glVersion[1]);
std::cout<<"Using OpenGL: "<<glVersion[0]<<"."<<glVersion[1]<<std::endl;
*/
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GLPREDICTOR));
MSG msg = {0};
while(TRUE)
{
// Check to see if any messages are waiting in the queue
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if(msg.message == WM_QUIT)
break;
}
else
{
mainApp->render();
}
}
return (int) msg.wParam;
}
Это работает.
Но как только я раскомментирую закомментированный регион (// создаем контекст opengl 4.2) и пытаюсь запустить приложение, я сразу получаю сообщение об ошибке:
The application was unable to start correctly (0x000007b). Click OK to close the application.
но незакомментированный код даже не достигнут. Я могу установить точку останова даже в первой строке _tWinMain, и она не сработает.
Я уже пытался создать новый проект и скопировать код с тем же результатом.
Кто-нибудь понял, почему этот регион приводит к сбою проекта, даже если код, который он содержит, выполняется?
// edit: ошибочная строка выглядит как
GLenum error = glewInit();
как только он входит в код, это приводит к аварийному завершению приложения (хотя выполнение кода никогда не достигает его). Эта строка заставляет компилятор добавлять некоторые вещи, которые могут вызвать проблему?