|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 16, 2003 16:43:16 · Поправил: vyacheslav Обязательна ли? Задача: Вращаем объект (OpenGL), и при достижении угла в 90градусов сбрасываем угол вращения в 0, для инкремента угда вращения используется сопроцессор. fld DWORD PTR Layer_Angle ;Загрузка угла fadd DWORD PTR Layer_Speed ;Инкремент угла fcom DWORD PTR Angle90 ;Сравнение с 90.0f fstsw ax and ax,100h ;Просматриваем флаги результатов сопроцессора jnz @@inc_angle ;Если угол менее 90, извлекаем результет ffree st(0) ;В противном случае очищаем стек xor eax,eax mov Layer_Angle,eax ;И устанавливаем значение угла вращения в 0 mov eax,RotateInfo ;В данном случе не принципиальный код ROTATECOLORS (ROTATE_LAYER PTR [eax]).ROTATE_COLOR ;сопроцессор не использующий invoke LoadRoteteInfo ; jmp @@main_loop @@inc_angle: fstp DWORD PTR Layer_Angle ;Собственно извлечение Если пропустить оператор ffree st(0), очищающий верхушку стека, то изобращение моргает, если данная ветвь алгоритма задействована, что явносвидетельствует о каких то сбоях в алгоритмах библиотеки OpenGL Вопрос: Обязательно ли следить за стеком сопроцессора, и очищать его по завершении испльзования? Вопрос 2 (наверное лучше новый топик). как, используя MASM передать в ф-ию float? invoke glFunction,DWORD PTR 1.2f выдает ошибку real or BCD number not allowed |
|
|
Дата: Дек 16, 2003 17:36:57 · Поправил: Black_mirror vyacheslav Сбоев в алгоритмах OpenGL скорее всего нет. Просто при переполнении стека сопроцессора в нем оказывается "не число". Естественно что при использовании "не числа" происходит всякая лажа. Вообще как-то можно установить чтобы OpenGL сохранял состояние сопроцессора. Что может упростить отладку. Только я не помню как это сделать. А вообще лучше писать программу так, чтобы при вызове функций OpenGL стек сопроцессора был бы пуст. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |