osg.Program
osg.Program是OpenSceneGraph的一个渲染特效节点,用于设置顶点和片元着色器,并提供了一些方法来管理着色器程序的状态。
属性
| 名称 |
类型 |
描述 |
| vertexShader |
osg::Shader* |
顶点着色器 |
| fragmentShader |
osg::Shader* |
片元着色器 |
| geometryShader |
osg::Shader* |
几何着色器 |
| tessControlShader |
osg::Shader* |
tessellation控制着色器 |
| tessEvaluationShader |
osg::Shader* |
tessellation评估着色器 |
| computeShader |
osg::Shader* |
compute着色器 |
| binaryProgram |
osg::ref_ptrosg::ShaderBinary |
二进制程序 |
| usePerContextProgramBinaryCache |
bool |
是否使用上下文程序二进制缓存 |
| dirtyShaderList |
std::vector<int> |
需要更新的着色器列表 |
| uniformMap |
UniformMap |
Uniform变量列表 |
方法
| 名称 |
参数 |
描述 |
| setVertexShader |
osg::Shader* shader |
设置顶点着色器 |
| setFragmentShader |
osg::Shader* shader |
设置片元着色器 |
| setGeometryShader |
osg::Shader* shader |
设置几何着色器 |
| setTessControlShader |
osg::Shader* shader |
设置tessellation控制着色器 |
| setTessEvaluationShader |
osg::Shader* shader |
设置tessellation评估着色器 |
| setComputeShader |
osg::Shader* shader |
设置compute着色器 |
| setShader |
osg::Shader* shader |
设置单个着色器 |
| addShader |
osg::Shader* shader |
添加着色器 |
| removeShader |
osg::ShaderType type |
移除指定类型的着色器 |
| getShader |
osg::ShaderType type |
获取指定类型的着色器 |
| compileGLObjects |
osg::State& state |
编译GL对象 |
| releaseGLObjects |
osg::State& state |
释放GL对象 |
| setUniformLocation |
const std::string& name, int location |
设置Uniform变量的位置 |
| setUniformValues |
osg::State& state, osg::Uniform* uniform, osg::Node* node |
设置Uniform变量的值 |
使用示例
创建一个osg.Program节点
osg::ref_ptr<osg::Program> program = new osg::Program;
设置着色器
osg::ref_ptr<osg::Shader> vertexShader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource);
osg::ref_ptr<osg::Shader> fragmentShader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource);
program->setVertexShader(vertexShader.get());
program->setFragmentShader(fragmentShader.get());
设置Uniform变量的位置和值
osg::Uniform* myUniform = new osg::Uniform("myUniform", 0.5f);
program->setUniformLocation("myUniform", 0);
program->setUniformValues(*state, myUniform, node.get());