Adds basic OME-Zarr multichannel support under the current color channel implementation. Each channel is loaded as an individual child channel actor under the parent OmeZarrVolumeActor. There is a small change to the initial Ome-Zarr load/init call that slightly modifies NeuronTopTracerComponent and ViewLoader, but changes are otherwise limited to the Ome-Zarr implementation and the Volume MIP shader.
A two channel OME-Zarr file is available at /nrs/mouselight/pipeline-testing/tczyx.ome.zarr.
Video of 3 channel AIND data (too large to put on nrs) https://www.dropbox.com/scl/fi/jqayzn33npqqxd34tbrfk/OZMC.mp4?rlkey=au0lpjnr23cg06grngm3u1ta6&dl=0
Looks like some kind of initialization exception when the color sliders are not open when the Zarr Sample is loaded. If you open or close the color sliders window after loading the 2-channel demo, it throws the following GLException. This might be related to the change in the order of the initColorModel? This seems to only happen with the 2-channel sample, not regular KTX samples.
javax.media.opengl.GLException: Thread[AWT-EventQueue-0,6,main] glGetError() returned the following error codes after a call to glUseProgram( 0xD): GL_INVALID_VALUE ( 1281 0x501),
at javax.media.opengl.DebugGL4bc.writeGLError(DebugGL4bc.java:29466)
at javax.media.opengl.DebugGL4bc.glUseProgram(DebugGL4bc.java:24136)
at org.janelia.gltools.BasicShaderProgram.load(BasicShaderProgram.java:66)
at org.janelia.gltools.material.BasicMaterial.load(BasicMaterial.java:114)
at org.janelia.horta.volume.VolumeMipMaterial.load(VolumeMipMaterial.java:279)
at org.janelia.gltools.material.BasicMaterial.display(BasicMaterial.java:34)
at org.janelia.gltools.MeshActor.display(MeshActor.java:397)
at org.janelia.horta.actors.OmeZarrVolumeMeshActor.display(OmeZarrVolumeMeshActor.java:76)
at org.janelia.horta.actors.OmeZarrVolumeChannelActor.display(OmeZarrVolumeChannelActor.java:232)
at org.janelia.horta.actors.OmeZarrVolumeActor.display(OmeZarrVolumeActor.java:140)
at org.janelia.gltools.RenderPass.renderScene(RenderPass.java:58)
at org.janelia.horta.render.VolumeRenderPass.renderScene(VolumeRenderPass.java:90)
at org.janelia.gltools.RenderPass.display(RenderPass.java:85)
at org.janelia.gltools.MultipassRenderer.display(MultipassRenderer.java:17)
at org.janelia.horta.render.NeuronMPRenderer.display(NeuronMPRenderer.java:171)
at org.janelia.scenewindow.SceneRenderer.renderScene(SceneRenderer.java:192)
at org.janelia.scenewindow.stereo.MonoscopicRenderer.renderScene(MonoscopicRenderer.java:18)
at org.janelia.scenewindow.SceneRenderer.display(SceneRenderer.java:146)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:690)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:672)
at javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1383)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)