|
本帖最后由 the_mercury 于 2017-10-12 14:26 编辑
请大家帮忙看一下我下面的这个代码错在哪里:
程序中使用了OpenGL Shader
- // vertex shader
- #version 130
- in vec4 osg_Vertex;
- in vec4 osg_Color;
- out vec4 color;
- uniform mat4 osg_ModelViewProjectionMatrix;
- uniform float pointSize;
- void main(void)
- {
- color = osg_Color;
- gl_PointSize = pointSize;
- gl_Position = osg_ModelViewProjectionMatrix * osg_Vertex;
- }
- // fragment shader
- #version 130
- in vec4 color;
- out vec4 fragColor;
- void main(void)
- {
- fragColor = color;
- }
复制代码
下面是osg的C++代码
- osg::ref_ptr<osg::Shader> vertexShader = new osg::Shader(osg::Shader::VERTEX, vertex_shader_code);
- osg::ref_ptr<osg::Shader> fragmentShader = new osg::Shader(osg::Shader::FRAGMENT, fragment_shader_code);
- osg::ref_ptr<osg::Program> program = new osg::Program();
- program->addShader(vertexShader);
- program->addShader(fragmentShader);
- program->addBindFragDataLocation("fragColor", 0);
- stateSet->setAttributeAndModes(program, osg::StateAttribute::ON);
- stateSet->setMode(GL_PROGRAM_POINT_SIZE_EXT, osg::StateAttribute::ON);
- osg::ref_ptr<osg::Uniform> pointSize = new osg::Uniform("pointSize", 5.0);
- stateSet->addUniform(pointSize);
复制代码 这个时候osg在执行到glUseProgram的时候报错GL_INVALID_OPERATION,当程序作改动之后,程序就正常了
改动后的Shader如下
- // vertex shader
- #version 130
- in vec4 osg_Vertex;
- in vec4 osg_Color;
- out vec4 color;
- uniform mat4 osg_ModelViewProjectionMatrix;
- void main(void)
- {
- color = osg_Color;
- gl_Position = osg_ModelViewProjectionMatrix * osg_Vertex;
- }
- // fragment shader
- #version 130
- in vec4 color;
- out vec4 fragColor;
- void main(void)
- {
- fragColor = color;
- }
复制代码
并且在程序中去掉以下行:
- stateSet->setMode(GL_PROGRAM_POINT_SIZE_EXT, osg::StateAttribute::ON);
- osg::ref_ptr<osg::Uniform> pointSizeUniform = new osg::Uniform("pointSize", 5.0);
- stateSet->addUniform(pointSizeUniform);
复制代码
显卡型号为NVIDIA GeForce GT720/PCIe/SSE2 OpenGL和GLSL版本分别为4.5
请问如何在程序中设置gl_PointSize内置变量啊,为什么我的就是不对呢
|
|