Parameters glsl:将参数传递给着色器的具体工作方式是什么?

Parameters glsl:将参数传递给着色器的具体工作方式是什么?,parameters,attributes,glsl,shader,Parameters,Attributes,Glsl,Shader,我正在尝试使用OpenTK for c#为延迟渲染创建第一个自定义着色器。但是,在查找有关如何传递参数以及如何在着色器程序中正确接收参数的信息时,我有点不知所措。我找到了一些教程,但它们总是描述着色器或代码,很少同时描述两者(尤其是更高版本的glsl)。你知道我在哪里可以得到这方面的好信息吗?(我甚至无法画出一个简单的三角形,因为我不知怎么地无法使用正交投影,我怀疑我在矩阵方面遗漏了什么。我怀疑我可以通过跳过投影并直接绘制屏幕像素来解决这个问题) 例如,当我尝试使用该程序时,这些着色器会给我“无

我正在尝试使用OpenTK for c#为延迟渲染创建第一个自定义着色器。但是,在查找有关如何传递参数以及如何在着色器程序中正确接收参数的信息时,我有点不知所措。我找到了一些教程,但它们总是描述着色器或代码,很少同时描述两者(尤其是更高版本的glsl)。你知道我在哪里可以得到这方面的好信息吗?(我甚至无法画出一个简单的三角形,因为我不知怎么地无法使用正交投影,我怀疑我在矩阵方面遗漏了什么。我怀疑我可以通过跳过投影并直接绘制屏幕像素来解决这个问题)


例如,当我尝试使用该程序时,这些着色器会给我“无效操作”…

至少,您需要了解它们是如何使用的。您不能跳过投影,因为几何体被剪裁/投影到三维“设备”坐标。这里有教程列表。如果在“使用”该程序时遇到无效操作,则可能无法链接该程序。这要么意味着一个或多个着色器未能编译,要么在链接过程中出错。在尝试将着色器链接到一起后,查看每个着色器的
glGetShaderInfoLog(…)
输出和程序的
glGetProgramInfoLog(…)
。因此我是否正确理解,在核心模式下使用glsl需要我知道顶点着色器的所有输入变量的确切名称?嗯,不一定是名字。在新版本的OpenGL中,您可以在顶点着色器中将绑定位置显式指定给顶点属性。只要知道软件中的属性位置,就可以随意调用它们。。。实现这一点的另一种方法是在链接后查询命名属性的属性位置,或者在链接前绑定位置。顶点属性指针由指定给命名属性的属性位置定义;在兼容性方面,GLSL函数如
glNormalPointer(…)
别名为
gl_Normal
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
void main(){  
    gl_Position.xyz = vertexPosition_modelspace;
    gl_Position.w = 1.0;
 }

#version 330 core
out vec3 color;

void main(){
    color = vec3(1,0,0);
}