warning

monkeychendeng 2003-10-11 04:43:07
question1:
我在调试OPENGL程序时出现如下问题:
warning :can't create a new surface out of video memory
question2:
我每调用一次纹理和TIMER事件内存总是不断上长,没有回落的迹象,即使我KILLTIMER了,也不见内存下去,如何解决。

...全文
61 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
monkeychendeng 2003-10-12
  • 打赏
  • 举报
回复
如果我的CPU占有率是100%如何解决这个问题呢
monkeychendeng 2003-10-12
  • 打赏
  • 举报
回复
关于第二个问题
代码就是这样
AUX_RGBImageRec * CTexture::LoadBmp(char *filename)//载入位图文件图象的宽度和高度必须是2的幂次方
{
FILE *file =NULL;//文件句柄
if(!filename)//如果文件名没有返回空
return NULL;
file=fopen(filename,"r");//尝试打开一个文件,如果能打开
if(file)
{
fclose(file);//关闭该文件
return auxDIBImageLoad(filename);//装入位图并返回指针
}
return NULL;//失败返回空值
}

GLuint CTexture::LoadGLTexture(char *filename)
{
AUX_RGBImageRec *pImage=NULL;//常用的保存纹理的方法,纹理空间
GLuint m_ntexture[1];//纹理的ID
memset(m_ntexture,0,sizeof(void*)*1);
pImage=LoadBmp(filename);//装入位图返回指针
if(pImage!=NULL && pImage->data!=NULL)//如果纹理存在
{
glGenTextures(1,&m_ntexture[0]);//生成纹理
glBindTexture(GL_TEXTURE_2D/*或者是GL_TEXTUREN_1D*/,m_ntexture[0]) ;
glTexImage2D(GL_TEXTURE_2D,0,3,pImage->sizeX,pImage->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,pImage->data);
//下面两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )
//或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时OpenGL采用的滤波方式。
//通常这两种情况下我都采用 GL_LINEAR 。这使得纹理从很远处到离屏幕很近时都平滑显示。
//使用 GL_LINEAR 需要CPU和显卡做更多的运算。如果您的机器很慢,
//您也许应该采用 GL_NEAREST 。过滤的纹理在放大的时候,
//看起来斑驳的很『译者注:马赛克啦』。您也可以结合这两种滤波方式。
//在近处时使用 GL_LINEAR ,远处时 GL_NEAREST 。
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); // 线形滤波
// free(pImage->data);
// free(pImage);
}
if(pImage)
{
if(pImage->data)
{
free(pImage->data);
}
free(pImage);
}
// return m_ntexture[0];
return 0;
}
请问问题出在哪里
monkeychendeng 2003-10-12
  • 打赏
  • 举报
回复
我没有用WINMAIN不好意思
有循环CPU一定是100%吗,好象未必。
mct1025 2003-10-12
  • 打赏
  • 举报
回复
像是nehe教程中的设置纹理代码

在WinMain中,有一个while循环
就是CPU占有率是100%的原因
monkeychendeng 2003-10-11
  • 打赏
  • 举报
回复
第一个问题:我的内存很大,没释放也没有关系,我查看了内存,在出错时我的内存还有300M可用怎么解释。
第二个问题:请问何谓动态创建,是不是有好多NEW呀,我的程序的NEW只有一个。OPENGL中可以选择内存模式和CPU模式,如果选择CPU模式,那么CPU占有率是100%如果用内存就是一直增加,请问有谁遇到过同样的问题。
一定要贴代码吗?
不会我一个人有那样的问题吧
苦::::::::::::::
lsl7909 2003-10-11
  • 打赏
  • 举报
回复
第一个问题:可能是代码有问题吧,没释放内存
第二个问题:动态创建的空间太多了吧
mct1025 2003-10-11
  • 打赏
  • 举报
回复
把纹理设置的代码贴出来,看看
wangzi163 2003-10-11
  • 打赏
  • 举报
回复
程序没有释放内存吧。

19,468

社区成员

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

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