gpt4 book ai didi

opengl - GLSL 1.5 - 渲染到不同层的纹理数组

转载 作者:行者123 更新时间:2023-12-02 01:13:26 27 4
gpt4 key购买 nike

我有 GL_TEXTURE_2D_ARRAY 并且我这样做:

1. 将我想要的所有内容渲染到 FBO 到纹理数组

2. 在渲染的“主要阶段”对该数组进行采样

为了实现第一个目标,我添加了一个小的几何着色器,通过对每个图元的 gl_Layer 调用。另外,我已经实现了一些类似于 this Nvidia tutorial 的“翻译”功能。在我用于第二阶段渲染的着色器中。

那么,我的问题是什么:

条件相同的顶点,相同的FBO,相同的着色器,相同的纹理数组

1) 在我的 FBO 中使用 glFramebufferTextureLayer 调用重新绑定(bind)渲染目标倍增效果很好。

2) 将纹理数组保存为 glFramebufferTexture 并且仅更改 gl_Layer 值会导致意外行为(第一层(代码中的 0)是正确,我接下来尝试渲染的每一层都是无效的)。

3) 我不想1) ,我想做2)我该怎么做?

我在渲染 FBO 时使用的着色器。

//顶点着色器

#version 150 core

uniform mat4 orthoView;
in vec4 in_Position;

void main(void) {
gl_Position = orthoView * in_Position;
}

//几何

#version 150 core

uniform int lr;

layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
out int gl_Layer;

void main(void){
//pass-thru!
for(int i=0; i<3; i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
gl_Layer = lr;
EndPrimitive();
}

//片段为空

编辑:

感谢大家的帮助!我的问题现在已经解决了,这是我的几何着色器:

#version 150 core

uniform int lr;

layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;

void main(void){
//pass-thru!
for(int i=0; i<3; i++)
{
gl_Layer = lr;
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}

EndPrimitive();
}

最佳答案

gl_Layer,与所有几何着色器输出一样,是逐顶点输出。哪个顶点控制特定图元的层是 implementation-defined .在您的情况下,没有理由不在 EmitVertex 调用之前在您的循环中设置它。

关于opengl - GLSL 1.5 - 渲染到不同层的纹理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com