我写使用Qt渲染引擎和我遇到了问题与纹理我的模型传递一个Qt的QImage到GLSL纹理采样
我有一个非常简单的着色器来测试纹理: 顶点着色器:
Attribute vec4 Vertex;
Attribute vec2 texcoords;
uniform mat4 mvp;
varying vec2 outTexture;
void main() {
gl_Position = mvp * Vertex;
outTexture = texcoords;
}
和片段着色器:
uniform sampler2D tex;
varying vec2 outTexture;
void main() {
vec4 color = texture2D(tex, outTexture);
gl_FragColor = color;
}
我通过我的纹理坐标着色器正确 我的问题是有彬定义一个QImage并将其发送到其纹理制服。
我使用下面的代码到纹理绑定:
const QString& filename;
GLuint m_texture;
QImage image(filename);
image = image.convertToFormat(QImage::Format_ARGB32);
glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);
glTexParameteri(GL_TEXTURE2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image.width(), image.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, image.bits());
glGenerateMipmap(GL_TEXTURE2D);
glEnable(GL_TEXTURE_2D);
着色器的作品,我可以通过一个统一的矩阵和属性到顶点和纹理坐标,但是当我尝试发送均匀纹理相同的方式,例如:
effect->setUniformValue(effect->uniformLocation("tex", texture->m_texture));
与“访问冲突读取位置”的错误与glGetError()返回“无效enumerant”
程序崩溃3210有趣的是,当我尝试运行程序而不尝试将纹理发送到采样器时,纹理实际上出现在模型上。这让我想到我绑定它的方式与传统纹理处理有关,纹理绑定到由着色器拾取的特定纹理地址。这不是我想要的效果,因为我希望程序员能够在绘制时明确说明应该传递给制服的纹理(就像其他制服一样)
如何将纹理传递给它采样器,绑定纹理时需要更改什么?
绑定纹理的实际代码是什么样的?我们在这里看到的是你的包装代码。什么是你的OpenGL代码? –