gpt4 book ai didi

opengl - 检查sampler2D是否为空

转载 作者:行者123 更新时间:2023-12-01 18:03:43 25 4
gpt4 key购买 nike

我正在设计一个 Sprite 类,如果没有加载纹理,我想仅显示一种颜色。

这是我的顶点着色器

#version 330 core
layout (location = 0) in vec4 vertex; // <vec2 pos, vec2 tex>

out vec2 vs_tex_coords;

uniform mat4 model;
uniform mat4 projection;

void main()
{
vs_tex_coords = vertex.zw;
gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
}

以及片段着色器:

#version 330 core

in vec2 vs_tex_coords;

out vec4 fs_color;

uniform sampler2D image;
uniform vec3 sprite_color;

void main()
{
fs_color = vec4(sprite_color, 1.0) * texture(image, vs_tex_coords);
}

我的问题是,如果我不绑定(bind)纹理,它只会显示一个黑色 Sprite 。我认为问题在于我的片段着色器中的纹理函数返回 0,并搞砸了所有公式。

有没有办法知道sampler2D是否未初始化或为空,并只返回sprite_color?

最佳答案

采样器不能为“空”。有效的纹理必须绑定(bind)到每个采样器引用的纹理单元,以便渲染具有明确定义的行为。

但这并不意味着您必须从绑定(bind)在那里的纹理读取。使用 uniform 值来告诉着色器是否从纹理读取是完全有效的。

但是您仍然必须在那里绑定(bind)一个简单的 1x1 纹理。事实上,您可以在采样器上使用textureSize;如果它是 1x1 纹理,则不必费心读取它。请注意,这可能比使用uniform慢。

关于opengl - 检查sampler2D是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42238177/

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