C#中使用OpenGL:(九)重写C# OpenGL接口

13 篇文章 17 订阅

C# OpenGL系列,前面八篇博客在2018年1月份已经完成,基本上是把C# OpenGL接口所涉及的技术大概讲了一下。当时信誓旦旦说要把博客写好,实际上没有做到,有些东西没有讲明白,有些东西是还是错的。另外,博客的行文也不流畅,读起来怪怪的,啰里啰嗦说了很多,但总感觉说不明白。有读者评论说,文章很生动,那真是过奖了。关于源代码的问题,之前的源码上线是很匆忙的,根本没有进行过充分的测试,里面有很多bug,我自己都不忍直视。说好要多写一些domos和辅助类,最后也只是做了一点点。总的来说,这份OpenGL接口源码写得很烂,各种设计不合理,没有考虑未来的扩展,而且代码有错误,还硬生生把C#写出了C的感觉(被C语言荼毒太深了)。这次,打算重新写一遍代码,采用新的技术和设计。在写这篇博客时,源码已经完成了。从这篇博文开始,将重新讲述如何编写C#版的OpenGL接口。

C# OpenGL接口源码、C# OpenGL编程例子可在百度网盘下载:链接:https://pan.baidu.com/s/1dnIo1s-l6aqlE3IgaMJA5g 
提取码:wc0x

1、题外话

当初开始写C# OpenGL接口的时候,是2017年八月,那时OpenGL最新的版本(4.6版本)发布还没有多久,那时我刚刚结束研究生一年级的生涯。C#也是接触不久,一开始做的时候,也不知道能不能成,至少在写第一篇博客的时候,我的心里也没底。放暑假,我没回家,留在学校搞搞编程,想着以后能不能去华为(后来证明,门都没有),同时呢,打算用一个月的时间把这个源码个写出来。后来的事实表明,一个月时间连毛都没搞出来,整个项目,断断续续搞了5个月!最后上线还是很匆忙,连一些已知的bug也来不及改(或者说,懒得改)。当然,5个月并非每天都在搞,其中还穿插着研究生论文的事。看着学校各个同学都在忙着发表论文,什么EI,什么SCI,我连自己要做什么也不知道。到了18年一月份,我的论文一点头绪都没有,别人都在紧锣密鼓地搞科研,而我在不务正业写什么代码。最后是真的急了,虽然我认为我是个完美主义者,但也止不住烂代码匆匆上线。于是,我在2018年一月,结束了代码的编写,也结束了博客的撰写,demo没做完,辅助类也没写完。源码发到CSDN,很多使用者都说好,我心里内疚啊,这么烂的东西,也有人说好,那时,我就决心抽时间把哪些代码个收拾收拾。事实上一开始我就发现其中的一些bug,但实在是没有时间,毕业论文的事都足够让人焦头烂额了,要是让导师发现我不务正业,非弄死我不可。等到2018年下半年,该找工作了,投了华为,直接被过滤了,再投天津的一家搞3D扫描的小公司,竟然也被藐视了,后来接受了一家研究所的offer,岗位是飞机设计相关,想想以后不怎么会用到编程,更不会用到OpenGL,心里的热情基本上已经消散了。到19年5月份的时候,毕业论文答辩完了,有点时间,我又想起这件事来,想趁着7月份入职之前的空闲时间,把原来代码中的bug修正一下。后来发现,原来的代码就是一坨屎,没法修了,还不如重新写一份。有了之前的经验,这次完成的很快,断断续续也用不到一个月。源代码在2019年7月初就完成,为了赶在入职之前完成,这次也是很匆忙,工作依然是没做完,代码依然是没有充分的测试。不过,新版的代码采用了全新的设计,看起来更合理,也修改了已知的bug(可能也引入了更多的bug),采用了看起来更牛逼的技术,代码终于从面向过程转变为面向对象,恩,是的,看起来更C#了。

2、新版本C#OpenGL接口的一些更改及新技术

(1)允许同时创建多个OpenGL渲染环境,在绘图时可以切换使用,为多窗口绘图提供了方便;

(2)OpenGL扩展函数指针预加载,相比于之前的“用到时加载”,在运行效率上可能会有所提升;

(3)反射技术,这主要是用在OpenGL函数指针预加载方面;

(4)泛型编程技术,这主要是用在图形学运算方面,比如矩阵,向量;

(5)公开了winapi函数和wgl函数,增加了灵活性;

(6)区分了核心模式和兼容模式,核心模式只包括4.6版本的函数,低版本的函数很多被遗弃,避免了进行现代OpenGL开发时误用老函数的尴尬,兼容模式则包括了所有的新老版本的函数。

3、其他

新版本的源码,把创建OpenGL渲染环境、加载函数指针、缓冲区切换都封装成一个类。在代码生成方面,以前都是用C语言编程,自动生成很大一部分代码,这次似乎没有那么高端,直接用excel表格就完成了全部的接口代码的生成,效率不是一般的高。

4、结语

旧版本的源码有很多缺陷,很想删掉或者替换,但CSDN官方似乎不让。更可恶的是,随着下载的人越来越多,所需要的积分也逐步上涨,而作为资源的贡献者居然没有定价权,也没有持续的收益权!抱着学习的心态,可以看看老版本的源代码,要是使用的话,建议使用新版本的,虽然同样有很多bug。

上一篇:C#中使用OpenGL:(八)OpenGL扩展函数

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shifenglv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值