[求助]MFC+OpenGL读位图创建纹理: MDI中glGenTextures失败, 改成SDI后调用glTexImage2D出错

fks0123 2007-09-04 05:23:26
MFC + OpenGL 程序, 欲读取位图创建纹理.

最初用的MDI, 用glGenTextures获取可用的纹理对象名称失败. 在网上搜到说要加上wglMakeCurrent或用单文档. 我的hDC和hGLRC初始化后就一直没释放啊, 并且加上wglMakeCurrent也不行. (我把opengl做成了一个类, hDC与hGLRC是它的属性, 然后在视图中定了一个opengl类的对象.)

然后我就改成SDI. 这下好了, glGenTextures能返回正确的纹理对象名称了. 但新的问题来了: 运行时在glTexImage2D处出现了错误: Unhandled exception at 0x690d139d in Load3ds.exe: 0xC0000005: Access violateion reading location 0x11767000.

麻烦各位帮帮忙.
我用的是vc2005.
...全文
727 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fks0123 2007-09-05
  • 打赏
  • 举报
回复
改成单文档后, 分配纹理对象名称成功了; 但用glTexImage2D指定纹理时出错.

现在已经解决了, 出错的原因是我使用的BMP文件宽高不是2的整数次幂.
jhs1982419 2007-09-05
  • 打赏
  • 举报
回复
你的代码部分是没有问题的,我觉得也可能是你的设置错误,一般能用单文档做的最好不要用多文档做,MFC本身的体系结构决定了用多文档很容易出现你想不到的结果,原因也很难得找出,而且一般的问题基本都可以用单文档解决的

建议你用单文档改到试下看怎么样。
fks0123 2007-09-04
  • 打赏
  • 举报
回复
下面是源代码:
--------------------------------------------------------------
glGenTextures(nTexCount, &TexName); //TexName里存放纹理对象的名字, [mdi时分配失败]

int i = 0;
BYTE* texImage = 0; //纹理数据数组

//read pic and create tex
loadPic* lp = new loadPic(); //loadPic是一个用于读取位图的对象
long width, height; //width, height分别存放为图宽高
lp->getPicSize((*it_tex)->sFileName, &width, &height); //获取位图尺寸

delete []texImage;
texImage = new BYTE[height*width*3]; //重新分配纹理数组内存

lp->loadBmp24((*it_tex)->sFileName, texImage); //载入位图数据质纹理数组

//bind and set
glBindTexture(GL_TEXTURE_2D, *(pTexNames + i));
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_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texImage); //制定纹理, [sdi时出错.]

glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧