【问题标题】:Why would copying a value from vertex shader input to vertex shader (flat) output result in a different value?为什么将顶点着色器输入中的值复制到顶点着色器(平面)输出会产生不同的值?
【发布时间】:2020-05-03 06:27:16
【问题描述】:

我正在渲染带纹理的四边形(在屏幕空间中),我想在顶点数据中指定纹理,作为平面输出发送到片段着色器,并用于选择纹理。在此过程中值正在更改。在 RenderDoc 中,VS 输入为 2,输出为 1073741824(对于每个顶点)。有人知道为什么吗? (4.6 核心上下文,着色器#version 460)。我正在为每个四边形上传 6 个顶点并使用 glDrawArrays()。纹理阶段 0 有效,但任何非零值都会被转换。

layout(location=0) in vec3 coord3d;
layout(location=1) in vec2 uvIn;
layout(location=2) in vec3 colorIn;
layout(location=3) in unsigned int textureStageIn;

out vec4 color;
out vec2 uv;
flat out unsigned int textureStage;

void main(void)
{
    gl_Position = vec4( coord3d, 1.0 );
    color = vec4(colorIn,1.0); 
    uv = uvIn;
    textureStage = textureStageIn;
}
in vec4 color;
in vec2 uv;
flat in unsigned int textureStage;

uniform sampler2D tex00;
uniform sampler2D tex01;
uniform sampler2D tex02;

out vec4 outpColor;

void main(void)
{
    vec2 uvDx = dFdx(uv);
    vec2 uvDy = dFdy(uv);

    switch ( textureStage )
    {
        case 0:
            outpColor = textureGrad(tex00, uv, uvDx, uvDy );
            break;
        case 1:
            outpColor = textureGrad(tex01, uv, uvDx, uvDy );
            break;
        case 2:
            outpColor = textureGrad(tex02, uv, uvDx, uvDy );
            break;
        default:
            outpColor = color;
            break;
    }
} 

【问题讨论】:

  • 您必须向我们glVertexAttribIPointer(关注I)提供积分属性的规范。与glVertexAttribPointer 相比,浮点属性。见glVertexAttribPointer

标签: opengl glsl shader


【解决方案1】:

您必须使用glVertexAttribIPointer(关注I)来指定整体属性。与 glVertexAttribPointer 相比,浮点属性。见glVertexAttribPointer

注意,这个函数的type参数只指定了源数据的类型,而没有说明属性的类型。对于每种属性基类型(浮点型、整数型、64 位双精度浮点型),都有不同的功能。

【讨论】:

  • 谢谢,就是这样。我想我被文档误导了,当它说“类型指定数组中每个组件的数据类型。符号常量 GL_BYTE、GL_UNSIGNED_BYTE、GL_SHORT、GL_UNSIGNED_SHORT、GL_INT 和 GL_UNSIGNED_INT 被 glVertexAttribPointer 和 glVertexAttribIPointer 接受。”
  • @MarkL 注意,这个函数的type参数只指定了源数据的类型,而id没有说明属性的类型。跨度>
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2017-12-14
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多