SharpGL局部不刷新Bug解决

引言

最近做了个小程序显示空间坐标上的点,为了简化编码选择了使用SharpGL来实现。这样就不用和OpenGL标准库打交道了,编码也简单了很多。
可是功能编写完成后测试时发现了一个偶发的Bug,引用的SharpGL.OpenGLControl控件在进行界面切换或初始化时偶发局部不刷新。

正文

环境

编译环境为VS2015,程序为C# winfrom程序,绘制点的区域使用了SharpGL.OpenGLControl控件。

Bug如何出现

先说一下SharpGL.OpenGLControl控件大体的使用情况:
1、新建一个UserControl,其中使用一个SharpGL.OpenGLControl和一些其它的控件。
2、将这个UserControl放到TabPage中,使用中会有多个TabPage,自然会有不同TabPage切换时引发的SharpGL.OpenGLControl随之切换。

运行时发现在TabPage页面切换时偶发OpenGLControl控件中的局部区域不刷新,而另一部分区域的显示则一切正常。(具体遇到的是OpenGLControl的上半部分有大概三分之一的区域画面是静止的,下半部分则以正常的频率在绘制点)

查证原因

第一步先追踪核对了绘制点的代码,未发现任何问题。
接着检查了投影和视口变换,也未发现逻辑错误。
至此怀疑是SharpGL内部出现了某种异常。

解决方法

尝试了调用Invalidate()和重新设置投影都没有效果。
最后重新计算了一下UserControl的大小并重新赋值,由此自然会引发OpenGLControl控件的大小重新赋值,问题解决。

后记

控件显示异常时Invalidate()之类的操作也不能将显示恢复正常,反倒是重新赋值一下控件尺寸就可恢复正常显示(重新赋值的尺寸起始和原来的尺寸数值时一样的)。这情况似乎是WinForm下许多控件都会遇到的,重赋控件尺寸似乎才能触发某些显示相关的刷新。
遇到类似的情况不妨一试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值