【发布时间】: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