Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что заставляет функцию glGetIntegerv (GL_MAX_MODELVIEW_STACK_DEPTH, GLint *params) не работать?

ФермаКактусов Высший разум (189868), открыт 1 неделю назад
 #include  
#include
#include

int main() {

GLint maxModelViewStackDepth;
glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &maxModelViewStackDepth);
std::cout << "Maximum ModelView stack depth is " << maxModelViewStackDepth << std::endl;



return 0;
}
1 ответ
Def Просветленный (46973) 1 неделю назад
Отсутствие контекста OpenGL

Приложение должно быть оконным, не консольным:

 #define _CRT_SECURE_NO_WARNINGS 
#include
#include
#include
#include
#pragma comment (lib, "opengl32.lib")

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

int WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd)
{
MSG msg = { 0 };
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
wc.lpszClassName = L"oglversionchecksample";
wc.style = CS_OWNDC;
if (!RegisterClass(&wc))
return 1;
CreateWindowW(wc.lpszClassName, L"openglversioncheck", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 640, 480, 0, 0, hInstance, 0);

while (GetMessage(&msg, NULL, 0, 0) > 0)
DispatchMessage(&msg);

return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
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, 24, 8, 0, PFD_MAIN_PLANE, 0, 0, 0, 0
};

HDC ourWindowHandleToDeviceContext = GetDC(hWnd);

int letWindowsChooseThisPixelFormat;
letWindowsChooseThisPixelFormat = ChoosePixelFormat(ourWindowHandleToDeviceContext, &pfd);
SetPixelFormat(ourWindowHandleToDeviceContext, letWindowsChooseThisPixelFormat, &pfd);

HGLRC ourOpenGLRenderingContext = wglCreateContext(ourWindowHandleToDeviceContext);
wglMakeCurrent(ourWindowHandleToDeviceContext, ourOpenGLRenderingContext);

AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);

GLint maxModelViewStackDepth = -1;
glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &maxModelViewStackDepth);
std::cout << "Maximum ModelView stack depth is " << maxModelViewStackDepth << std::endl;
std::getchar();

wglDeleteContext(ourOpenGLRenderingContext);
PostQuitMessage(0);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
ФермаКактусовВысший разум (189868) 1 неделю назад
этот код для 32 бит систем?
ФермаКактусовВысший разум (189868) 1 неделю назад
пробовал скомпилировать но вылазят ошибки. параметры компилятора у меня верны?
ФермаКактусовВысший разум (189868) 1 неделю назад
10 13 main.cpp [Error] 'int WinMain' redeclared as different kind of entity
2 main.cpp from main.cpp
1098 14 \x86_64-w64-mingw32\include\winbase.h [Note] previous declaration 'int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)'
10 13 main.cpp [Error] '__in' was not declared in this scope
10 58 main.cpp [Error] expected primary-expression before 'hPrevInstance'
10 88 main.cpp [Error] expected primary-expression before 'lpCmdLine'
10 99 main.cpp [Error] '__in' was not declared in this scope
28 \ Makefile.win recipe for target 'main.o' failed
ФермаКактусовВысший разум (189868) 1 неделю назад
VS студио имеет какие то особые настройки?
ФермаКактусовВысший разум (189868) 1 неделю назад
стандартный шаблон для опен гл который выводит пример работы с опен гл работает а вот код что привели вы не компилирует из за ошибок
DefПросветленный (46973) 1 неделю назад
Код собирается как под х86, так и под х64.

Микрософтовские префиксы SAL типа __in и прочего можно убрать, они опциональны и предназначены для софтовых анализаторов.

>стандартный шаблон для опен гл который выводит пример работы с опен гл работает
В таком случае в этом шаблоне должно где-то быть создание контекста, вот после вызова wglMakeCurrent и до удаления wglDeleteContext можно вставлять вызовы glGetIntegerv
Похожие вопросы