ПрограммированиеФорумОбщее

fps постоянно скачет от 12 до 120. какой тулзой искать проблему? (2 стр)

Страницы: 1 2 3 Следующая »
#15
13:31, 6 июля 2011

. Какая система? Если семерка - попробуй отрубить аэро, если стоит.
2. Дрова обнови.
3. Чем меряешь время?
4. Попробуй поставить glFlush перед свопом бэкбуфера.

#16
14:44, 6 июля 2011

Blew_zc
> . Какая система? Если семерка - попробуй отрубить аэро, если стоит.
семерка.
аэро отключен
> 2. Дрова обнови.
последние стоят.

> 3. Чем меряешь время?
timeGetTime

> 4. Попробуй поставить glFlush перед свопом бэкбуфера.
пофиг.



gDEBugger показал что загрузка CPU скачет процентов на 30 ( тут она в противоречие с AMDCodeAnalizer входит ибо последний не нашел перегруза по CPU ) и примерно синхронно с ней FPS на 200-300% )))
все остальные параметры постоянны.

смущает под 1000 найденных OGL call хотя "DIPов" было 50

#17
14:47, 6 июля 2011

orfelin
>
>
> смущает под 1000 найденных OGL call хотя "DIPов" было 50
Ты кроме дипов не пользуешься никакими функциями ОГЛ?

#18
15:02, 6 июля 2011

-Eugene-
> Ты кроме дипов не пользуешься никакими функциями ОГЛ?
>
да нет... "дип" вот у меня какой... может тут накосачил
кидаю в VB вершины спрайтов ( просто memcpy ) как пришла пора делать DIP - вызываю batch

void Render::batch()
{    
  if( m_CurrentVertexIndex <= 0 )
    return;

  m_batch++;

  glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer );// Bind the VBO.
  glBufferSubData( GL_ARRAY_BUFFER, 0,  m_CurrentVertexIndex * g_ui32VertexStride, vertices );

  glEnableVertexAttribArray( VERTEX_ARRAY );
  glVertexAttribPointer( VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, g_ui32VertexStride, 0 );

  glEnableVertexAttribArray( VERTEXCOLOR_ARRAY );
  glVertexAttribPointer( VERTEXCOLOR_ARRAY, 4, GL_FLOAT, GL_FALSE, g_ui32VertexStride, (void*) (3 * sizeof(GLfloat) ) );

  glEnableVertexAttribArray( TEXCOORD_ARRAY );
  glVertexAttribPointer( TEXCOORD_ARRAY, 2, GL_FLOAT, GL_FALSE, g_ui32VertexStride, (void*) (7 * sizeof(GLfloat) ) );

  //3 indexes for each trinagle.
  glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, indexBuffer );
  glDrawElements( GL_TRIANGLES, 3 * m_RenderTriangleCount, GL_UNSIGNED_SHORT, (void*)0);


  m_CurrentVertexIndex  = 0;
  m_RenderTriangleCount  = 0;

}
#19
15:16, 6 июля 2011

orfelin
> да нет...
А это что?
> glBindBuffer
> glEnableVertexAttribArray
> glVertexAttribPointer

#20
15:22, 6 июля 2011

-Eugene-
ну у меня сделано так:
создаю VB и IB
VB динамик IB статик
когда рисуется спрайт то я 4 его вершины копирую в временный массив, когда там кончается место или текстура спрайта не совадает с выставленной текстурой в рендере то делаю batch - скидываю содержимое временного массива в главный VB и отрисовываю все.
затем снова копирую вершины во временный буфер пока опять не придет время делать "DIP"

#21
15:32, 6 июля 2011

orfelin
Во-первых, ты скорее всего неправильно меряешь время. Высчитывай среднее. Используй QueryPerfomanceCounter
Во-вторых, проверь на статических буфферах. Драйвер вполне модет косячить при мапинге буффера. ОГЛ... что ты еще хотел? )

#22
15:35, 6 июля 2011

VirT
> Во-вторых, проверь на статических буфферах. Драйвер вполне модет косячить при
> мапинге буффера. ОГЛ... что ты еще хотел? )
>
о_О на статическом это как? куда мне вершины спрайтов сбрасывать?
или под каждый спрайт свой VB/IB так ведь переключение буферов ой какое дорогое

VirT
> Во-первых, ты скорее всего неправильно меряешь время. Высчитывай среднее.
> Используй QueryPerfomanceCounter
всегда мерил правильно и вот вдруг неправильно стало.
фреймворк из под DX проекта. на нем сделал 3 игры. всегда время мерилось верно а вот стоило рендер поменять...
нет. с измерялкой времени проблем нет. более того, упреждая вопрос отвечу - timeBeginPeriod( 1 ); выставлен

#23
15:40, 6 июля 2011

orfelin
> куда мне вершины спрайтов сбрасывать?
В вершинный буфер.

#24
16:15, 6 июля 2011

-Eugene-
> В вершинный буфер.
>
опа а я думал что если он как статик создан то в него нельзя писать )))
поменял динамик на статик - собственно ничего не изменилось - фпс пляшет.

#25
16:17, 6 июля 2011

orfelin
> опа а я думал что если он как статик создан то в него нельзя писать )))
Можно. Но не нужно - медленно. Попробуй Stream-буферы.

#26
16:20, 6 июля 2011

orfelin
Убери все со сцены, добавляй по одному. Ищи что конкрентно приводит к скачкам. Если на пустой сцене то же самое, то дело может быть даже в железе. Проверь на других машинах.

#27
23:25, 6 июля 2011

Попробуй в качестве замера и оценки производительности использовать AQTime

#28
23:39, 6 июля 2011

провал не раз в три кадра?

#29
7:41, 7 июля 2011

"у меня много кода" - это не оправдание. берёшь главный цикл программы, натыкиваешь в нём кучу QueryPerformanceCounter'ов и ищешь, что же у тебя тормозит аж на 100мс. Это много, найти должно быть легко. Хуже всего, если это будет происходить в SwapBuffers().

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

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