C OpenGL采样器对象未更新绑定纹理

C OpenGL采样器对象未更新绑定纹理,c,opengl,texture-mapping,C,Opengl,Texture Mapping,我目前正在使用绑定将采样器对象绑定到纹理单元(具体来说是GL_TEXTURE12) glBindSampler(12,采样器) 与纹理自身的设置相比,初始设置非常明显。但是当我用 glSamplerParameteri(采样器、GLU纹理过滤器、过滤器) 绑定到纹理单元的纹理过滤器与以前一样,从任何角度看都没有明显变化 我已经尝试在参数更改后再次将采样器重新绑定到纹理单元,但我非常确定这不是必需的 我能做些什么来改变这个工作?< P>因为我不能解释为什么这个陈述:我在参数改变之后再次尝试将纹理单

我目前正在使用绑定将采样器对象绑定到纹理单元(具体来说是GL_TEXTURE12)

glBindSampler(12,采样器)

与纹理自身的设置相比,初始设置非常明显。但是当我用

glSamplerParameteri(采样器、GLU纹理过滤器、过滤器)

绑定到纹理单元的纹理过滤器与以前一样,从任何角度看都没有明显变化

我已经尝试在参数更改后再次将采样器重新绑定到纹理单元,但我非常确定这不是必需的


我能做些什么来改变这个工作?

< P>因为我不能解释为什么这个陈述:<强>我在参数改变之后再次尝试将纹理单位重新绑定到取样器,但是我确信这不是必需的。“< /强>在注释中没有意义,考虑下面的C伪代码。< /P>
/* Thin state wrapper */
struct SamplerObject {
  SamplerState sampler_state;
};

/* Subsumes SamplerObject */
struct TextureObject {
  ImageData*   image_data;
  ...
  SamplerState sampler_state;
};

/* Binding point: GL4.x gives you at least 80 of these (16 per-shader stage) */
struct TextureImageUnit {
  TextureObject* bound_texture; /* Default = NULL */
  SamplerObject* bound_sampler; /* Default = NULL */
} TextureUnits [16 * 5];


vec4 texture2D ( GLuint n,
                 vec2   tex_coords )
{
  /* By default, sampler state is sourced from the bound texture object */
  SamplerState* sampler_state = &TextureUnits [n]->bound_texture->sampler_state;

  /* If there is a sampler object bound to texture unit N, use its state instead
       of the sampler state built-in to the bound texture object. */
  if (TextureUnits [n]->bound_sampler != NULL)
    sampler_state = &TextureUnits [n]->bound_sampler->sampler_state;

  ...
}

我认为混淆的根源在于,在GLSL中,用于识别从哪个纹理图像单元采样(以及如何采样)的制服被称为
sampler[…]
。希望这能消除一些混乱,让我们都在同一页上。

您不必将纹理绑定到采样器,它们总是绑定到纹理图像单元。采样器对象唯一改变的是,每当非零采样器对象绑定到纹理图像单元时,它们将采样器状态与纹理对象分离。为了让这一点更清楚一点,
GL_TEXTURE12
是纹理图像单元的名称。。。纹理对象和采样器对象的绑定点。我知道这听起来像是很多迂腐的废话,但你的部分问题可能是对术语的误解。我完全理解。你刚刚告诉了我一大堆我已经知道的无用信息:P不过谢谢,我编辑了这个问题以反映你指出的问题。你能再显示一点代码吗?特别是,将纹理对象绑定到纹理单元12的代码。即使在更新了问题之后,“我已尝试再次将纹理单元重新绑定到采样器[…]”这句话的措辞也令人困惑。如果你发现我的措辞令人困惑,那么我认为你无法帮助我;我想我的意思是说,我把采样器绑定到纹理上了。纹理通过我所有网格的循环绑定到单元,如下所示:
gl::ActiveTexture(gl::TEXTURE12)
gl::BindTexture(gl::TEXTURE_2D,纹理[网格[x]->当前纹理]
那么就不可能将纹理单元绑定到采样器。唯一有意义的是,如果你把GLSL采样器和采样器对象混淆了。我不理解你的论点,除非你将采样器对象绑定到纹理单元,否则它将毫无用处。@CoffeeandCode:这正是我的观点,你不将纹理单元绑定到采样器对象。将采样器对象绑定到纹理单元。我认为伪代码很清楚地说明了这一点:-\n我已经在上面的评论中澄清了这一点:“我想我的意思是说我将采样器绑定到了纹理单元,尽管”@CoffeeandCode:对不起,我不知道你的意思,因为你说的是“到纹理”而不是“到纹理单元”。“纹理”本身通常意味着纹理对象。