gpt4 book ai didi

Opengl 几何着色器整数纹理获取失败

转载 作者:行者123 更新时间:2023-12-04 20:17:57 25 4
gpt4 key购买 nike

我正在尝试从在 GeForce 330m 上运行的几何着色器中采样整数纹理。它似乎返回了其他值而不是我加载到纹理中。我使用此代码(基本上)来创建和加载纹理:

glGenTextures( 1, &textureId );
glBindTexture( GL_TEXTURE_2D, textureId );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture( GL_TEXTURE_2D, 0);
glBindTexture( GL_TEXTURE_2D, textureId );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_INT, <some 0-initialized large enough buffer>);
glBindTexture( GL_TEXTURE_2D, 0);
glBindTexture( GL_TEXTURE_2D, textureId );
int data[] = { 3, 0, 36, 400 };
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 3, 1, 1, GL_RGBA, GL_INT, data);
glBindTexture( GL_TEXTURE_2D, 0);

这个想法是将特定像素的 w 值设置为 400。然后我在我的几何着色器中使用它:
#version 330
#extension GL_EXT_gpu_shader4 : require
uniform isampler2D models;

void main()
{
ivec4 modelstats4 = texelFetch2D(models, ivec2(0, 3), 0);
// ivec4 modelstats4 = ivec4(3, 0, 36, 400);
if (modelstats4.w > height) {
// emit something
}
}

使用应该相等的注释掉的固定值会导致发出一些东西(即,一分)。如果我使用实际的 texel 提取,它不会返回任何内容。我知道的所有可能会产生影响的值现在都是硬编码的,所以我不知道为什么这不起作用。这不是完整的代码(OO 设置,需要查看很多内容),但这些是具有适用数据的相关 OpenGL 调用。

最佳答案

通过自由洒水 glGetErrors 找到了解决方案。错误出现在此代码示例中的每个 glTexImage 中 - 显然,对于整数纹理,您不能使用 GL_RGBA 而是 GL_RGBA_INTEGER。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA_INTEGER, GL_INT, data);

这现在有效。纹理提取也可以。

关于Opengl 几何着色器整数纹理获取失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058641/

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