【填坑】glGenTextures 创建纹理失败,创建的纹理层为ID为0。initializeOpenGLFunctions 执行报错。

 

      在QT使用OpenGL开发时发现glGenTexture无法创建出纹理层,执行结果如下,想到在Android 开发中 UI相关操作只能在UI线程中操作突然想到会不会是在子线程执行操作的原因,经过调整代码发现确实是不能在子线程中创建。

     另外如果把OpenGL的初始化函数initializeOpenGLFunctions 放在子线程中会出现报错的情况,还有如果把glDrawArrays放在子线程中操作也是无法绘制出图像。

    总结,关于OpenGL的操作只能在UI线程操作,否则就会出现以上提到的三个典型错误。

好的,我可以帮你解决这个问题。以下是一个简单的示例代码,它创建了两个纹理并将它们存储在一个数组中: ```C++ GLuint textures[2]; // 定义一个数组来存储纹理 // 创建第一个纹理 glGenTextures(1, &textures[0]); glBindTexture(GL_TEXTURE_2D, textures[0]); // 设置纹理参数,例如缩小和放大过滤器 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 加载纹理图像并将其传递给OpenGL // 例如使用SOIL库加载纹理图像 int width, height; unsigned char* image = SOIL_load_image("texture1.png", &width, &height, 0, SOIL_LOAD_RGB); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); SOIL_free_image_data(image); glBindTexture(GL_TEXTURE_2D, 0); // 创建第二个纹理 glGenTextures(1, &textures[1]); glBindTexture(GL_TEXTURE_2D, textures[1]); // 设置纹理参数,例如缩小和放大过滤器 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 加载纹理图像并将其传递给OpenGL // 例如使用SOIL库加载纹理图像 image = SOIL_load_image("texture2.png", &width, &height, 0, SOIL_LOAD_RGB); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); SOIL_free_image_data(image); glBindTexture(GL_TEXTURE_2D, 0); ``` 这段代码使用OpenGL库和SOIL库来创建和加载纹理。你需要将纹理图像文件放置在正确的位置并相应地调用SOIL库函数来加载它们。在此示例中,我们使用了GL_TEXTURE_2D纹理目标,但你也可以使用其他目标,例如GL_TEXTURE_CUBE_MAP来创建立方体贴图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值