自学内容网 自学内容网

osg执行opengl4.3的shader报错

运行案例:运行这篇博客的opengl4.3的例子,OSG使用GLSL各个版本例子,报如下错误:

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  MVP
Warning: detected OpenGL error 'invalid operation' at after RenderBin::draw(..)

问题原因:经过分析,是因为矩阵MVP在客户端CPU里面是double类型,在服务端GPU里是float类型导致。

修改策略:保持服务端里的float型不变(不修改shader),修改C++的矩阵类型,修改以下两处:

// 更新矩阵
    virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv) {
        osg::Matrix modelView = mCamera->getViewMatrix();
        osg::Matrix projectM = mCamera->getProjectionMatrix();
        uniform->set(osg::Matrixf(modelView * projectM));
    }
// 矩阵初始化
osg::Uniform* MVPUniform = new osg::Uniform("MVP", osg::Matrixf());

案例运行结果:
案例运行结果
附注:使用vcpkg安装的osg(默认编译选项),就可以支持opengl4的shader,不需要在编译时指定开启opengl3的选项,开启了可能反而会有问题。


原文地址:https://blog.csdn.net/weixin_42333471/article/details/136804825

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!