Обьясните почему так происходит: приложения opengl, написанные на FASM не работают нормально на всех машинах. На некоторых они вылетают при вызове функции wglMakeCurrent. Причем, если отключить аппаратное ускорение в панели управления - все нормально. Самое интересное, что проги, написанные на других языках - visual c++ и MASM работают совершенно нормально, без странностей. Похоже, это зависит от видеокарточки и драйверов к ней. На моем Celeron 1000 с GF2 MX400 все путем, а на Core 2 Duo с GF7900GT начинаются данные чудеса. Я пробовал примеры с nehe.gamedev.net для FASM, Microsoft Net и MASM, причем испытывал те экзешники, которые уже лежали в архивах. Два последних работали нормально, а фасмовский только с отключенным аппаратным ускорением. Мне очень интересно узнать, в чем тут дело??? Толи фасм кривой, толи у меня дрова кривые, а, может быть, у меня кривой драйвер руки.сис??? Последнее отпадает, потому что я проверял чужие примеры. Пожалуйста, не оставляйте моё сообщение без внимания!
У меня у самого лажа с wglMakeCurrent когда юзаю nvoglnt.dll (точнее ее юзаю не я, а драфвер мой geforce)...
Вчера столкнулся с этой проблемой. Видяха такая-же, проц amd x2. Что примечательно, если для проги использовать только одно ядро, всё ок. А дело думаю именно в фасме+winxp (w2k норм). Провел эксперимент: взял масм-опенгл прогу и перенёс ее в фасм. Причем забил ради прикола в машинных кодах через db. Идентичность 100%. Результат тот-же. Масм пашет - фасм нет. Есть мысли, гуру? Впринципе остается только одно - какой-то глюк в создании секций. Импорт функций думаю отпадает (пробовал getprocaddress на всё).
Честно говоря успел удалить всю эту ерунду. Но раз тема ожила, сделал по новой. Единственное, не стал парится с примером "db" и getprocaddress. Результат всё равно один. В директории masm - оригинал, в fasm - copy/paste из olly. Сам код из fasm получается тот-же, отличия в структуре секций. Но какая связь с двухъядерностью... ??? Х.з.
Столкнулся с аналогичной проблемой. Карта NVIDIA 7600 GT. Падают примеры только компиленные в FAsm. На си аналог написал - работает. работает на всем кроме фасма. происходит переполнение стека потока в nvoglnt.dll. при компиляции другими компиляторами стек расширяется. смотрел в оле...
l_inc На всякий случай напишу и здесь. Стек там в экзешниках в норме 4К, но commit тоже 4К Я так понимаю закажет еще... А вот heap без commit. А так да. Зачем писать на ассемблере, если не понимаешь нижних рычагов. Без этих рычагов, ассемблер это тормоз, а не ускорение. А уж OpenGL и DirectX программить на ассемблере - это изврат. Ну да игрушки, но по делу только ЯВУ.
valterg В норме или нет, а большинство компиляторов ставят по умолчанию мегабайт. Мне пару раз 4K не хватало. Это Ваше "но" имеет непонятное значение, т.к. SizeOfStackCommit особой роли не играет и компиляторами MS также по умолчанию выставляется в 4K. Если я правильно понимаю высказывание, то никто ничего не закажет. Стек больше, чем SizeOfStackReserve не растёт. А вообще я не разбирался: Woolear сказал, что переполнение стека, и я принял на веру. К тому же ИМХО куча в отличие от стека — крайне маловероятная проблема.
Я думал по названию, что это размер "дозаказа", когда стек исчерпан. Про 1 Мб в курсе. Скорее всего в fasm по умолчанию задан минимум для простых программ. Т.е. Си и масм не причем - просто там нормальный линкер, с нормальными праметрами.
Читал и прописывал. чтобы понять рычаги и учиться. А ява - тормоз по определению. Не надо смотреть с высока и разводить срач. нужно решение проблемы. Для этого форум? У меня не хватает знаний и опыта чтобы ее решить.
Фрагмент заголовка проги РАБОТАЮЩЕЙ, скомпиленной в DevC++ А это у фасмовской проги: Я давно понял что в этом может быть дело, но директива stack вообще не дает эффекта. мб не там пишу...
stack 200000h,1000h и программа работает Оказывается я писал stack 200000,1000 без h, поэтому он воспринимал это в десятичном виде... Вот собственно и решена проблема...
ЯВУ - языки высокого уровня. Пардон там непонятно получилось. А все-таки про рычаги я оказался прав. Надо не только их дергать уметь, но контролировать.