OpenGL 必崩代码--查找原因。。。

alphapaopao 2004-07-20 11:41:31
_control87(( _RC_NEAR + _PC_53 + _EM_INVALID + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
, _MCW_EM);
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_XOR);
glBegin(GL_POINTS);
glVertex3d(0.0,0.0,0.0);
glEnd();

-----------------------------------------------------
glVertex3d(0.0,0.0,0.0); 运行到这一句,就会发生崩溃。

_control87 的调用是让 devide by zero 报告出来,如果没有这个调用,也存在 devide by zero。并不是不调这个就不存在 devide by zero 了。有一些机器默认状态是屏蔽这个 exception 的。所以,这里需要把它解放出来。

glEnable(GL_COLOR_LOGIC_OP); 如果不调用这个,无论如何都不会崩溃。
...全文
401 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphapaopao 2004-08-17
  • 打赏
  • 举报
回复
http://www.websamba.com/alphasun/bug/ColorOpCrash.rar

原先的那个服务器不能用了,请用这个下载。多谢 taianmonkey() 关注
taianmonkey 2004-08-17
  • 打赏
  • 举报
回复
下不了!
lithe 2004-08-16
  • 打赏
  • 举报
回复
因为懒得写框架,我使用的是QT(一个跨平台的C++函数库)中提供的OpenGL封装类做的测试,所以把代码发给你也没用。建议你也试试其他的框架代码试试,也许问题并不在绘制部分。
alphapaopao 2004-08-16
  • 打赏
  • 举报
回复
to nicknide(封月翔天):

在程序刚运行的时候 打开 异常_control87,会同样的崩溃到同一个地方。
nicknide 2004-08-16
  • 打赏
  • 举报
回复
这个问题就是gl库内部处理点的位置的时候,计算它的位置,然后除了0,

_control87(( _RC_NEAR + _PC_53 + _EM_INVALID + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL), _MCW_EM);

这条指令就是打开浮点异常中断的一个开关语句,

<float.h>

unsigned int _control87(
unsigned int new,
unsigned int mask
);

可以在msdn上找到详细说明,调试浮点运算的时候,非常有用
nicknide 2004-08-16
  • 打赏
  • 举报
回复
就是因为有时候浮点错误被编译器屏蔽了,所以才导致很多隐藏的这种微小错误被积累,以制最后被放大暴露出来。

因此,专业级的调试人员都是把所有浮点异常全部打开,包括除0异常,溢出异常等等,然后可以迅速定位错误地点……
alphapaopao 2004-08-13
  • 打赏
  • 举报
回复
大家再看看
alphapaopao 2004-08-03
  • 打赏
  • 举报
回复
up
alphapaopao 2004-07-30
  • 打赏
  • 举报
回复
大家可以单步跟踪。搜索 // EXCEPTION AG 2004 这一句注释,从那里开始单步跟踪。你可以发现发生崩溃的语句。这是 glVertex3d。
YourGF 2004-07-30
  • 打赏
  • 举报
回复
我试了一下,有的时候会崩,有的时候不会,崩的时候报Float Devide by Zero
但是这个如果报错的话应该每次都报吧,怎么会有的时候报有的时候不报呢?
感觉就像上面说的是内存操作错误
ygd 2004-07-30
  • 打赏
  • 举报
回复
是否你在其他地方造成内存非法操作呢?这很恐怖
alphapaopao 2004-07-29
  • 打赏
  • 举报
回复
#_#
---------------------
秋天到了,天气凉了,一群BT往南飞。一会儿排成个BT字,一会儿排成个T字。
alphapaopao 2004-07-28
  • 打赏
  • 举报
回复
今天晚上把完整的程序放上来。大家再试试看。
zhucde 2004-07-28
  • 打赏
  • 举报
回复
我的也没有崩溃
alphapaopao 2004-07-28
  • 打赏
  • 举报
回复
czmissyou(海中石):
视点位置是你老兄亲自设进去的。
ps 提问题还是另外开贴,要不然我的问题就完了。
alphapaopao 2004-07-28
  • 打赏
  • 举报
回复
lithe() :
把你的程序mail给我,我看看为什么不崩溃。可能有不一样的地方(有疏漏)。
sun@solid2000.com

czmissyou 2004-07-28
  • 打赏
  • 举报
回复
我看楼主对OpenGL很有研究。我对那个问题确实不知道。

不过我有一个问题想问楼主:在OpenGL里,怎么才能知道视点的位置,我想做一个动态多分辩率的3D模型。

THANKS!
lithe 2004-07-28
  • 打赏
  • 举报
回复
我试了试,没蹦啊
alphapaopao 2004-07-28
  • 打赏
  • 举报
回复
http://alphasun.html.533.net/alphasun/bug/ColorOpCrash.rar

程序下载。注意大小写要保留,才能下载。
请在源代码中搜索
// EXCEPTION AG 2004

那个地方就是产生崩溃的地方。
alphapaopao 2004-07-23
  • 打赏
  • 举报
回复
up
加载更多回复(12)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧