Re[60]: Еще
От: c-smile Канада http://terrainformatica.com
Дата: 29.06.17 16:56
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Здравствуйте, alex_public, Вы писали:


P>В недрах bgfx сидит такое:

P>
P>static int32_t renderThread(void* /*_userData*/)
P>{
P>...
P>   while (RenderFrame::Exiting != bgfx::renderFrame()) {  };
P>...                        
P>   return bx::kExitSuccess;
P>}
P>


P>У меня один процессор из двух сразу загружается на 100%. Аналогичные по сложности демо-программы из SDK DirectX грузят процессор на пару процентов.

P>Примерчик из Sciter-a (DirectX) с вращающимся кубиком ведет себя таким же недопустимым образом.
P>API bgfx не самый дружественный, но Бранимир Караджич всё равно молоток.

Тот пример из Sciter SDK это практически оригинальный пример из DirectX SDK. А там они крутят такой вот "pure man's animation loop":

    MSG msg = {0};
    while( WM_QUIT != msg.message )
    {
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
        else
        {
            Render();
        }
    }


Т.е. Render() всего и вся зовется в loop невзирая на то изменилось ли что-то или нет. В реалии это делается не так.

Просто добавить там
        else
        {
            Render();
            Sleep(10);  
        }

Т.е. 100 FPS max cap и уже картинка меняется:

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.