在跟着Learn OpenGL教程学习纹理部分时,大家或许会加载一张自己喜欢的图片作为纹理,但加载某些图片时会报以下错误:

读取位置XXX时发生访问冲突。

  这个错误通常出现在以下位置:

unsigned char* data = stbi_load("demo.jpg", &image_width, &image_height, &image_channel, 0);
if (data) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
}

  IDE会在glGenerateMipmap(GL_TEXTURE_2D)处报错,但这个错误一般是由glTexImage2D引起的。首先检查下是不是通道数搞错了:比如说加载的是jpg图片但在glTexImage2D中使用的是GL_RGBA.

  如果没有搞错,那么报错的原因很有可能是这个:

    加载的图片为jpg, 但它的宽度不是4的倍数!!!

  关于上述错误的描述可参考此处,与GPU的数据对齐有关。(我还以为是stb_image库的问题,de了一个小时的bug,饭都没吃)

  比较简单的解决方法是:把图片的宽度或高度缩放为4的倍数;或者把jpg图片转为png格式的图片, 加载png图片作为纹理(因为png图片具有R,G,B,A这4个通道,无论png图片的大小如何,图片的总数据量image_width * image_height * 4一定是4的倍数).

  如果使用magick将jpg转为png, 直接执行以下命令:

magick convert demo.jpg demo.png

  得到的png图片还是3个通道,因为png图片也有24位深度的(参见此处)。使用如下命令:

magick convert demo.jpg png32:demo.png

  就可以得到4通道的png图片了。

glTexImage2D: 读取位置XXX时发生访问冲突的更多相关文章

  1. 0xC0000005: 读取位置 0x00000000 时发生访问冲突

    遇见这种问题一般都是空指针,即:指针里没有赋值~ 如果你对null 进行操作就会产生空指针异常 Object obj = new Object(); 你要知道 obj是一个Object指针变量,指向O ...

  2. 启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

    此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { publi ...

  3. C++ “读取位置 0x****** 时发生访问冲突”的可能原因

    转自:http://shansun123.iteye.com/blog/680066 这种错误的意思一般是指访问了不属于自己的内存空间,出现这种错误有几种原因: 1.给一个数组分配了比较小的内存空间, ...

  4. xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。

    xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突

  5. 读取位置 0xcccccccc 时发生访问冲突

    XXXXX.exe 中的 0x1004eec2 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突 DEBUG模式下总是出现此错误,改为Release模式,错 ...

  6. vc++,MFC,组合框控件设置时0xC0000005: 读取位置 0x00000020 时发生访问冲突

    511.exe 中的 0x78bb5dec (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 _AFXWIN_INLINE int ...

  7. 调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

    今天在编写一系列新增需求代码后,开始调试代码 发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突. 上个版本数代码 ...

  8. duilib菜单开发遇见“0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突”

    我的程序是这样一个逻辑. 首先创建用户列表,点击列表项弹出菜单,点击菜单上“设备选项”,弹出设备列表,上面显示这个用户拥有的设备. 菜单的创建参考了这为博主的教程:http://www.cnblogs ...

  9. 【MFC】0xC0000005: 读取位置 0x00000020 时发生访问冲突

    原因:使用GetDlgItem()函数时需要先判断指针然后才可以使用. 错误代码: //重新建一个线程,查询帧同步 DWORD WINAPI SCsync_Thread(LPVOID Lparam) ...

  10. 程序运行时 0xC0000005: 读取位置 0x00000000 时发生访问冲突 ,可能是 com 组件引入各种问题

    在使用com组件事,可能引入很多不是问题的问题,比如CString 定义出运行时出错等等,这些问题解决的办法就是初始化组件 然后释放组件, 在使用组件时,如果仅仅用在按钮事件或者别的mfc 对话框类里 ...

随机推荐

  1. L2-010. 排座位(种类并查集)

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...

  2. echarts 饼图 点击事件

    https://www.cnblogs.com/wcnwcn/p/11170279.html

  3. .NET 5 开发WPF - 美食应用登录UI设计

    Demo演示: 你的时间宝贵,不想看啰嗦的文字,可直接拉到文末下载源码! 1. 新建项目 站长开发环境: VS 2019企业版 16.70 .NET 5 Preview 5 .NET 5 WPF 项目 ...

  4. 【MicroPython】要是找不到某个函数的定义,可能是做了宏转换

    转换宏 map查找接口

  5. 使用markdown语法做笔记,相比txt多了很多样式

  6. js jquery - 获取元素(父节点,子节点,兄弟节点),元素筛选 (转载)

    一 ,  js 获取元素(父节点,子节点,兄弟节点) var test = document.getElementById("test"); var parent = test.p ...

  7. Oracle索引&约束

    Oracle索引&约束 1索引的原理 索引是一种允许直接访问数据表某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间(TABLESPACE)中 索引记录 ...

  8. 【Kafka系列】(二)Kafka的基本使用

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 文章更新计划 系列文章地址 Kafka 线上集群部署方案怎么做 ...

  9. 【转帖】一道面试题:JVM老年代空间担保机制

    面试问题 昨天面试的时候,面试官问的问题: 什么是老年代空间担保机制?担保的过程是什么? 老年代空间担保机制是谁给谁担保? 为什么要有老年代空间担保机制?或者说空间担保机制的目的是什么? 如果没有老年 ...

  10. [转帖]BF16 与 FP16 在模型上哪个精度更高呢

    https://zhuanlan.zhihu.com/p/449345588 BF16 是对FP32单精度浮点数截断数据,即用8bit 表示指数,7bit 表示小数. FP16半精度浮点数,用5bit ...