ПрограммированиеФорум2D графика и изометрия

2D OpenGL Help Me (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
18:20, 6 ноя 2009

DarkWraith
> Что сделать чтоб фпс так не занижался?
Выравнивать размер текстур до ближайшей степени двойки. Похоже, твои дрова сваливаются в софтверный рендер.
Размеры ни одной из твоих картинок не кратны степени двойки.

#16
18:23, 6 ноя 2009

Эм, от этого что то может зависить? как с этим бороться? так как изменить размер не получится.

#17
18:26, 6 ноя 2009

Не, дело не в этом, ради теста сменил размер картинки на 284х68, что кратно двойке :) и фпс всё такойже.

#18
18:37, 6 ноя 2009

DarkWraith
> ради теста сменил размер картинки на 284х68, что кратно двойке
Плохо читаешь.
Нужна степень двойки.  1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, ...

#19
18:37, 6 ноя 2009

эм, чувак, ты же прогер. Кратно двойке, это значит степень двойки.
2,4,8,16,32,64,256,512,1024,2048,4096, 8192...

#20
18:43, 6 ноя 2009

и что вы мне предлогаете? я во что текстуры должен превратить? кратно двойке должно быть и длина и высота? т.е. надо 64х64 ? или можно и 128х64 ?

#21
18:46, 6 ноя 2009

DarkWraith
> кратно двойке должно быть и длина и высота?
Размер по любой оси должен быть степенью двойки. Не кратен двойке, а равен степени двойки.
Т.е. можно 64x64, 128x64, 1x512, 1024x2

#22
18:48, 6 ноя 2009

А вы правы господа, сделал картинку 256х256 и получил 75 фпс.
Мне видюху поменять и всё норм будет? :)

#23
19:10, 6 ноя 2009

DarkWraith
> Мне видюху поменять и всё норм будет? :)
Лучше пиши так, чтобы работало на этой твоей карточке. Которая, кстати?

#24
20:59, 6 ноя 2009

Народ, вы о чём вообще? ПОсмотрите код, в функции SetGFX 9 раз текстура грузится с жёсткого диска и потом удаляется, а эта функция в свою очередь вызывается в каждом кадре. Ничего удивительного что прога так тормозит. Я у себя так же когда-то делал по неопытности, так простое двумерное приложение выдавало примерно 35 фпс из 60. Текстуры надо грузить только при старте программы, а в SetGFX юзать исключительно указатели на текстуры в памяти и glBindTexture. Никаких загрузок с диска в каждом кадре. То есть, при старте программы glGenTextures и загрузка, при использовании glBindTexture, а при выходе из программы glDeleteTextures. И должно всё нормально работать. :)

#25
21:19, 6 ноя 2009

K.V.
> а эта функция в свою очередь вызывается в каждом кадре
Не-не. Смотри внимательнее. Она вызывается один раз из тела RenderThread(), а вся логика и рендер живут в цикле while( !Application::Terminated ) внутри SetGFX.

#26
21:22, 6 ноя 2009

А где там тогда вообще рендер? :))
glClear и SwapBuffers я там нашёл только в 2-х функциях - StartGL, которая точно вызывается один раз и рендером не является, и SetGFX.

#27
21:27, 6 ноя 2009

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)
#28
21:32, 6 ноя 2009

Мудрёно как-то чересчур. :) Я бы для начала попробовал более классический метод. :)

#29
21:57, 6 ноя 2009

DarkWraith
> А вы правы господа, сделал картинку 256х256 и получил 75 фпс.
> Мне видюху поменять и всё норм будет? :)

Нет, менять размер текстур.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорум2D графика и изометрия

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