gpt4 book ai didi

c++ - glTexSubImage 导致黑色纹理,而 glTexImage 工作正常

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:41 27 4
gpt4 key购买 nike

当我使用 glTexImage2D 绑定(bind)我的图像时,它呈现得很好。

首先是片段着色器中的代码:

uniform sampler2D tex;
in vec2 tex_coord;
// main:
fragment_out = mix(
texture(tex, tex_coord),
vec4(tex_coord.x, tex_coord.y, 0.0, 1.0),
0.5
);

使用这段代码,它绘制图像:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 
0, GL_RGBA, GL_UNSIGNED_BYTE, image);

working fine

但如果我通过 glTexSubImage2D 绑定(bind)它,纹理将被绘制成黑色。

glTexStorage2D(GL_TEXTURE_2D,
1,
GL_RGBA,
width, height);
glTexSubImage2D(GL_TEXTURE_2D,
0,
0, 0,
width, height,
GL_RGBA,
GL_UNSIGNED_BYTE,
image);

not working at all

当我在第二个代码中将 GL_RGBA 替换为 GL_RGBA8GL_RGBA16 时,渲染会失真。

distorted

这是整个纹理加载和绑定(bind)代码:

GLuint texture; 
glGenTextures(1, &texture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
int width, height;
unsigned char *image = SOIL_load_image(Resource::getPath("Images/2hehwdv.jpg").c_str(), &width, &height, 0, SOIL_LOAD_RGBA);
std::cout << SOIL_last_result() << std::endl;
std::cout << width << "x" << height << std::endl;
glTexStorage2D(GL_TEXTURE_2D,
1,
GL_RGBA,
width, height);
glTexSubImage2D(GL_TEXTURE_2D,
0,
0, 0,
width, height,
GL_RGBA,
GL_UNSIGNED_BYTE,
image);

//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);

有人可以向我解释这种行为吗?

最佳答案

glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA, width, height );
^^^^^^^ not sized

GL_RGBA 是一种未调整大小的格式。

glTexStorage2D()internalFormat 参数必须 传递sized internal format .

glTexStorage2D() 之后的 glGetError() 调用 would have returned GL_INVALID_ENUM:

GL_INVALID_ENUM is generated if internalformat is not a valid sized internal format.

尝试使用 Table 1 中的大小格式像 GL_RGBA8

关于c++ - glTexSubImage 导致黑色纹理,而 glTexImage 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900685/

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