在使用顶点时,如何通过着色器传递数据,苔丝。控制,苔丝。评估,几何学和碎片着色。我试过用这种方式使用接口块。
//vertex shaders
out VS_OUT { ... } vs_out;而不是我在镶嵌控制着色器中编写的代码:
in VS_OUT { ... } tc_in;
out TC_OUT { ... } tc_out;因此,图赛尔控制着色器为每个顶点调用一次。这是否意味着tc_in不能是数组,而必须是单变量。我不太确定这是因为鬼鬼祟祟的gl_InvocationID。
然后事情就变得艰难了。镶嵌评价着色器有东西告诉我,评估着色器应该以接口块作为数组。
in TC_OUT { ... } te_in[];
out TE_OUT { ... } te_out[];移动到几何图形着色器。几何图形着色器需要多个顶点,所以,绝对是数组接口块。
in TE_OUT { ... } gs_in[];
out vec3 random_variable;
...
random_variable = gs_in[whatever_index];对我来说似乎是合法的,但数据并没有到碎片着色器。
如有任何建议,我将不胜感激。
发布于 2017-07-04 19:01:11
镶嵌控制着色器以某种方式将补丁的顶点作为修改,因此它们的输入和输出是
in VS_OUT { ... } tc_in[];
out TC_OUT { ... } tc_out[];每个补丁顶点都会调用控件着色器(通过使用gl_InvocationID查看哪个顶点),因此通常不需要任何循环来实现它。
镶嵌计算着色器接受这些修改后的顶点,每次调用输出一个顶点,这样我们就有了
in TC_OUT { ... } te_in[];
out TE_OUT { ... } te_out;几何图形着色器采用多个顶点,可以输出不同数量的顶点,但这些顶点是使用EmitVertex和EmitPrimitive显式构造的,因此在每次调用EmitVertex之前只有一个输出元素需要填充。
in TE_OUT { ... } gs_in[];
out GS_OUT { ... } gs_out;但是不要忘记在你的几何图形着色器中设置glPosition,否则OpenGL将不知道把你的顶点放在哪里。
然后将gs_out的插值值传递给片段着色器。
https://stackoverflow.com/questions/44912425
复制相似问题