Qt 4.7 - glTexSubImage2D returns GL_INVALID_OPERATION
Qt 4.7 - glTexSubImage2D returns GL_INVALID_OPERATION
我在Qt 4.7.2中使用QGLWidget通过OpenGL绘制自己的图片。我使用 OpenGL 是因为我想快速扩展我的图像并减少 CPU 使用率。
为此,我有三种方法。一个用于初始化 OpenGL 环境,一个用于从不同的线程更新我的图像数据,另一个用于绘制图像本身。
问题是在我的updateImage方法中,glTexSubImage2D((的调用返回GL_INVALID_OPERATION错误。它试图用gDEBugger调试它,但只得到这个错误。如果我查看程序的上下文 1,我只看到大小为 0x0 的纹理,在调用 glTexSubImage2D((;
初始化 OpenGL
void Class::OpenGLInit(void){
QGLContext* context = const_cast<QGLContext *>(QGLContext::currentContext());
if (!context)
{
qDebug() << "Can not get current OpenGL context";
return;
}
context->makeCurrent();
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D, texture);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_BASE_LEVEL,0);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_LEVEL,0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
glBindTexture(GL_TEXTURE_2D,0);
}
更新映像
void Class::updateImage(void){
dataPointer = (u_int8_t*) malloc(1024*1024*4);
memcpy(dataPointer,externalBuffer,1024*1024*4);
glBindTexture(GL_TEXTURE_2D, texture);
glTexSubImage2D(GL_TEXTURE_2D,0, 0,0,1024,1024,GL_RGBA,GL_UNSIGNED_INT_8_8_8_8,dataPointer);
//This line returns a GL_INVALID_OPERATION
}
绘制图像
void Class::paintEvent(QPaintEvent *event){
QPainter painter(this);
painter.beginNativePainting();
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//Draw black screen
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
//Draw Picture
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1024, 0);
glVertex2f(1024, 0);
glTexCoord2f(1024, 1024);
glVertex2f(1024,1024);
glTexCoord2f(0, 1024);
glVertex2f(0, 1024);
glEnd();
glDisable(GL_TEXTURE_2D);
painter.endNativePainting();
}
我只是注意到你提到了"从另一个线程更新图像",对吧?您的错误可能是由于调用"updateImage"的线程中缺少 OGL 上下文。请尝试在与 OGL 上下文相同的线程中调用它 init 并使当前。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- Visual Studio 19-17 库兼容性根据 GL 标志
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- C++ "Invalid use of 'this' in non-member function" ,
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 将"Compass"与相机旋转隔离开GL
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 如何在Arduino程序中解决"invalid operands of types"?
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 访问函数变体时"Invalid conversion"错误
- glBindFramebuffer 在使用 GL_DRAW_FRAMEBUFFER 目标时会导致 "invalid operation" GL 错误