Войти
ПрограммированиеФорумГрафика

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

Страницы: 13 4 5 68 Следующая »
#45
(Правка: 23:51) 23:49, 12 авг. 2016

MrShoor
> А что не так то?
да не могу понять, почему каждый раз скорость очень сильно пляшет для одного и того же кадра (состояния сцены).
ну к примеру есть очень простая сцена, в ней всего то несколько кубиков с текстурой. И вот одна и та же сценка то за 2ms flush делает, то за 20 то за 48.
хрен его знает, что может влиять, учитывая что это всё на маке и не в главном окне приложения.


#46
23:55, 12 авг. 2016

Synthetic
> да не могу понять, почему каждый раз скорость очень сильно пляшет для одного и
> того же кадра (состояния сцены).
А что там понимать то? Ты когда вызываешь команды отрисовки - они никуда не отправляются (чтобы по одной команде не отсылать), и видеокарта ничего не рисует. Вот когда ты вызываешь glFlush - то драйвер отправляет эти команды на рендер, и только тогда видеокарта начинает рисовать. glFlush сразу же возвращает управление, но видеокарта еще ничего не нарисовала.
Если glFlush вызывается часто, а видеокарта не успевает все это рисовать - то скапливается большая очередь этих самых команд, и драйвер не возвращает сразу управление, а ждет, когда эта очередь освободится. Вот и получается, что первые glFlush у тебя 2мс, а потом время резко увеличивается.

#47
(Правка: 0:04) 0:01, 13 авг. 2016

MrShoor
> Если glFlush вызывается часто
glFlush вызываю один раз за кадр, реже уже некуда.
дошло до того что выкинул из отрисовки вообще всё, осталась только очистка экрана

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

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

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

+ Показать
#48
0:04, 13 авг. 2016

Synthetic
> glFlush вызываю один раз за кадр, реже уже некуда.
> дошло до того что выкинул из отрисовки вообще всё, осталась только очистка
> экрана
Потому что чистить экран дольше, чем вызвать 3 функции.

#49
0:12, 13 авг. 2016

MrShoor
> Потому что чистить экран дольше
ну не 40 миллискунд жеж ?

#50
0:17, 13 авг. 2016

Synthetic
> ну не 40 миллискунд жеж ?
У тебя там SwapBuffers дальше который с VSync. Поэтому почему бы и нет?

#51
0:21, 13 авг. 2016

MrShoor
> У тебя там SwapBuffers дальше который с VSync. Поэтому почему бы и нет?
как-то не нормально получается :)
вроде всё по инструкции но медленно и не юзабельно.

#52
0:22, 13 авг. 2016

Synthetic
> вроде всё по инструкции но медленно и не юзабельно.
А зачем тебе его юзать, если SwapBuffers будет делать ровно то же самое?

#53
(Правка: 0:37) 0:30, 13 авг. 2016

MrShoor
> А зачем тебе его юзать, если SwapBuffers будет делать ровно то же самое?
кого его? glFlush() ?
Ну я пробовал его не юзать, эта хрень (cocoa) перестает вообще что либо рисовать.
вызов из вьюхи
[[self openGLContext] flushBuffer];
никак не влияет, удается только с помощью
CGLFlushDrawable([[self openGLContext] CGLContextObj]);
заставить его рисовать но оно работает только если включить
NSOpenGLPFADoubleBuffer (двойную буферизацию).
и если это сделать, то в результате такие-же тормоза.

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

#54
0:38, 13 авг. 2016

Synthetic
> CGLFlushDrawable([[self openGLContext] CGLContextObj]);
> заставить его рисовать но оно работает только если включить
> NSOpenGLPFADoubleBuffer (двойную буферизацию).
> и если это сделать, то в результате такие-же тормоза.
А, так ты без двойной буферизации. Тогда да, glFlush нужен. Ну и с cocoa ничего не могу подсказать, ибо не работал... может особенность драйверов, может особенность cocoa.

#55
19:24, 16 авг. 2016

А вообще есть ограничение на количество VAO, VBO и IBO?
я имею ввиду не запредельные миллионы буферов, которые тупо в память не влезут, а вполне досягаемые.
Дело в том, что при достижении примерно таких размеров
VAO : 130
VBO : 259
IBO : 260
OpenGL начинает рисовать хрень и шлет мне GL_INVALID_OPERATION.
в примерах для чайников об этом ограничении ни слова.

#56
19:26, 16 авг. 2016

Synthetic
> А вообще есть ограничение на количество VAO, VBO и IBO?
Нет.

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

#57
20:32, 16 авг. 2016

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 будет постоянно спамить своими нотификациями, не являющимися ошибками, поэтому лучше это фильтровать.

#58
20:39, 16 авг. 2016

Andrey
> OpenGL начинает рисовать хрень
Ох, не заметил.
1) Неверные смещения в атрибутах вершин,
2) неверный stride.
3) индексы залазят за пределы массива вершин
4) перепутан индексный/вершинный буфер.

#59
21:29, 16 авг. 2016

Понятно, спасибо. Значит OpenGL тут не причем, это я где-то наговнякал опять.

Страницы: 13 4 5 68 Следующая »
ПрограммированиеФорумГрафика