首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过着色器传递数据

通过着色器传递数据
EN

Stack Overflow用户
提问于 2017-07-04 18:46:22
回答 1查看 1.1K关注 0票数 0

在使用顶点时,如何通过着色器传递数据,苔丝。控制,苔丝。评估,几何学和碎片着色。我试过用这种方式使用接口块。

代码语言:javascript
复制
//vertex shaders
out VS_OUT { ... } vs_out;

而不是我在镶嵌控制着色器中编写的代码:

代码语言:javascript
复制
in VS_OUT { ... } tc_in; 
out TC_OUT { ... } tc_out;

因此,图赛尔控制着色器为每个顶点调用一次。这是否意味着tc_in不能是数组,而必须是单变量。我不太确定这是因为鬼鬼祟祟的gl_InvocationID。

然后事情就变得艰难了。镶嵌评价着色器有东西告诉我,评估着色器应该以接口块作为数组。

代码语言:javascript
复制
in TC_OUT { ... } te_in[];
out TE_OUT { ...  } te_out[];

移动到几何图形着色器。几何图形着色器需要多个顶点,所以,绝对是数组接口块。

代码语言:javascript
复制
in TE_OUT  { ... } gs_in[];
out vec3 random_variable;
...
random_variable = gs_in[whatever_index];

对我来说似乎是合法的,但数据并没有到碎片着色器。

如有任何建议,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 19:01:11

镶嵌控制着色器以某种方式将补丁的顶点作为修改,因此它们的输入和输出是

代码语言:javascript
复制
in VS_OUT { ... } tc_in[]; 
out TC_OUT { ... } tc_out[];

每个补丁顶点都会调用控件着色器(通过使用gl_InvocationID查看哪个顶点),因此通常不需要任何循环来实现它。

镶嵌计算着色器接受这些修改后的顶点,每次调用输出一个顶点,这样我们就有了

代码语言:javascript
复制
in TC_OUT { ... } te_in[];
out TE_OUT { ...  } te_out;

几何图形着色器采用多个顶点,可以输出不同数量的顶点,但这些顶点是使用EmitVertexEmitPrimitive显式构造的,因此在每次调用EmitVertex之前只有一个输出元素需要填充。

代码语言:javascript
复制
in TE_OUT { ... } gs_in[];
out GS_OUT { ... } gs_out;

但是不要忘记在你的几何图形着色器中设置glPosition,否则OpenGL将不知道把你的顶点放在哪里。

然后将gs_out的插值值传递给片段着色器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44912425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档