Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从不同着色器导入函数_Objective C_Iphone_Opengl Es_Glsl - Fatal编程技术网

Objective c 从不同着色器导入函数

Objective c 从不同着色器导入函数,objective-c,iphone,opengl-es,glsl,Objective C,Iphone,Opengl Es,Glsl,我目前正在尝试在iOS上的GLSL OpenGL ES着色器中减小主函数的大小。因此,我提取了一些辅助函数,并在不同的着色器对象中声明和编译它们。之后,我想在链接用于渲染的程序之前,使用glAttachShader将它们重新链接到一起。所有的设置都已经完成,不幸的是,包含我的主函数的着色器无法编译,因为它找不到对在单独着色器中声明的函数的引用。如何告诉编译器包含引用?您的问题中有一些混淆的术语。这里涉及两个相关但不同的结构: 一个函数声明(又称原型),它只声明返回类型、函数名和参数。其形式如下

我目前正在尝试在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”