suzhoulgj 发表于 2009-10-15 16:42:50

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

在学习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++工程里面试的,这个会有影响吗?

array 发表于 2009-10-15 17:07:47

我没有看您的代码。不过我知道glGetIntegerv是不能检测硬件能力的,它只是获取当前渲染设备上下文(HGLRC)的信息而已,您的渲染设备在wglChoosePixelFormatARB时没有指定多重采样的话,当然不会返回有效值。

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

suzhoulgj 发表于 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);
   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;
}
这样创建的窗口是不支持多重采样的阿?

array 发表于 2009-10-16 12:22:33

我不知道glut是怎么封装的,它只是一个独立的第三方库而已,我不怎么用;也许它还有一些可以调节采样数值的函数?

suzhoulgj 发表于 2009-10-16 14:20:18

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

array 发表于 2009-10-17 00:07:36

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

the_mercury 发表于 2012-10-31 11:56:46

在osg/GLExtensions.cpp文件之中有这么几行:
void* osg::getGLExtensionFuncPtr(const char *funcName)
{
#if defined(WIN32)

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

liuzhiyu123 发表于 2012-10-31 12:42:44

the_mercury 发表于 2012-10-31 11:56 static/image/common/back.gif
在osg/GLExtensions.cpp文件之中有这么几行:从这一段代码可以充分地说明OSG中的函数指针是通过wglGetProcA ...

:L
页: [1]
查看完整版本: 请教一个OpenGL多重采样的问题