* .objローダーを作成しようとしています。すべてが解決されたと思ったら、GLEWをローダーで動かすことができません。glGetString(GL_VERSION)は、OpenGLの初期化中にNULLを返します。
事は私のアプリケーションの初期化がこのようになっていることである。
case WM_CREATE:
{
SetTimer(hWnd, 1, 1000, (TIMERPROC)NULL);
if (oGL == NULL)
oGL = new OpenGL(hWnd);
hDC = GetDC(hWnd);
} break;
そしてOGL:CreateWindowEx関数は、それがすべてのようになりますのWndProc関数でメッセージをWM_CREATEに行くに呼び出された後
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX wc;
MSG msg;
HWND hWnd;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = L"Projekt";
RegisterClassEx(&wc);
hWnd = CreateWindowEx( NULL,
L"Projekt",
L"Symulator lodzi",
WS_OVERLAPPEDWINDOW,
100, 50,
SCREEN_WIDTH, SCREEN_HEIGHT,
NULL, NULL, hInstance, NULL);
if (!hWnd)
return 0;
ShowWindow(hWnd, nCmdShow); //wyswietlanie okna
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (err != GLEW_OK)
{
const GLubyte* error = glGetString(GL_VERSION);
const GLubyte* error2 = glewGetErrorString(err);
exit(1);
}
while (TRUE)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (msg.message == WM_QUIT)
break;
}
return msg.wParam;
}
コンストラクタコードは次のとおりです:
OpenGL::OpenGL(HWND hWnd)
{
static PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0, 0, 0,
0, 0, 0,
0, 0,
0, 0, 0, 0, 0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,
0,
0
};
int pixelFormatID;
HDC hDC;
hDC = GetDC(hWnd);
pixelFormatID = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, pixelFormatID, &pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
ReleaseDC(hWnd, hDC);
}
だから、OpenGL正しく初期化されますが、その後、私はそれらのerrosを受けています:それがあったとき
アプリケーションはOpenGLがまだ初期化されていなかったと思う理由を私は理解していない、(私はそれをデバッグのしてきました最初にウィンドウが作成され、次にoGLオブジェクトが作成されたことを確認してください)。
コードがメッセージポンプに到達する前に、メッセージハンドラが呼び出されたと思われる理由は何ですか? – derhass
私はデバッグモードでコードを追跡していました。そして、CreateWindowsExに到達した後、WM_CREATEメッセージに次の行がありました。私がブレークポイントをWM_CREATEに入れて、エラーラインを取得しても、そのコードが停止した最初のコードはWM_CREATEでした。 –