有没有办法以独立于语言的方式表达OpenGL指令?

时间:2012-01-07 22:07:58

标签: opengl scripting video-processing video-editing

标题几乎说明了。我正在考虑制作一个简单的视频编辑器,我不确定各种效果和过滤器等的“后勤”。假设我希望外部程序可以对图像应用一些效果。是否必须是必须执行的程序,或者它只是视频编辑器可以解析的一组OpenGL指令,并且基本上“传递”到OpenGL。从技术上讲,这将是一个程序,但它似乎比制作一个完整的二级程序只是为了应用效果更优雅和标准化。也许有更好的方法?

编辑:谢谢你的回答。以下是一个跟进:其他视频编辑如何实现这一点?我问的原因是因为上面的答案似乎相当消极,所以我想知道专业应用程序是如何 完成的。

5 个答案:

答案 0 :(得分:3)

  

假设我希望外部程序可以对图像应用一些效果。是否必须是必须执行的程序,或者它只是视频编辑器可以解析的一组OpenGL指令,并且基本上“传递”到OpenGL。

任何一件事都有效。然而,在OpenGL标准本身中,没有像“OpenGL指令”或“操作码”这样的东西。但至少在具有间接GLX的基于X11的系统中,这是可能的,因为GLX实际上定义了操作码。如果是间接的话,多个X客户端可以在相同的上下文中运行。不幸的是,大多数时候你都没有这个选项,因为你可能想要一个直接上下文,因为你可能想要OpenGL3(并非所有操作都有操作码定义,这使得OpenGL-3间接不可能),或者因为你'不使用GLX。

所以接下来的选择是,你为其他进程提供了一些OpenGL的命令/解释器提示。如果你很懒,我建议你在你的程序中嵌入一个Python解释器,以及Python OpenGL绑定。这些操作在当前活动的任何上下文中运行,允许其他程序实际发送一些Python脚本来完成它的工作。

最后但并非最不重要的是,你可以通过一些RPC接口提供OpenGL。

或者你提供了一些插件系统,你可以在其中加载一些DLL,它可以用来实现契约。

答案 1 :(得分:3)

  

它必须是必须执行的程序,还是只是一组视频编辑器可以解析的OpenGL指令,并且基本上是“传递”到OpenGL。

有几种方法可以解决这个问题(“使视频编辑器能够创建自定义效果”)。

  1. 让您的编辑器支持插件,并提供api来制作新的视频效果插件。 Macromedia Director以这种方式工作。新效果必须作为插件库实现(dll / .so,具体取决于您的平台)。
  2. 将带有OpenGL绑定的脚本语言嵌入到您的应用程序中以制作视频效果,提供与应用程序内部状态交互的基本功能。这样可以加快效果的发展,但某些操作的性能会受到很大影响。 “Blender”(3d编辑器)以这种方式工作,Maya提供了类似的框架(我认为)。基本上,这是#1,但实现为脚本语言。
  3. 让编辑器加载GLSL着色器。这将允许你相当快地制作一些效果,但除此之外它并不是一个好主意 - 虽然GLSL具有相当数量的“力量”(功能/数学),但仅GLSL不允许你制作任何你想要的效果,因为它根本无法与您的应用程序交互(纯GLSL无法创建纹理,帧缓冲区等,这将限制您创建更有趣的内容的能力)。很可能你只能制作某种过滤器,仅此而已。 #1和#2将为最终用户提供“权力”。
  4. 实施node-based effect editor。即用户可以拖动几种类型的节点来表示某些操作,它们具有输入/输出,用户可以连接它们。 Blender 3D和UDK(虚幻开发工具包)具有这样的功能。我认为.kkreiger(网站已关闭,google)使用类似技术制作96kb第一人称射击游戏。这可能非常强大,但程序员很可能不喜欢用鼠标拖动图形实体,除非你还提供了通过脚本语言制作这种节点图的方法(AviSynth有类似但不完全相似)。这可以像#1或#2一样强大,但会花费你额外的开发时间。
  5. 除此之外,没有“语言无关”的方式可以生效。您必须使用现有语言使效果插件与您的应用程序交互,或者您必须使用自己的“语言”来描述效果。唯一与语言无关的方法是聘请程序员并告诉他你想要什么样的效果。但话说回来,这需要自然语言。

答案 2 :(得分:1)

当然,但这基本上相当于你创建自己的语言。您可以接受OpenGL"说明"从用户通过一些文本界面(或者如果你想以某种方式将某些东西放在一起作为GUI),然后解析那些"指令",并且底层实现将以您的应用程序编写的任何语言执行这些指令

答案 3 :(得分:0)

简短的回答是否定的。你正在寻找的是一个HCI人的梦想DSL,无论基础技术如何,都会描述演示。

答案 4 :(得分:0)

可能不是你想要的,你可能想看看GLSL。 GLSL是一种类似C语言,由图形卡驱动程序编译成本机"图形汇编语言"。