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

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

ФермаКактусов Высший разум (217368), закрыт 8 месяцев назад
 #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;
}
Лучший ответ
Def Гений (66512) 10 месяцев назад
Отсутствие контекста 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;
}
ФермаКактусовВысший разум (217368) 10 месяцев назад
этот код для 32 бит систем?
ФермаКактусовВысший разум (217368) 10 месяцев назад
пробовал скомпилировать но вылазят ошибки. параметры компилятора у меня верны?
ФермаКактусовВысший разум (217368) 10 месяцев назад
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
ФермаКактусовВысший разум (217368) 10 месяцев назад
VS студио имеет какие то особые настройки?
ФермаКактусовВысший разум (217368) 10 месяцев назад
стандартный шаблон для опен гл который выводит пример работы с опен гл работает а вот код что привели вы не компилирует из за ошибок
DefГений (66512) 10 месяцев назад
Код собирается как под х86, так и под х64.

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

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