Как при работе с OpenGL использовать к примеру такую функцию gluPerspective Т.е. есть такой код Код (Text): invoke gluPerspective,0,40468000h,0,3FF00000h,0,3FF00000h,0,40590000h Все эти страшные числа я получил следующим образом. Сделал проект на С и в отладчике подсмотрел вещественные числа. На С++ код такой Код (Text): gluPerspective(45.0f,1.0f, 1.0f ,100.0f); Но каждый раз делать проект на си и ковырять в отладчике для поиска перевода вещественныхчисле, это ж ужас просто. Как можно попроще делат. Например такой код Код (Text): .data perspectve_1 dd 45.0 perspectve_2 dd 1.0 perspectve_3 dd 1.0 perspectve_4 dd 100.0 .code ... invoke gluPerspective,0,perspectve_1,0,perspectve_2,0,perspectve_3,0,perspectve_4 ... не работает. Спрашивается почему?
А не адреса ли переменных подставятся инвокой? В отладчике смотрели? (я к сожалению с ней не работал)
В отладчике смотрел. Всё правильно он вставляет. Именно значения, а не адресса. Непонятки в том, что во втором случае мои числа представляются как 42С80000 3F800000 3F266666 42340000 Т.е. совсем другие числа, чем в первом случае. В итоге он то рисует мой полигон, но совершенно искажённым, чем в первом случае.
error A2114: INVOKE argument type mismatch : mismatch : 8 error A2114: INVOKE argument type mismatch : mismatch : 6 error A2114: INVOKE argument type mismatch : mismatch : 4 error A2114: INVOKE argument type mismatch : mismatch : 2 Неужто в MASM нельзя просто как то вбить 1.0, а он сам преобразует, упакует и т.д.
А может : Код (Text): .data perspectve_1 dq 45.0 perspectve_2 dq 1.0 perspectve_3 dq 1.0 perspectve_4 dq 100.0
error A2114: INVOKE argument type mismatch : mismatch : 2 error A2114: INVOKE argument type mismatch : mismatch : 4 error A2114: INVOKE argument type mismatch : mismatch : 6 error A2114: INVOKE argument type mismatch : mismatch : 8
Здесь ты пытаешся преобразовать в 32 разряда, а надо 64 Может попробовать так: Код (Text): koord dq 45.0,1.0,1.0,100.0 ... sub esp,32 mov edi,esp mov esi,offset koord mov ecx,8 rep movsd call gluPerspective
gluPerspective требует вещественных чисел ДВОЙНОЙ точности. То есть 64 разряда вместо 32. MASM не умеет убирать в стек 64-битные числа, надо или писать специальную обертку для таких вызовов OpenGL, или "подсматривать" в скомпилированном бинарнике из С++ жестко заданные значения, или делать все каждый раз вручную, создавая переменные через dq и помещая их в стек в 2 приема. И вызывать call gluPerspective вместо invoke. Кроме того, MASM вообще не позволяет использовать вещественные числа иначе, как задавать их в переменных, через dd или dq. Нельзя сделать PUSH 1.0, можно сделать только var1 dd 1.0 ... push dword ptr [var1] FASM позволяет все