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.
我用的是vc2005.
--------------------------------------------------------------
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);