2013-11-20 7 views
1

Хорошо, поэтому я не знаю, глупо я или что-то в этом духе.C++ скорость переполнения?

Но когда я запускаю приложение без рисования, я получаю около 6k FPS.

При рисовании около 150-200 баллов (от obj) это всего лишь 800 ... И если я затем добавлю отрисовку шрифта, она станет еще ниже.

Не знаю, нормально ли это или что-то в этом роде, но я не понимаю, как вы можете представить весь игровой мир. Если только 150 - 200 очков снижают этот уровень. А также я попытался рендеринга около 4К точек => FPS = 80

Вот мой метод визуализации для OBJS:

void Render::RenderOBJVBO(OBJData data) 
{ 
if(data.RenderID == 0) return; 
    glBindBufferARB(GL_ARRAY_BUFFER, data.RenderID); 
    glVertexPointer(3, GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 5)); 
    glNormalPointer(GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 2)); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 8, (GLvoid*)0); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnableClientState(GL_NORMAL_ARRAY); 

    glDrawArrays(GL_TRIANGLES, 0, data.F.size() * 3); 

    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisableClientState(GL_NORMAL_ARRAY); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glBindTexture(GL_TEXTURE_2D, 0); 
} 

А вот OBJData:

class OBJData 
{ 
public: 
OBJData(void){} 
~OBJData(void){} 
std::vector<OBJFace> F; 
std::vector<Vector3f> V; 
std::vector<Vector3f> VN; 
std::vector<Vector3f> VT; 
int RenderID; 
}; 

И наконец OBJFace:

class OBJFace 
{ 
public: 
OBJFace(void){} 
~OBJFace(void){} 
Vector3f verts; 
Vector3f norms; 
Vector3f textures; 
OBJFace(Vector3f v, Vector3f n, Vector3f t) 
{ 
    verts = v; 
    norms = n; 
    textures = t; 
} 
}; 

Так что мой вопрос: Это нормально? если нет, что может вызвать эту проблему?

Характеристики:

Операционная система: Windows 8 64-бит

Процессор: Intel Core i5 760 @ 2.80GHz

Оперативная память: 4 ГБ

Графика: ATI Radeon HD 48000 Серия

Экран: 1920x1080 @ 60Hz

+1

Вы, возможно, запускаете вашу программу в режиме отладки? Если это так, у вас будет много бесполезных вызовов конструктора/деструктора. Попробуйте удалить конструкторы/деструкторы OBJData и OBJFace и сделать их просто старыми 'struct's –

+0

Теперь я создал их structs. Но, к сожалению, FPS все еще около 80 - 100 –

+0

Какое графическое оборудование вы используете? Intels и много ES-только мусора (как на телефонах), как правило, мучительно медленны ... – defube

ответ

4
void Render::RenderOBJVBO(OBJData data) 

должен быть

void Render::RenderOBJVBO(OBJData & data) 

или еще

void Render::RenderOBJVBO(const OBJData & data) 

лучше В противном случае будет создана новая копия OBJData каждый вызов RenderOBJVBO

+0

Спасибо, что решил проблему. Это почти так же, как если бы я не рисовал! –

+0

Рад, что он исправил вашу проблему. См. [Этот вопрос] (http://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c) для получения дополнительной информации о передаче объектов в качестве параметров функции. –

Смежные вопросы