//отрисовка сцены
for(int i=0;i<_nodes.size();i++)
{
if(!_nodes[i]->vbo()) continue;
float px = 0; float py= 0; float pz = 0;
_nodes[i]->position(px,py,pz,true);//узнаю глобальные координаты (тут тормозит перемножение матриц парента и своей, прям сильно, хз че делать)
if(_frustum->CubeInFrustum(px,py,pz,_nodes[i]->vbo()->box()))//если попадает во фрустум
_nodes[i]->drawVBO(m_view, m_projection);//отрисовка
//отрисовка сетки
//там есть места где сематники в шейдер задаются, но они не влияют на скорость я пробовал коментировать. компилял интеловским компилятором, тоже скорости не дало.. я в тупике, а код твоего движка не понял, да и лень разбираться...
void CVBO::drawBuffers()
{
if(g_last_drawed_vbo == this)//это если сетка назначена на несколько объектов (быстрее не становится все равно)
{
APP->render()->dips_up();
glDrawElements(GL_TRIANGLES,_cnt_indices,GL_UNSIGNED_INT,0);//short быстрее не делает
return;
}
if(_vbuffer)
{
glBindBufferARB( GL_ARRAY_BUFFER_ARB, _vbuffer );
glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );
}
if(_nbuffer)
{
glBindBufferARB( GL_ARRAY_BUFFER_ARB, _nbuffer );
glNormalPointer(GL_FLOAT,0,(char*)NULL);
}
if(_tbuffer)
{
glBindBufferARB( GL_ARRAY_BUFFER_ARB, _tbuffer );
glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );
}
if(_ibuffer)
{
APP->render()->dips_up();
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, _ibuffer);
glDrawElements(GL_TRIANGLES,_cnt_indices,GL_UNSIGNED_INT,0);//short быстрее не делает
//glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
}
g_last_drawed_vbo = this;
//glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_NORMAL_ARRAY);
//glDisableClientState(GL_TEXTURE_COORD_ARRAY);
//glDisableClientState(GL_ELEMENT_ARRAY_BUFFER_ARB);
}
}
пользуюсь математической библиотекой glm, включил поддержку sse2, fps выросло всего на 4
+ матрицы по ссылке стал передавать... в итоге на 10 fps прирост, мало
поднял fps с 25 до 60 при 4096 кубиках - ксорс на моем железе дает 90, axelinx 250... Unity 60
заметил снижает скорость передача матрицы в шейдер.. а как быть? один шейдер 4096 кубов, следовательно 4096 передач параметров для каждого куба.. как это оптимизировать?