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

Разный порядок отрисовки квадратов (2 стр)

Страницы: 1 2
#15
8:50, 4 авг. 2015

Sergio
Интегрированные походу. А может серваки :)


#16
9:29, 4 авг. 2015

Sergio

Машины без видеокарты - это как?

Да, это интегрированные

С остальным сейчас буду разбираться.

#17
19:48, 4 авг. 2015

Итак, результаты тестов!

В качестве вывода использовалась карта размером 700*700 с текстурой 256*256.
glBegin(GL_QUADS) и glBegin(GL_TRIANGLES) - имеется ввиду 1 вызов на всю отрисовку.

В общем вот fps на разных компах:

домашний комп

glDrawArrays(GL_QUADS     26 26 26 26 26 26
glBegin(GL_QUADS);       11 11 11 11 12 11
glBegin(GL_QUADS); List   53 65 65 65 65 65
glDrawArrays(GL_TRIANGLES   14 18 15 17 17 18
glBegin(GL_TRIANGLES);     8 8 7 8 7 8
glBegin(GL_TRIANGLES); List 50 65 65 65 65 65
glInterleavedArrays     32 30 30 31 30 30
glDrawElements         14 13 13 13 13 13
  
ноут 

glDrawArrays(GL_QUADS     58 58 57 35 27 26
glBegin(GL_QUADS);       6 5 5 5 6 5
glBegin(GL_QUADS); List   26 36 36 36 36 36
glDrawArrays(GL_TRIANGLES   2 2 17 7 16 7
glBegin(GL_TRIANGLES);     3 4 3 4 3 3
glBegin(GL_TRIANGLES); List 3 15 10 14 19 24
glInterleavedArrays     3 21 23 27 30 30
glDrawElements         3 3 16 7 16 5
  
рабочий комп (без видеокарты)
 
glDrawArrays(GL_QUADS     17 19 18 17 19 17
glBegin(GL_QUADS);       5 5 5 5 4 5
glBegin(GL_QUADS); List   6 7 7 7 8 6
glDrawArrays(GL_TRIANGLES   12 15 15 16 15 15
glBegin(GL_TRIANGLES);     4 3 3 3 3 3
glBegin(GL_TRIANGLES); List 4 4 4 6 5 4
glInterleavedArrays     8 14 15 15 15 15
glDrawElements         18 17 17 17 18 18

Ну и как рисовал последние 2 варианта:

glDrawElements( GL_TRIANGLES, 3 * (2 * wi * he), GL_UNSIGNED_INT, @face );

glInterleavedArrays( GL_T2F_V3F, 0, @inter);
glDrawArrays(GL_TRIANGLES, 0, 6 * wi * he);

У меня стойкое ощущение, что я снова что-то упускаю, т.к. то, что должно работать быстро, работает медленно.

#18
20:35, 4 авг. 2015

Листы в твоем случае работают быстрей, потому что они скомпилены под видяху и загнаны в видеопамять.
DrawArrays медленнее потому, что рисуешь из системной. Используй VBO.
На интегрированной нет видеопамяти (она шарится с системной), поэтому квады тупо быстрей по причине меньшего количества вершин.

Все логично, в общем.

#19
20:10, 5 авг. 2015

Blew_zc

Используй VBO

(он же ARB_Vertex_Buffer_Object)
Использовал, вот результаты:

fps для Radeon

glDrawArrays(GL_QUADS        3 2 3 2 3 2
glDrawArrays ARB (GL_QUADS)  35 35 34 35 35 35
glBegin(GL_QUADS); List        36 51 51 51 51 50

fps для Geforce

glDrawArrays(GL_QUADS        6 6 6 6 7 6
glDrawArrays ARB (GL_QUADS)  11 9 8 9 9 9
glBegin(GL_QUADS); List        3 3 6 5 6 5

Как видно катастрофического прироста скорости VBO не дает. И если я правильно понял, Бинд массива по сути тоже что и лист, т.е. менять его каждый такт (как простой glDrawArrays) на получится, а значит его ставим на одну полку с листами. Те получается для оптимальной скорости надо при старте замерять скорость на разных способах вывода и использовать оптимальный?

Создавал VBO так:

glGenBuffersARB( 1, @VBOVertex ); // Получить правильное имя
  glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOVertex ); // Связывание
  glBufferDataARB( GL_ARRAY_BUFFER_ARB, (4 * wi * he)*sizeof(TPoint3f), @Vertex2, GL_STATIC_DRAW_ARB ); // Загрузка данных

  glGenBuffersARB( 1, @VBOTexCoord );
  glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOTexCoord );
  glBufferDataARB( GL_ARRAY_BUFFER_ARB, (4 * wi * he)*sizeof(TPoint2f), @TexCoord2, GL_STATIC_DRAW_ARB );

  glGenBuffersARB( 1, @VBOColors );
  glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOColors );
  glBufferDataARB( GL_ARRAY_BUFFER_ARB, (4 * wi * he)*sizeof(TColor4f), @Colors2, GL_STATIC_DRAW_ARB );

В общем всем спасибо за помощь) Если есть еще идеи или конструктивная критика - милости прошу)

#20
20:19, 5 авг. 2015

Скинь тестовое приложение с исходниками

#21
20:24, 5 авг. 2015

ahx666
> Создавал VBO так:
Используй interleaved массив. Один ВБО на все атрибуты.

ahx666
> на одну полку с листами
Листы deprecated.

#22
21:23, 5 авг. 2015

для GL_QUADS есть обязательное условие, которое ТС упустил, все точки квада должны быть расположены в одной плоскости.
Используй смешанный массив (interleaved) и VBO.

#23
22:34, 5 авг. 2015

veth
> для GL_QUADS есть обязательное условие, которое ТС упустил, все точки квада
> должны быть расположены в одной плоскости.
Такого условия нет.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.