Название: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 09, 2016, 20:23 Здравствуйте, на офсайте Qt есть пример работы с опенгл - http://doc.qt.io/qt-5/qtgui-openglwindow-example.html
Сам по себе он работает, однако если попытаться увеличить количество отображаемых объектов, то очень скоро получаем segfault. Код: int n = 10000; Код: d_ptr->f.DrawArrays(mode, first, count); Это чуть больше двух тысяч вершин - явно очень мало, на какие-то сложные объекты не хватит, даже сферу не построить. Первые мысли конечно по поводу недостатка памяти, но 6.5к флоатов вполне способны уместиться в видеопамяти, а сам процесс вообще не выходит за пределы 40мб, больше никаких идей нет. Подскажите, пожалуйста, в чем причина и как это можно исправить. Название: Re: glDrawArrays и большое количество объектов Отправлено: Racheengel от Июль 09, 2016, 23:10 Скорей всего проблема где-то в Вашем методе f.DrawArrays.
Т.к. у нас подобный код (тоже флоаты, тоже треугольники) выводит под 5 млн вершин. Название: Re: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 10, 2016, 00:27 Он не совсем мой, это
Код: inline void QOpenGLFunctions::glDrawArrays(GLenum mode, GLint first, GLsizei count) Еще один вопрос - каким образом нужно выводить несколько одинаковых объктов? То есть, например, вывести то, что в v.data(), но левее и повернутое на 90 градусов. Название: Re: glDrawArrays и большое количество объектов Отправлено: Racheengel от Июль 10, 2016, 01:34 поворачиваете систему координат, рисуете один объект, поворачиваете систему координат, рисуете второй объект и т.д.
Название: Re: glDrawArrays и большое количество объектов Отправлено: Igors от Июль 10, 2016, 10:15 Отлаживапться надо: повтыкать печати gLGetError, убедиться что хендлы m_posAttr и m_colAttr ненулевые, да и вообще для начала может color отключить
Название: Re: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 10, 2016, 10:47 Цитировать поворачиваете систему координат, рисуете один объект, поворачиваете систему координат, рисуете второй объект и т.д. С этим разобрался, можете еще посказать какую-нибудь литературу по шейдерам, желательно современную и в кратком виде?Цитировать Отлаживапться надо: повтыкать печати gLGetError, убедиться что хендлы m_posAttr и m_colAttr ненулевые, да и вообще для начала может color отключить Да, проблема действительно в color. Отключил - работает, сделал нормальный массив - тоже. Ладно бы была ошибка сразу как только выходим за пределы массива, а тут стабильно до 6.5к элементов. Объяснимо, конечно, но внимание на это не обратил, до сих пор не приучился внимательно относиться к указателям ;DНазвание: Re: glDrawArrays и большое количество объектов Отправлено: Racheengel от Июль 10, 2016, 11:02 По шейдерам я не спец, так что увы, тут не подскажу...
Кстати, а почему у Вас цвета через GL_FLOAT задаются? это же избыточно. GL_BYTE пробовали? Название: Re: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 10, 2016, 11:34 Эту часть я взял из примера в документации, не стал ничего менять, все равно нужно было только продемонстрировать проблему. Хотя если бы попробовал сменить на байт, то скорее всего сразу бы понял, в чем она заключалась.
Сколько вообще вершин должна держать видеокарта уровня gtx 960? У меня доходит до миллиона без мультисэмплинга, маловато по-моему, хотя явно лучше, чем 2к ;D Название: Re: glDrawArrays и большое количество объектов Отправлено: Igors от Июль 10, 2016, 12:19 Сколько вообще вершин должна держать видеокарта уровня gtx 960? У меня доходит до миллиона без мультисэмплинга, маловато по-моему, хотя явно лучше, чем 2к ;D Про конкретную карту ничего не скажу, но барьер "лимон" преодолен лет эдак 10 назад (если не ранее). И что значит "держит" - если нет то в чем это выражается?Название: Re: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 10, 2016, 13:10 В падении фпс ниже приемлемого значения, 30 например. Тут, конечно, лишняя нагрузка в виде цикла с добавлением элементов в массив, если сразу все добавить, то быстрее, а с вбо должно быть еще лучше. Сейчас при 1млн вершинах без цикла от 5 до 15 фпс. Как можно удостовериться, что используется именно гпу? Сейчас процесс сильно грузит цп даже если никаких вычислений не происходит.
Название: Re: glDrawArrays и большое количество объектов Отправлено: Igors от Июль 10, 2016, 13:38 В падении фпс ниже приемлемого значения, 30 например. Аппетит неплохой :) Но все-таки надо быть реалистом и иметь ввиду что- юзер всегда может создать столько геометрии что fps упадет (см анекдот про бензопилу) - всегда найдется юзер с очень старой и дохлой картой - всегда найдется динамическая геометрия которую VBO, увы, не ускорит Да, и если append, то не забыть reserve для котейнера Название: Re: glDrawArrays и большое количество объектов Отправлено: Feyau от Июль 11, 2016, 01:33 Этого в любом случае не избежать, но на какие-то значения же надо ориентироваться. Хотя бы для того, чтобы знать, когда достигнуты пределы видеокарты, а когда еще есть смысл попытаться что-то оптимизировать.
Название: Re: glDrawArrays и большое количество объектов Отправлено: Igors от Июль 11, 2016, 10:28 Этого в любом случае не избежать, но на какие-то значения же надо ориентироваться. Хотя бы для того, чтобы знать, когда достигнуты пределы видеокарты, а когда еще есть смысл попытаться что-то оптимизировать. Замеры "на холостом ходу" мало о чем говорят. Есть текстуры, источники света, материалы и многое другое. Практически скорость определяется кодом шейдера (точнее его объемом) |