游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6615|回复: 11

OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原因?

[复制链接]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-5-21 19:21:00 | 显示全部楼层 |阅读模式
我写的Demo,在我的装有ATI卡的笔记本上都能运行,但是拿到带NVIDIA卡的机器上就卡的不能用,FPS只有一帧。
Demo里运用了GLSL(仅仅是用来融合地形上的多层细节纹理)、固定管线的多层纹理、过采样。绘制几何体时仅仅使用了glVertexs和绘制列表。

用来测试的NVIDIA卡都比我的ATI卡性能要好的多,不知道是什么原因导致运行超慢呢? NVIDIA卡上对OpenGL有什么地方不支持吗? 我是使用glew库来使用扩展函数的,其中使用的所有扩展函数都是ARB的,或者是OpenGL2.0中加入到核心函数的函数(即去掉了ARB标记)。

不过我在Demo中使用了GL_TEXTURE0 至 GL_TEXTURE5 共6个纹理通道, 不知道和这个有没有关系。

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2008-5-22 00:14:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

没装显卡驱动吧

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-22 18:21:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

找了个NVIDIA卡的机器试了一下,原因大致找到了,是向屏幕上渲染文字的函数导致的,只要屏蔽掉这个函数,速度就正常了,这个函数是我自己用freetype封装的,里面调用了几个屏幕光栅化的OpenGL函数,应该是这几个函数里面,某一个或几个NVIDIA卡硬件不支持,被用软件给实现的。具体是那个由于没时间,还没来的及查找。我就晕了。难道OpenGL真的要走到尽头了?1.5版之前就存在的函数竟然都不被支持。 我太阳!

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2008-5-23 00:35:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

太正常了,还有1.0的API没有被实现的呢!

0

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2008-5-23 10:41:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

N卡对OGL的支持向来都是好于A卡的。

把你怀疑有问题的代码贴出来看看好了。

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-23 22:42:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原


  1. //用GL渲染文字, x、y为文字的屏幕的光栅位置;xspacing为文字间距
  2. void CHKText::RenderTextByGL(int x, int y, int xspacing, int yspacing, int color, int fontSize, wchar_t* text)
  3. {
  4.         if(fontSize > 0)
  5.         {
  6.                 //如果字体大小改变
  7.                 if(fontSize != this->size)
  8.                 {
  9.                         //销毁当前文字模型
  10.                         this->Destory();
  11.                         //改变字体大小
  12.                         if(this->ChangeSize(fontSize))
  13.                         {
  14.                                 //创建新的文字模型
  15.                                 this->CreateText(text);
  16.                         }
  17.                 }
  18.         }
  19.                
  20.         wchar_t* p = text;
  21.         int row = 0;
  22.         int span = 0;
  23.         WORDINFO* word = NULL;

  24.         //获取文字颜色
  25.         float rs = (color & 0x000000FF) * 0.003922f;
  26.         float gs = ((color & 0x0000FF00)>>8) * 0.003922f;
  27.         float bs = ((color & 0x00FF0000)>>16) * 0.003922f;
  28.         float as = ((color & 0xFF000000)>>24) * 0.003922f;

  29.         glPushAttrib(GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT | GL_PIXEL_MODE_BIT);
  30.         
  31.         //设置像素存储模式
  32.         glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

  33.         //设置光栅像素的颜色及不透明度
  34.         glPixelTransferf(GL_RED_SCALE, rs);
  35.         glPixelTransferf(GL_GREEN_SCALE, gs);
  36.         glPixelTransferf(GL_BLUE_SCALE, bs);
  37.         glPixelTransferf(GL_ALPHA_SCALE, as);
  38.        
  39.         //开启混合并设置混合方式
  40.         glEnable(GL_BLEND);
  41.         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  42.         //遍历文字数组
  43.         while( p && (*p != (wchar_t)'\0') )
  44.         {
  45.                //通过文字的unicode码获取文字的模型信息
  46.                 word = GetWord(*p);
  47.                 //如果该文字存在
  48.                 if(word != NULL)
  49.                 {
  50.                         //设置光栅位置并绘制文字
  51.                         glWindowPos2i(x+span, y-word->top);
  52.                         span += word->left + xspacing;
  53.                         glDrawPixels(word->width, word->height, GL_RGBA, GL_UNSIGNED_BYTE, word->bitmap);
  54.                 }

  55.                 p++;
  56.         }

  57.         glPopAttrib();
  58. } //end RenderTextByGL

复制代码

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-23 22:59:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

以上就是文字渲染类中每帧都要调用的绘制部分, 改函数中调用的其他函数里都不包含OpenGL的API.

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2008-5-24 09:01:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

glDrawPixels会让3D程序跑的更慢,所以很多显卡直接毙掉这个功能

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-5-24 09:12:00 | 显示全部楼层

Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原

glDrawPixels简直就是一垃圾函数。。。

1

主题

103

帖子

119

积分

注册会员

Rank: 2

积分
119
发表于 2008-5-24 12:08:00 | 显示全部楼层

Re: Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什

hyzboy: Re:OpenGL程序在ATI卡上运行很快,在NVIDIA卡上超慢,什么原因?

glDrawPixels会让3D程序跑的更慢,所以很多显卡直接毙掉这个功能

你懂什么? 这个函数在早期SGI工作站上工作的很好,那是因为硬件架构和PC完全不同。我现在就有台早期SGI的工作站,用这个函数更本不影响效率。
你这种只做过PC平台开发的晚辈不要乱说。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 10:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表