You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL使用MS Paint自制纹理触发nvoglv64.dll访问异常如何解决

问题原因

你的代码在调用glTexImage2D时硬编码了源格式为GL_RGBA,但MS Paint默认导出的无透明层PNG图片是3通道(RGB)格式,从谷歌下载的PNG大多自带Alpha通道属于4通道格式,刚好匹配你写死的参数才没有报错。

当你加载Paint生成的3通道图片时,stbi_load返回的像素数据每像素只有3字节,OpenGL却按照每像素4字节读取,直接触发内存越界访问,就抛出了nvoglv64.dll(NVIDIA显卡驱动模块)的访问违规异常,和透明像素的具体取值没有关系。

修复方案

你可以任选以下一种方法解决:

  • 方案1:强制stb_image自动把所有图片转成4通道返回,不需要修改纹理上传参数。把stbi_load的最后一个参数从0改成4即可:
unsigned char* data = stbi_load("res/textures/BlackFrame.png", &width, &height, &numChannels, 4);
  • 方案2:根据读取到的通道数动态指定上传格式:
GLenum format;
if (numChannels == 1)
    format = GL_RED;
else if (numChannels == 3)
    format = GL_RGB;
else if (numChannels == 4)
    format = GL_RGBA;

glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);

额外提示:调用glTexImage2D之前可以加一行glPixelStorei(GL_UNPACK_ALIGNMENT, 1),避免因为图片宽度不是4的倍数导致纹理颜色错位的问题。


内容的提问来源于stack exchange,提问作者Anton Loubman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:15:03