gpt4 book ai didi

c++ - GLSL 150 GL 3.2 黑色纹理

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:09 25 4
gpt4 key购买 nike

我无法让我的纹理工作,整个屏幕都是黑色的。这是我加载图像的代码,我使用 lodepng:

std::vector<unsigned char> image;
unsigned int error = lodepng::decode(image, w, h, filename);
GLuint texture_id;
glGenTextures(1, &texture_id);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, &image[0]);
glBindTexture(GL_TEXTURE_2D, 0);

对于渲染我这样做:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id_from_above); //texture_id were checked, seemed fine
glUniform1i(shader_sampler_loc, GL_TEXTURE0);

我的片段着色器(修整版)基本上是这样做的:

uniform sampler2D sampler;
void main(void) {
gl_FragColor = texture2D(sampler, uv_coord);
}

UV 坐标很好,来自 lodepng 的 vector 包含许多元素,并且没有返回错误。为了进一步解决问题,我尝试了这个:

    gl_FragColor = texture2D(sampler, uv_coord)*0.5 + vec4(1, 1, 1, 1)*0.5f

查看整个分配是否以某种方式被跳过或纹理实际上是黑色的。结果我仍然只有一个黑色的窗口。但是通过删除

glActiveTexture(GL_TEXTURE0); //x2, and
glUniform1i(sampler_loc, GL_TEXTURE0);

我所有的对象都是灰色的。我不知道出了什么问题。

顺便说一句:它在迁移到 OpenGL 3.2(之前有 2.1)之前工作正常,所有图像都是 ^2。我使用 CORE_PROFILE && FORWARD_COMPAT。

顶点着色器:

#version 150

//VBO vertex attributes
attribute vec3 pos;
attribute vec2 tex;
attribute vec3 normal;

varying vec2 uv_coord;

uniform mat4 mvp_mat;

void main(void) {
gl_Position = mvp_mat * vec4(pos, 1);
uv_coord = tex;
}

最佳答案

glUniform1i(shader_sampler_loc, GL_TEXTURE0);

. . .应该是

glUniform1i(shader_sampler_loc, 0);

等等

关于c++ - GLSL 150 GL 3.2 黑色纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564115/

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