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)!