Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Ковыряю этот ваш OpenGL. [вопрос в посте #55] (4 стр)

Ковыряю этот ваш OpenGL. [вопрос в посте #55] (4 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
SyntheticПостоялецwww12 авг. 201623:49#45
MrShoor
> А что не так то?
да не могу понять, почему каждый раз скорость очень сильно пляшет для одного и того же кадра (состояния сцены).
ну к примеру есть очень простая сцена, в ней всего то несколько кубиков с текстурой. И вот одна и та же сценка то за 2ms flush делает, то за 20 то за 48.
хрен его знает, что может влиять, учитывая что это всё на маке и не в главном окне приложения.

Правка: 12 авг. 2016 23:51

MrShoorУчастникwww12 авг. 201623:55#46
Synthetic
> да не могу понять, почему каждый раз скорость очень сильно пляшет для одного и
> того же кадра (состояния сцены).
А что там понимать то? Ты когда вызываешь команды отрисовки - они никуда не отправляются (чтобы по одной команде не отсылать), и видеокарта ничего не рисует. Вот когда ты вызываешь glFlush - то драйвер отправляет эти команды на рендер, и только тогда видеокарта начинает рисовать. glFlush сразу же возвращает управление, но видеокарта еще ничего не нарисовала.
Если glFlush вызывается часто, а видеокарта не успевает все это рисовать - то скапливается большая очередь этих самых команд, и драйвер не возвращает сразу управление, а ждет, когда эта очередь освободится. Вот и получается, что первые glFlush у тебя 2мс, а потом время резко увеличивается.
SyntheticПостоялецwww13 авг. 20160:01#47
MrShoor
> Если glFlush вызывается часто
glFlush вызываю один раз за кадр, реже уже некуда.
дошло до того что выкинул из отрисовки вообще всё, осталась только очистка экрана

glClearColor(1, 1, 1, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

и всё равно такое же поведение.

> Вот и получается, что первые glFlush у тебя 2мс, а потом время резко увеличивается.
дык оно то уменьшается, то увеличивается.

+ Показать

Правка: 13 авг. 2016 0:04

MrShoorУчастникwww13 авг. 20160:04#48
Synthetic
> glFlush вызываю один раз за кадр, реже уже некуда.
> дошло до того что выкинул из отрисовки вообще всё, осталась только очистка
> экрана
Потому что чистить экран дольше, чем вызвать 3 функции.
SyntheticПостоялецwww13 авг. 20160:12#49
MrShoor
> Потому что чистить экран дольше
ну не 40 миллискунд жеж ?
MrShoorУчастникwww13 авг. 20160:17#50
Synthetic
> ну не 40 миллискунд жеж ?
У тебя там SwapBuffers дальше который с VSync. Поэтому почему бы и нет?
SyntheticПостоялецwww13 авг. 20160:21#51
MrShoor
> У тебя там SwapBuffers дальше который с VSync. Поэтому почему бы и нет?
как-то не нормально получается :)
вроде всё по инструкции но медленно и не юзабельно.
MrShoorУчастникwww13 авг. 20160:22#52
Synthetic
> вроде всё по инструкции но медленно и не юзабельно.
А зачем тебе его юзать, если SwapBuffers будет делать ровно то же самое?
SyntheticПостоялецwww13 авг. 20160:30#53
MrShoor
> А зачем тебе его юзать, если SwapBuffers будет делать ровно то же самое?
кого его? glFlush() ?
Ну я пробовал его не юзать, эта хрень (cocoa) перестает вообще что либо рисовать.
вызов из вьюхи
[[self openGLContext] flushBuffer];
никак не влияет, удается только с помощью
CGLFlushDrawable([[self openGLContext] CGLContextObj]);
заставить его рисовать но оно работает только если включить
NSOpenGLPFADoubleBuffer (двойную буферизацию).
и если это сделать, то в результате такие-же тормоза.

точнее это
[[self openGLContext] flushBuffer];
и это
CGLFlushDrawable([[self openGLContext] CGLContextObj]);
делают одно и то же, но для даблбуфера, а простого SwapBuffers нету, либо я его не нашел.

Правка: 13 авг. 2016 0:37

MrShoorУчастникwww13 авг. 20160:38#54
Synthetic
> CGLFlushDrawable([[self openGLContext] CGLContextObj]);
> заставить его рисовать но оно работает только если включить
> NSOpenGLPFADoubleBuffer (двойную буферизацию).
> и если это сделать, то в результате такие-же тормоза.
А, так ты без двойной буферизации. Тогда да, glFlush нужен. Ну и с cocoa ничего не могу подсказать, ибо не работал... может особенность драйверов, может особенность cocoa.
SyntheticПостоялецwww16 авг. 201619:24#55
А вообще есть ограничение на количество VAO, VBO и IBO?
я имею ввиду не запредельные миллионы буферов, которые тупо в память не влезут, а вполне досягаемые.
Дело в том, что при достижении примерно таких размеров
VAO : 130
VBO : 259
IBO : 260
OpenGL начинает рисовать хрень и шлет мне GL_INVALID_OPERATION.
в примерах для чайников об этом ограничении ни слова.
MrShoorУчастникwww16 авг. 201619:26#56
Synthetic
> А вообще есть ограничение на количество VAO, VBO и IBO?
Нет.

Synthetic
> OpenGL начинает рисовать хрень и шлет мне GL_INVALID_OPERATION.
99.99999%, что косяк у тебя в коде.

AndreyПостоялецwww16 авг. 201620:32#57
Synthetic
> А вообще есть ограничение на количество VAO, VBO и IBO?
Нету.
Но есть ограничение на память, в таком случае будет GL_OUT_OF_MEMORY при вызове glBufferData/glBufferStorage.
>OpenGL начинает рисовать хрень и шлет мне GL_INVALID_OPERATION.
Причин много,  к примеру Zero Bound VBO/VAO/IBO.
Лучше написать аккуратно врапперы, которые когда нужно что-то перебиндивают и не биндят повторно, ибо нафиг нужно. Если совсем туго подключай
GL_ARB_debug_output/GL_KHR_debug_output Очень офигенная штука.
Но учти, nVidia будет постоянно спамить своими нотификациями, не являющимися ошибками, поэтому лучше это фильтровать.
AndreyПостоялецwww16 авг. 201620:39#58
Andrey
> OpenGL начинает рисовать хрень
Ох, не заметил.
1) Неверные смещения в атрибутах вершин,
2) неверный stride.
3) индексы залазят за пределы массива вершин
4) перепутан индексный/вершинный буфер.
SyntheticПостоялецwww16 авг. 201621:29#59
Понятно, спасибо. Значит OpenGL тут не причем, это я где-то наговнякал опять.
Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр