How to pass a uniform that is an array of vec2 or vec4 using Cesium.Material fabric?

189 views
Skip to first unread message

skaug...@gmail.com

unread,
Mar 13, 2019, 3:00:10 AM3/13/19
to cesium-dev
I'm creating a custom polyline shader that needs to be able to display arbitrary segments in different colors.

I'm able to get it working with a single segment, but I'd like to be able to pass an array of vec2's for start/end position and an array of vec4's for colors for each segment.

Here's a working Sandcastle with a single line segment:

https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/#c=rVdtb9s2EP4rRD40UuHQdtK0g+1my9JkDdCXoA3WBstQMBJlE6VEgaRsq4H/+46kXijZ7lC0/mBLvLvnjrzn7uglkSgXvOQso9P77D5LiizSTGQokpRoeiNZyjRbUhWoiGY0RI9GC8Fn6Zkq9BJZOc4bA0ziOMjoCl1QxYoU31S6F4Jzan0EYTh1WDUOwDSQ1v7RyZ2OYsZKoUkf8obl1PziOYQgIewLIjWokOxcRj7GHpxG/QQnUqSv6FxSqs6lJGXwz9F4PMKjAXp2DN9dqB/9HP12apBOnv880nhkgzo+/XmoFy8M0hi292/YQm1CD3fFYr2A83rR8aYWYgWLWhbULW7qfBpuJJLMPy5ITCVkNRZRkdJMQ4b0Jafm8c/yOg7uD4zakbJ69wchZhlk8PXt2zceUgoZlYxwwPH49LZa7ec3IQ+SRRP0uH0sRcYSIVO1U2i5AewlsgSKCtmyw7zhT6+vby/3HLWic7OjXWYfLl993+h9kiiqIaL1xGa0ND+bPTaG5J9MLiboZB8sHKVYXWeaZsDzcoKO8eke1TnJd4V8++H83ceb8w+X7273GMZELd7QbG7iGD//jtIN0ZCkbIJG6yv4bCvu2qgShYzoxCNQV2fTI1vdMbDHk/oRVDamYRkasSwv9OfvkPFQ2Fx8PjTIjcXd/1vcWQuHj4V7AKu6lwZhzbetUHFNSdyhA16DuV4whZeEF6Yzb2oHd7/GQbnLgdv1ktGVLVqv2P62a8FhZF8vRKYJeJHNSdnmDybOFttXC7hnjIDsYHAwU7rk9MyF/gdLcyE1KiQPMB5qmuYcTNXwoYi+QsSRUsZsNqyNZiqSLNeIxS97bQTpMqfV4v0BqFaHgJY0etYp8mlP5ldyV3bcLVhPmHBBNBKFbqpzS9gryr7XuhC37NpC2ymqyqvOXMmyeSVdfllVgfTXa4acZ3NepQhmoa7kKVFfnUNI5hjmlNUAMh0jKTSkI3B6ksQN59xKBAaRUIGRTH2BvRuwzBdIqguZmSI9DtrajgZIee3gSA1Q5F7Duoyjb+mXpsrNC9RjMwd84bWtkM5bE28HJDVhO6BXNCEFb/G61vU8skzQXouxYqy0rwB3DNCoTqx35iF6iub8yxVw80IIGeN1WZkOh+gvqqEsKZwQcB/qpbmtwAiGcs2s0KQemYsKGiEt0Ng/bUuL2ual6aGRDgAEOsrQo1PYurxi80JSw18LbhgAjS+ma+zjmuVrs2pAOcQddDw99ZjjYd9S5VAfmIPYwrQaHUjHaYg2F6vA3Lla33BfRMghNIf9DFgHpQMYQSrioMaEqxEehWiGxubn96bE4L7Sq/8WzUW1IDwxlSqZkLaaAXqET2GLQVVV6KgdxCEE2hZbH6tqGVeMc4syqnRYggIFpEFnqN/3nzxBVjLrScrQv7R0gccN8MaPwR4MlvMHw1a2DvyNDzqtbuADhsZkx2aWpOur/iNQbUZDyFtn1wnaARjVqVf1XpCQzpMATins7oZyRVsvZyiAGCAH2852eHOqP+6zJpXtDSRNyYWQEv62BFZQK6eY8HxBbOszkARYEnGS5oHx/rTf9wfIXvHGrbcUxyxJCkUbiPbs6y7pmh/MPTvuzOCL2dJNvd44hskH3pUyo6/g/CP7RmH8zYag3zGDdMYwE94vqeSkNCqL8dkbt4gxng3hddtKC8EfiOwj2nEM4rpTTRB5UIIXmk6hO+Vw98vXU8RpoqvHHP7YgSO4OppXO5/NdmfuVmNdVRexdpJLks1hL0DjDN5G5oms4WkMT0rT3CzikXmz95lKZ7gX+u5XQNtj+A8

If I try to change the uniforms to arrays, I now get an error that the uniform has an invalid type. How do I specify the uniform type correctly for arrays?

https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/#c=rVf/T9s6EP9XLJ60JVtxWxjb1Bbe43WwIY0NDfQ2BAi5idNaJHFkO/0y1P/9ne18cVK6adr6QxP77j53vm++zIlAGY9XMUvp8Da9TaM8DRTjKQoEJYpeCJYwxeZUejKgKfXRo+ZC8Js7ohIdIkPHWSWASRh6KV2gMZUsT/BFwTvmcUyNDs/3hxarxAGYCtLIP1q65ZFMS0k0aENesIzqJ56CCQLMHhOhgIWkxyJwMbbgVOz7OBI8eUenglJ5LARZeTe7/X4P9zro1R78N6F+9bf79kAj7b/+faR+zxi1d/D7UG/eaKQ+HO/Or6HWvoO7YKGagb/eNLTJGV/AphI5tZvrMp46NyJBppczElIBUQ15kCc0VRAhdRJT/frv6iz0bnc02640fLc7PmYpRPDD1flHBymBiApGYsBx8um82G3HNyITwYIBetx0S56yiItEPkk0uQHZS8QKUpSLOjv0Cn/9cHZ1ssXVkk71icY8T9UA9X/GZcBvGuhfTt7d/VjscxRJCug3j8uBCf1KP9bbpHQ5fNVRG6D9bcDgdL44SxVNoSJWA7SHD7awTkn2lE+uvhx/urw4/nLy6WqLYEjk7CNNp9qO/usfMF0QBeFMB6i3PIXfJuP6CWHJcxHQgZNqTZ51Ky3L3oKdjCpfgWWtW5tOOJZmufr2g7R9zk00vj3XyJXE9c8lro2ExcfcvoBU2XU9v8zMDVNxmby4kRB4CeJqxiSekzjXPXxdKrj+MwpWTymwp54zujDl7ZTlf2bPex6Y5ZinioAWUXnKXBMgYmWxWRrALRcO0HY6OyOpVjE9sqb/w5KMC4VyEXsYdxVNshhEZXeSBw9gcSClFht1S6GRDATLFGLhYavhILXKaLF5uwOsf4U00hfR+fG3+8uT9+eQ2pfo7W1aOAfNafCq0SaGLZpb5Tcuyl2Tc69Z2FtZo5gThXiuqoreILYKuW1RWbwbcnVxPkkqSrKM9oql04I6v18UhrT3y6w6TqdxEVa4aVVBT4h8sAohAfpwCxoOSMA9JLiCEHqWT5CwylO7E4BAwKWnKUOXYCYPlroEQVUuUl3Ye17dD4IOkk4L2ZUdFNilX5Z+8D25rzqDXkANV7eMSzwzVdVYVfY2QBJttgV6RyOSxzVeU7q87UxeKKctGTKWymWACQY4Co+1fO6jF2ga359CPo85FyFergrRbhe9pwpKmYKHoF6gxqpZCC54KPHUEHXokR6DUA8pjvqut01alDKHuu8GygMQ6EJdJ538WuUpm+aC6vw14DoDoFmGdIldXL19pnc1aAx2ew1NL5zMcbCvqLSoE2YhNjANRwPS5jRYm/GFpye6WjdMowhZhMrZryDroHQAw0t46JWYMHjhno9GqK8ff1clBtNQqzfUaNaqGYkjXamCcWGqGaB7+ACO6BVVhXbry9sHQ+tia2MVDeSUxbFB6Q0duwviOVvScFycodGbendlIYFvWArdUYMM4TFqdD/YefnSdycmFtk69ZiPjg4b0w/woQk08odheflaAeRJyGJ01Gp67A4y59kzZIijTeLKb09qzTP3qzO36I1jJ2zpbex3mt5gdx0dBx+L6cSBLCcI1/kmIzRfAe1GvIO2K9I2u/huKOekeZzyI6vwnALnbGROwzcWQLM61ruWQlLse5AjZf0UR6KxpLWWI+SBDZCBm8qe0GZZf11nWVKmM5IkIWMuBHwSeoZQMieYxNmMmMavIQnUSBCTJPO09hftW0+HT3/G1NoSHLIoyiWtIGrfl3eEbf0wKZgBQY8KIZvbOaE1wMCsANql1MNCHseX7DuFgWHUBf6GGIQzhBvx85yKmKw0y6x/9NFuYoxHXVhuSinO4wkRbUQzwAC57NMDRCaSx7miQ+jNGUzL2XKIYhqp4jWDj2ZQBMO2XpqJRh93ZOdAo6oYXevZR5B0CmeBXE5h1dNvZAlvfXiTimZ6E/f0ykyABU93K/T1n4A2bvgf

Omar Shehata

unread,
Mar 21, 2019, 12:59:53 PM3/21/19
to cesium-dev
That looks really cool! Thanks for sharing a Sandcastle.

I think an array of vec2's just isn't implemented as a uniform type in the material system. You might need to modify Material.js to add this type:


Here's where it gets called:


We'd be happy to review a pull request if you make this change. I wonder if it would be better to allow a way to letting the user explicitly state the uniform type for these situations as opposed to guessing it.

skaug...@gmail.com

unread,
Mar 31, 2019, 4:48:19 PM3/31/19
to cesium-dev
Thanks, when I get a chance I will look into modifying Material.js and possibly putting up a PR.

Omar Shehata

unread,
Apr 1, 2019, 8:12:18 AM4/1/19
to cesium-dev
That would be awesome! Feel free to ping me here or on GitHub if you have any questions.
Reply all
Reply to author
Forward
0 new messages