. Какая система? Если семерка - попробуй отрубить аэро, если стоит.
2. Дрова обнови.
3. Чем меряешь время?
4. Попробуй поставить glFlush перед свопом бэкбуфера.
Blew_zc
> . Какая система? Если семерка - попробуй отрубить аэро, если стоит.
семерка.
аэро отключен
> 2. Дрова обнови.
последние стоят.
> 3. Чем меряешь время?
timeGetTime
> 4. Попробуй поставить glFlush перед свопом бэкбуфера.
пофиг.
gDEBugger показал что загрузка CPU скачет процентов на 30 ( тут она в противоречие с AMDCodeAnalizer входит ибо последний не нашел перегруза по CPU ) и примерно синхронно с ней FPS на 200-300% )))
все остальные параметры постоянны.
смущает под 1000 найденных OGL call хотя "DIPов" было 50
orfelin
>
>
> смущает под 1000 найденных OGL call хотя "DIPов" было 50
Ты кроме дипов не пользуешься никакими функциями ОГЛ?
-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; }
orfelin
> да нет...
А это что?
> glBindBuffer
> glEnableVertexAttribArray
> glVertexAttribPointer
-Eugene-
ну у меня сделано так:
создаю VB и IB
VB динамик IB статик
когда рисуется спрайт то я 4 его вершины копирую в временный массив, когда там кончается место или текстура спрайта не совадает с выставленной текстурой в рендере то делаю batch - скидываю содержимое временного массива в главный VB и отрисовываю все.
затем снова копирую вершины во временный буфер пока опять не придет время делать "DIP"
orfelin
Во-первых, ты скорее всего неправильно меряешь время. Высчитывай среднее. Используй QueryPerfomanceCounter
Во-вторых, проверь на статических буфферах. Драйвер вполне модет косячить при мапинге буффера. ОГЛ... что ты еще хотел? )
VirT
> Во-вторых, проверь на статических буфферах. Драйвер вполне модет косячить при
> мапинге буффера. ОГЛ... что ты еще хотел? )
>
о_О на статическом это как? куда мне вершины спрайтов сбрасывать?
или под каждый спрайт свой VB/IB так ведь переключение буферов ой какое дорогое
VirT
> Во-первых, ты скорее всего неправильно меряешь время. Высчитывай среднее.
> Используй QueryPerfomanceCounter
всегда мерил правильно и вот вдруг неправильно стало.
фреймворк из под DX проекта. на нем сделал 3 игры. всегда время мерилось верно а вот стоило рендер поменять...
нет. с измерялкой времени проблем нет. более того, упреждая вопрос отвечу - timeBeginPeriod( 1 ); выставлен
orfelin
> куда мне вершины спрайтов сбрасывать?
В вершинный буфер.
-Eugene-
> В вершинный буфер.
>
опа а я думал что если он как статик создан то в него нельзя писать )))
поменял динамик на статик - собственно ничего не изменилось - фпс пляшет.
orfelin
> опа а я думал что если он как статик создан то в него нельзя писать )))
Можно. Но не нужно - медленно. Попробуй Stream-буферы.
orfelin
Убери все со сцены, добавляй по одному. Ищи что конкрентно приводит к скачкам. Если на пустой сцене то же самое, то дело может быть даже в железе. Проверь на других машинах.
Попробуй в качестве замера и оценки производительности использовать AQTime
провал не раз в три кадра?
"у меня много кода" - это не оправдание. берёшь главный цикл программы, натыкиваешь в нём кучу QueryPerformanceCounter'ов и ищешь, что же у тебя тормозит аж на 100мс. Это много, найти должно быть легко. Хуже всего, если это будет происходить в SwapBuffers().
Тема в архиве.