glBindTextures返回GL_INVALID_OPERATION

时间:2014-01-26 21:33:24

标签: opengl bitmap textures

这是一些代码

GLEnum gl_error;
CString sError = "";
gl_error = glGetError(); //clear the error code
glEnd(); // to make sure Im not between glBegin/glEnd pairing

GLuint tex1;
glGenTextures( 1, &tex1 );

gl_error = glGetError();
if(gl_error == GL_INVALID_VALUE){
    sError = "GL Gen Texture failed\r\n"; // << this does NOT get hit
}

glBindTexture( GL_TEXTURE_2D, tex1 );

gl_error = glGetError();
switch(gl_error){
case GL_INVALID_VALUE:
    sError = "GL Bind Texture failed, VALUE\r\n";
    break;
case GL_INVALID_ENUM:
    sError = "GL Bind Texture failed, ENUM\r\n";
    break;
case GL_INVALID_OPERATION:
    sError = "GL Bind Texture failed, OPERATION\r\n"; // <<< this DOES get hit
    break;
}

如果纹理具有维度,则生成GL_INVALID_OPERATION 与目标不匹配。

如果在其间执行glBindTexture,则生成GL_INVALID_OPERATION glBegin的执行和glEnd的相应执行。“

这些是glBindTexture()之后OPERATION错误的原因,或许多参考页面告诉我。 我自己调用glEnd()以确保我没有glBegin()/ glEnd()对。 所以我必须陷入第二个错误,,,我的纹理的维度与目标的维度不匹配,但是我被告知这两个函数都需要创建(glGenTextures)一个独特的纹理并绑定它(glBindTexture)

ALSO:

GLuint tex1, tex2;
glGenTextures( 1, &tex1 );
glGenTextures( 1, &tex2 );
if(tex1 == tex2){
    sError = "GL Get Tecture failed\r\n";
}

我假设tex1和tex2应该是唯一的。但他们不是,我的这些纹理名称的创造可以成为我的问题吗?这些对glGenTexture的调用不返回GL_INVALID_VALUE

2 个答案:

答案 0 :(得分:0)

我甚至在运行main()函数之前尝试运行此代码,因此我的所有OpenGL初始化调用尚未运行。

我本来可以发誓我过去曾尝试过这个,但我肯定会有更多的错误,这可能导致它不会再跑回来。

答案 1 :(得分:0)

我也遇到了同样的问题,glBindTexture()没有用。

我设法修复它在glTexImage2D()

之前设置纹理参数
glGenTextures(1, &texOGL);
glBindTexture(GL_TEXTURE_2D, texOGL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);