LINUX.ORG.RU

SDL+OpenGL vs. Windows


0

0

Написал программу на Си, которая использует OpenGL 3D через SDL. Не особо сложная программа (курсовик по просчёту и моделированию физ.явлений). На всякий случай решил портировать курсовик под Windows (мало ли что будет при сдаче). Портирование - отдельная песня с участием той самой матери, но результат поразил - программа работала ВООБЩЕ безо всяких тормозов, хотя на Linux ни разу не получалось догнать выставленный FPS. Вопрос: КАК может быть такое, что под загаженной Windows (не переставлял года эдак два) трёхмерное приложение OpenGL работает ощутимо быстрее, нежели под Linux.

P.S. Linux Mandriva 2010 Free, KDE, GCC, SDL свежие из апдейт репозиториев, драйвер nvidia проприетарный на nVidia GeForce 4 MX 440; Microsoft Windows XP SP2 и Microsoft Visual Studio 2005.

И ещё вопрос: есть ли средства, методы или хотя бы туториалы по проведению полного профилирования быстродействия домашнего компа? Под ту же Mandriva

Заранее спасибо.

>драйвер nvidia проприетарный на nVidia GeForce 4 MX 440;

Вот тут и вся проблема.

Попробуй nouveau, она в 2д получше чем блоб, но карточка древняя, может и не прокатить.

anonymous
()

>И ещё вопрос: есть ли средства, методы или хотя бы туториалы по проведению полного профилирования быстродействия домашнего компа? Под ту же Mandriva

в гугле забанили? мандра или нет - не важно
можешь заглянуть профиль

megabaks ★★★★
()

>трёхмерное приложение OpenGL работает ощутимо быстрее, нежели под Linux.

Пробовали выключать композит? Запускать в отдельных иксах? Запускать из под рута (хоть это и зло, но с нвидиевским проприетарным драйвером это иногда сильно увеличивает фпс)? Менять ключи gcc при сборке?

kranky ★★★★★
()

> под загаженной Windows (не переставлял года эдак два) трёхмерное приложение OpenGL работает ощутимо быстрее, нежели под Linux.

Озвучь проценты «ощутимости» и флаги компиляторов. Было бы так же не плохо, если бы ты попробовал отпрофилировать своё приложение.

anonymous
()
Ответ на: комментарий от anonymous

Не смотря на возраст у тебя довольно «способная» видеокарта, если вспомнить всё то, что на ней игралось.

Если ты смог просадить быстродействие 3д - значит ты знатный быдлокодер =)

anonymous
()

Думаю о программе нужно узнать больше. Компиз ни при чем обычно. Вы же не жонглируете окнами во время просмотри анимации.

Как рисуете? Какие текстуры, расширения? Какие опции по умолчанию у OpenGL (настройки в системе)? Если у вас не VBO, то постарайтесь на него перейти. Что в шейдерах?

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

>nVidia GeForce 4 MX 440

Что в шейдерах?


А они там были?

Deleted
()

> можешь заглянуть профиль
Спасибо, посмотрю

> Nvidia под линукс тоже не вариант? А я уже собрался её покупать.
«Линукс не кривая, а повторяет изгибы рук хозяина» ©

> Озвучь проценты «ощутимости» и флаги компиляторов. Было бы так же не плохо, если бы ты попробовал отпрофилировать своё приложение.
Исходник переписал чтобы явно выдавался FPS. На Linux FPS в среднем равно 5, с ключом -O3 достигает до 8. На Windows похоже что все 25, но надо проверить. При перезагрузке Microsoft Chkdsk и Tuxera NTFS-3G не поделили NTFS-раздел и в итоге Microsoft Visual Studio накрылась медной ею, сейчас скачиваю давным давно удалённый образ :( как измерю FPS под виндой, напишу

>Не смотря на возраст у тебя довольно «способная» видеокарта, если вспомнить всё то, что на ней игралось.
Да, под виндой она работала шустро под старыми играми.

>Если ты смог просадить быстродействие 3д - значит ты знатный быдлокодер =)
Дык в том-то и вопрос, что под виндой быстродействие ощутимо выше, нежели под линькой. Поэтому надеюсь, что исходник здесь ни при чём. К тому же быдлокодеры 3D пишут не на Си, а на Delphi, и не на OpenGL, а на DelphiX :) (имхо)

>Как рисуете? Какие текстуры, расширения? Какие опции по умолчанию у OpenGL (настройки в системе)?
Исключительно полигоны и цвет, никаких текстур и расширений.

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_SetVideoMode(800,600,24,SDL_OPENGL);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,640/480,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);   

> Что в шейдерах?
Искренне улыбнуло. :)

Northsoft ★★
() автор топика
Ответ на: комментарий от Northsoft

>Исходник переписал чтобы явно выдавался FPS. На Linux FPS в среднем равно 5, с ключом -O3 достигает до 8. На Windows похоже что все 25, но надо проверить.
И правда, что такой низкий fps? Мегасцена?

Booster ★★
()
Ответ на: комментарий от Booster

Композит =\

Я снова с вами. Windows Installer показал себя как обычно, поэтому Microsoft Visual Studio всё-таки накрылась медной ею, хотя не жалко. Однако при приостановленном композите движок выдал нужный FPS (25..35). Поэтому вопрос к вам, коллеги: куда копать, если тормозит композит?

>А рисуешь как?

glBegin(...)  
...  
glEnd()

?

Именно так. :)

>И правда, что такой низкий fps? Мегасцена?
Нет, всего 1500 полигонов.

P.S. Комп+тормозит=композит... =\

Northsoft ★★
() автор топика
Ответ на: Композит =\ от Northsoft

>P.S. Комп+тормозит=композит... =\

вы хотите сказать, что аэро вообще сможет запуститься на МХ440

Ingwar ★★★★★
()

Скорее всего под Linux у вас включен VSync, а под Windows отключен. Вот и вся проблема «тормозов».

andreyu ★★★★★
()
Ответ на: комментарий от kranky

> Запускать из под рута (хоть это и зло, но с нвидиевским проприетарным драйвером это иногда сильно увеличивает фпс)?

Что за глупость? Может стоит прочитать readme, идущий вместе с лрайвером - там написано, что нужно вписать в xorg.conf?

andreyu ★★★★★
()

Еще как вариант - тормозит способ вывода информации о FPS.
Как вы отображаете текущий FPS?

andreyu ★★★★★
()
Ответ на: Композит =\ от Northsoft

Нвидиавские дрова такие нвидиавские дрова.
Можешь дать исходники - потестировать.
Интересно сколько выдаст в сравнении со старой нвидией intel gma 950

CyberTribe ★★
()

> вы хотите сказать, что аэро вообще сможет запуститься на МХ440
Речь идёт о Linux и Windows XP, про аэро я вообще ничего не говорил.

> Скорее всего под Linux у вас включен VSync, а под Windows отключен. Вот и вся проблема «тормозов».
Спасибо, посмотрю

>Еще как вариант - тормозит способ вывода информации о FPS.

Как вы отображаете текущий FPS?

Тормозит, но несильно. printf() в Konsole. Композит тормозит быстрее. :)

>Нвидиавские дрова такие нвидиавские дрова.

Можешь дать исходники - потестировать.

Интересно сколько выдаст в сравнении со старой нвидией intel gma 950

Налетай :) http://paste.org.ru/?9s1pjd
Компиляция - gcc -lm -lSDL -lGL -lGLU .c

Northsoft ★★
() автор топика
Ответ на: комментарий от Northsoft

> >Как вы отображаете текущий FPS?

Тормозит, но несильно. printf() в Konsole. Композит тормозит быстрее. :)


А если сделать printf в консоль раз в 5, 10, 30, 60 секунд.

andreyu ★★★★★
()
Ответ на: комментарий от Northsoft

Не по теме, но

392: gluPerspective(45.0f,640/480,0.1f,100.0f);

640/480 == 1

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

Не установлен SDL_GL_DEPTH_SIZE, хотя буффер глубины используется. не знаю правда как это может повлиять.

И вообще видеорежимы лучше запрашивать и выбирать из списка полученных. Может в полноэкранном режиме быстрее работать будет.

n0fun
()
Ответ на: комментарий от n0fun

> И вообще видеорежимы лучше запрашивать и выбирать из списка полученных.

Приложение оконное, так что пофиг.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

На разрешение - да, пофиг. А вот на количество бит на пиксель? В таком случае конечно лучше ставить в SDL_SetVideoMode 0, чтобы использовать текущее значение.

n0fun
()
Ответ на: комментарий от n0fun

Зависит от реализации драйвера. Скорее всего будет использоваться текущая глубина.

andreyu ★★★★★
()
Ответ на: комментарий от Northsoft

около 60 fps, x86_64, T7700 (2.4ghz x 2 4mib L2), загруженно одно ядро где-то на 60%, видеокарта - х3100

P.S. исходник - ужасен. Русский язык через жопу, с наплевательством на локаль, ужасное форматирование (у тебя пробел не работает?), куча кода в куче.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.