Objective c 从不同着色器导入函数
我目前正在尝试在iOS上的GLSL OpenGL ES着色器中减小主函数的大小。因此,我提取了一些辅助函数,并在不同的着色器对象中声明和编译它们。之后,我想在链接用于渲染的程序之前,使用glAttachShader将它们重新链接到一起。所有的设置都已经完成,不幸的是,包含我的主函数的着色器无法编译,因为它找不到对在单独着色器中声明的函数的引用。如何告诉编译器包含引用?您的问题中有一些混淆的术语。这里涉及两个相关但不同的结构:Objective c 从不同着色器导入函数,objective-c,iphone,opengl-es,glsl,Objective C,Iphone,Opengl Es,Glsl,我目前正在尝试在iOS上的GLSL OpenGL ES着色器中减小主函数的大小。因此,我提取了一些辅助函数,并在不同的着色器对象中声明和编译它们。之后,我想在链接用于渲染的程序之前,使用glAttachShader将它们重新链接到一起。所有的设置都已经完成,不幸的是,包含我的主函数的着色器无法编译,因为它找不到对在单独着色器中声明的函数的引用。如何告诉编译器包含引用?您的问题中有一些混淆的术语。这里涉及两个相关但不同的结构: 一个函数声明(又称原型),它只声明返回类型、函数名和参数。其形式如下
- 一个函数声明(又称原型),它只声明返回类型、函数名和参数。其形式如下:
returnType functionName(type0 arg0, type1 arg1, ..., typen argn);
returnType functionName(type0 arg0, type1 arg1, ..., typen argn) { // do some computation return returnValue; }
- 函数定义,它包含声明的所有部分以及实现函数的主体。其形式如下:
returnType functionName(type0 arg0, type1 arg1, ..., typen argn);
returnType functionName(type0 arg0, type1 arg1, ..., typen argn) { // do some computation return returnValue; }
您可能对这里的这篇文章感兴趣:好吧,GLSL源代码最终都是内联的,没有
call
功能。你可以用一个自定义的#include
将源文件缝合在一起,这样就可以很好地工作(或者在桌面GL中使用@Blarglenarf的扩展名)。是的,我已经研究过了,不完全是我想要的。如果不可能,那么为什么可以使用glAttachShader添加多个着色器?非常感谢,包含主函数的着色器现在似乎可以正确编译!不幸的是,现在程序链接失败,说“没有在片段着色器中定义main”