GLSL传递数组

复制代码
static const char *microshaderFragSource = {
    "varying vec4 color;\n"
    "uniform bool test1=true;\n"
    "uniform float test2=15.0;\n"
    "uniform float gauss_num[10];\n"
    "void main(void)\n"
    "{\n"
    "        if(test1)\n"
    "    gl_FragColor = clamp( color, 0.0, 1.0 );\n"
    "        else\n"
    "    gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n"
    "}\n"
};
复制代码
复制代码
// 数组类型的uniform,数组大小必须与.glsl中的数组大小保持一致
    osg::FloatArray* g_GaussNum = new osg::FloatArray(10);
    osg::Uniform* gauss_num = new osg::Uniform(osg::Uniform::FLOAT, "gauss_num", g_GaussNum->size());
    gauss_num->setArray(g_GaussNum);
//如果是vec2类型的数组,使用FLOAT_VEC2,setElement循环设置每一个元素
// 给uniform添加一个回调 osg::Uniform* OffsetUniform = new osg::Uniform("Offset", osg::Vec3(0.0f, 0.0f, 0.0f)); OffsetUniform->setUpdateCallback(new AnimateCallback()); ss->addUniform(OffsetUniform);
复制代码

 

posted @   酷熊  阅读(4584)  评论(5编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2018-04-08 雷达波Shader
2013-04-08 OSGEarth GDAL Multiple files
点击右上角即可分享
微信分享提示