-2
:はなぜ投げglBindTexture()であるGL_INVALID_OPERATIONこれは私のテクスチャクラスは次のようになります
Texture* Texture::load(std::string filename) {
static std::unordered_map<std::string, Texture*> loadedTextures;
//If we already have the texture loaded, don't load it again
if(loadedTextures.find(filename) != loadedTextures.end()) {
return loadedTextures[filename];
}
Texture* newTex = new Texture();
//Load our texture with ImageMagick
try {
newTex->m_Image.read(filename);
newTex->m_Image.write(&newTex->m_Blob, "RGBA");
} catch(Magick::Error& err) {
std::cout << "Could not load texture \"" << filename <<"\": " << err.what() << std::endl;
return nullptr;
}
//set up the texture with OpenGL
glGenTextures(1, &newTex->m_textureObj);
glBindTexture(GL_TEXTURE_2D, newTex->m_textureObj);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, newTex->m_Image.columns(), newTex->m_Image.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, newTex->m_Blob.data());
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
//Now add it onto our list
loadedTextures[filename] = newTex;
return newTex;
}
void Texture::bind() {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_textureObj); //ERROR HERE
}
そして、何私のレンダリング機能は、次のようになります。私はtexture-を呼び出す
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
//Now send vertices, uvs, and normals
glBindBuffer(GL_ARRAY_BUFFER, VB);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void *) offsetof(Vertex, uv));
glVertexAttribPointer(2, 3, GL_FLOAT, GL_TRUE, sizeof(Vertex), (void *) offsetof(Vertex, normal));
//Send all our face information
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IB);
//If we have a texture, use it
if(ctx.texture != nullptr) {
ctx.texture->bind();
}
//Now draw everything
glDrawElements(GL_TRIANGLES, ctx.model->_indices.size(), GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
>バインド() 、OpenGLは私にこのエラーを与えます:
Error initializing OpenGL! 1282, GL_INVALID_OPERATION: The specified operation is not allowed in the current state.
そして、私のフラグメントシェーダはテクスチャサンプラーからちょうど黒くなっています。
私はthis tutorialをフォローしようとしていましたが、どこが間違っているのか分かりません。誰が私にこのエラーが出ているのか教えてもらえますか?
有効なGLコンテキストがバインドされている間にこれを呼び出してもよろしいですか?また、その特定の呼び出しからエラーが特定されたことをあなたに確かめることはできますか? – derhass
'bind()'呼び出しで 'm_textureObj'の値はどれですか? – Ripi2
私はそれをglGetError()のチェックで囲んだので、その呼び出しからエラーが発生していることを知っています。また、 'ctx.texture-> bind()'の呼び出しをコメントアウトするだけで、すべてうまく動作します(テクスチャはありません)。 –