Khronos为何不通过移除旧功能来清理OpenGL API?
OpenGL向后兼容的痛点与版本化API的可行方案
OpenGL为了维持向后兼容,留了一堆冗余内容,这写起干净代码来真的闹心——不同版本里,有些函数的参数含义、行为逻辑都不一样,还有好多早就没用的功能占着API位置。就拿DSA来说,现在都成核心功能了,旧API的设计还在拖后腿。
虽说用函数加载库拿指针的时候,可以主动跳过那些废弃内容,但其实完全能搞个更清爽的方案,比如gl4CreateBuffers这种带版本号的函数:
- 绑定明确版本:开发者直接指定用对应版本的函数,跨版本函数行为不一致的问题直接就没了,不用再对着同一个函数在不同版本的差异犯愁。
- 分版本模块化头文件:给每个OpenGL版本做专属头文件,开发者想用哪个版本就引哪个,只接触该版本里干净的API,不用被迫跟一堆废弃参数、过时功能打交道。
- 清理新版本函数的冗余参数:至少在新版本的函数里把那些不合理的旧弃用参数删掉,驱动要是需要兼容旧实现,大可以在内部做映射,把新函数调用转成旧函数的逻辑,底层兼容不受影响,上层代码却能整洁一大截。
内容的提问来源于stack exchange,提问作者Joao Pincho
相关产品推荐
相关产品推荐

