DarkWraith
> Что сделать чтоб фпс так не занижался?
Выравнивать размер текстур до ближайшей степени двойки. Похоже, твои дрова сваливаются в софтверный рендер.
Размеры ни одной из твоих картинок не кратны степени двойки.
Эм, от этого что то может зависить? как с этим бороться? так как изменить размер не получится.
Не, дело не в этом, ради теста сменил размер картинки на 284х68, что кратно двойке :) и фпс всё такойже.
DarkWraith
> ради теста сменил размер картинки на 284х68, что кратно двойке
Плохо читаешь.
Нужна степень двойки. 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, ...
эм, чувак, ты же прогер. Кратно двойке, это значит степень двойки.
2,4,8,16,32,64,256,512,1024,2048,4096, 8192...
и что вы мне предлогаете? я во что текстуры должен превратить? кратно двойке должно быть и длина и высота? т.е. надо 64х64 ? или можно и 128х64 ?
DarkWraith
> кратно двойке должно быть и длина и высота?
Размер по любой оси должен быть степенью двойки. Не кратен двойке, а равен степени двойки.
Т.е. можно 64x64, 128x64, 1x512, 1024x2
А вы правы господа, сделал картинку 256х256 и получил 75 фпс.
Мне видюху поменять и всё норм будет? :)
DarkWraith
> Мне видюху поменять и всё норм будет? :)
Лучше пиши так, чтобы работало на этой твоей карточке. Которая, кстати?
Народ, вы о чём вообще? ПОсмотрите код, в функции SetGFX 9 раз текстура грузится с жёсткого диска и потом удаляется, а эта функция в свою очередь вызывается в каждом кадре. Ничего удивительного что прога так тормозит. Я у себя так же когда-то делал по неопытности, так простое двумерное приложение выдавало примерно 35 фпс из 60. Текстуры надо грузить только при старте программы, а в SetGFX юзать исключительно указатели на текстуры в памяти и glBindTexture. Никаких загрузок с диска в каждом кадре. То есть, при старте программы glGenTextures и загрузка, при использовании glBindTexture, а при выходе из программы glDeleteTextures. И должно всё нормально работать. :)
K.V.
> а эта функция в свою очередь вызывается в каждом кадре
Не-не. Смотри внимательнее. Она вызывается один раз из тела RenderThread(), а вся логика и рендер живут в цикле while( !Application::Terminated ) внутри SetGFX.
А где там тогда вообще рендер? :))
glClear и SwapBuffers я там нашёл только в 2-х функциях - StartGL, которая точно вызывается один раз и рендером не является, и SetGFX.
K.V.
> А где там тогда вообще рендер? :))
Вот как раз в теле того while.
while(!Application::Terminated ){ if( Application::Keys[Config->Up] ){ Application::Keys[Config->Up] = false; menu[Sel]->Set( BL_TEXTURE, Sel*2 ); Sel--; if( Sel == -1 ) Sel = 3; menu[Sel]->Set( BL_TEXTURE, Sel*2+1 ); menu[4]->Set( BL_Y, menu[Sel]->Get( BL_Y ) + 15 ); } if( Application::Keys[Config->Down] ){ Application::Keys[Config->Down] = false; menu[Sel]->Set( BL_TEXTURE, Sel*2 ); Sel++; if( Sel == 4 ) Sel = 0; menu[Sel]->Set( BL_TEXTURE, Sel*2+1 ); menu[4]->Set( BL_Y, menu[Sel]->Get( BL_Y ) + 15 ); } // Calculating // Start the scene glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); glLoadIdentity( ); menu[0]->Draw( ); menu[1]->Draw( ); menu[2]->Draw( ); menu[3]->Draw( ); menu[4]->Draw( ); Render( ); }
Обрати внимание на Render() возле закрывающей скобки. Это замаскированный под функцию макрос, который определен самой первой строкой в game.cpp
#define Render() SwapBuffers( Application::DC)
Мудрёно как-то чересчур. :) Я бы для начала попробовал более классический метод. :)
DarkWraith
> А вы правы господа, сделал картинку 256х256 и получил 75 фпс.
> Мне видюху поменять и всё норм будет? :)
Нет, менять размер текстур.
Тема в архиве.