首先是一些背景(我总是喜欢人们提问时给出的):我正在编写一个图书馆项目。它是一个简单的 OpenGL '图形扭曲' 库。用户应该能够通过简单的调用来创建称为“区域”的某些对象
myRegion = new DistortedRegion(w,h);
然后在它们上定义各种扭曲并绘制它们:
myRegion.addTwistDistortion(...)
myRegion.draw(x,y);
这里的所有都是它的。该库使用 OpenGL 来绘制以各种用户定义方式扭曲的区域(实际上是一个矩形位图)。
现在,问题来了:库需要访问其顶点和片段着色器,它们是与资源一起存储在“raw”文件夹中的 .glsl 文件。为了做到这一点,我们必须访问 Resources 对象,为了做到这一点,我们 AFAIK 必须拥有 Context 对象。因此,就目前而言,库必须首先通过调用进行初始化
Distorted.init(Context)
这对我来说是个大问题,因为恕我直言,这让整个 API 变得笨拙。如果不是因为这个该死的 Context,就不需要初始化任何东西,用户只要想要就可以直接创建新对象,这在文档中很优雅且易于解释。一个单独的 init() 调用,只需要将 Context 对象传递给库,只需要检索 Resources 对象,只需要打开两个包含着色器代码的文件,这使得所有这些都非常笨拙.
我想简单地将着色器代码移动到我的库中的静态初始化字符串中,但这对于开发来说很麻烦(着色器有几百行相当复杂的代码,如果我将它们保存在单独的 .glsl 文件中,我可以有语法高亮等)
有什么建议吗?