我寫使用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代碼? –