查看: 6409|回复: 7

请教一个OpenGL多重采样的问题

[复制链接]

该用户从未签到

发表于 2009-10-15 16:42:50 | 显示全部楼层 |阅读模式
在学习OpenGL红宝书多重采样去锯齿的时候碰到个问题:

在尝试他的示例的时候,发现glGetIntegerv (GL_SAMPLE_BUFFERS_ARB, &buf);和glGetIntegerv (GL_SAMPLES_ARB, &sbuf);都是返回0,那就是说我的显卡不支持多重采样这个功能。
但我的显卡是GeForce7300LE的,而且用glew的一个工具看,我的显卡是支持到OpenGL2.1.2的,而且也支持GL_ARB_multisample的,这个是什么原因阿?

附件里面是OpenGL示例的源码,以及glew对我显卡的一个类似功能监测的结果。

我是在VS2008 VC++工程里面试的,这个会有影响吗?

OpenGL.rar

14 KB, 下载次数: 195, 下载积分: 威望 1

该用户从未签到

发表于 2009-10-15 17:07:47 | 显示全部楼层
我没有看您的代码。不过我知道glGetIntegerv是不能检测硬件能力的,它只是获取当前渲染设备上下文(HGLRC)的信息而已,您的渲染设备在wglChoosePixelFormatARB时没有指定多重采样的话,当然不会返回有效值。

在wglChoosePixelFormatARB的传入参数列表中加入WGL_SAMPLES_ARB的内容就可以了;这与您的IDE环境无关

该用户从未签到

 楼主| 发表于 2009-10-16 08:51:38 | 显示全部楼层
我是照例子上的样子写的代码。
int main(int argc, char** argv)
{
   GLint buf, sbuf;
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);
   glutInitWindowSize (600, 300);
   glutCreateWindow (argv[0]);
   glewInit();
   glGetIntegerv (GL_SAMPLE_BUFFERS_ARB, &buf);
   printf ("number of sample buffers is %d\n", buf);
   glGetIntegerv (GL_SAMPLES_ARB, &sbuf);
   printf ("number of samples is %d\n", sbuf);
   glutMainLoop();
   return 0;
}
这样创建的窗口是不支持多重采样的阿?

该用户从未签到

发表于 2009-10-16 12:22:33 | 显示全部楼层
我不知道glut是怎么封装的,它只是一个独立的第三方库而已,我不怎么用;也许它还有一些可以调节采样数值的函数?

该用户从未签到

 楼主| 发表于 2009-10-16 14:20:18 | 显示全部楼层
非常感谢array的回答,还想问一个可能很傻的问题,因为刚开始学习OpenGL,很多资料上都说在windows上只有1.1版本的OpenGL,要想用更高版本的OpenGL就要用扩展机制,比如要加glext.h等等,但OSG里面好像并没有这些头文件,那是如何支持高版本OpenGL的特性的?

该用户从未签到

发表于 2009-10-17 00:07:36 | 显示全部楼层
所谓的“windows上只有1.1版本OpenGL”的说法,非常不准确——其实只不过M$没有直接提供包含了最新函数声明的头文件而已,并不是真的不支持。
无论您使用glext.h来添加声明信息,还是直接从动态库中取得函数入口指针,都可以应用到最新的OpenGL特性。OSG是采用后者的做法,即直接从opengl32.dll中获取函数的入口指针。

该用户从未签到

发表于 2012-10-31 11:56:46 | 显示全部楼层
在osg/GLExtensions.cpp文件之中有这么几行:

  1. void* osg::getGLExtensionFuncPtr(const char *funcName)
  2. {
  3. #if defined(WIN32)

  4.     return (void*)wglGetProcAddress(funcName);
  5. ...
  6. }
复制代码
从这一段代码可以充分地说明OSG中的函数指针是通过wglGetProcAddress()函数直接获取的...

该用户从未签到

发表于 2012-10-31 12:42:44 | 显示全部楼层
the_mercury 发表于 2012-10-31 11:56
在osg/GLExtensions.cpp文件之中有这么几行:从这一段代码可以充分地说明OSG中的函数指针是通过wglGetProcA ...

您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表