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());