<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">Hi everyone,</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">I am currently trying to use shaders with VTK (GLSL) and I have managed so far to run a vertex & fragment shader using the vtkShader2 and vtkShaderProgram2 classes. However, I am now trying to set the sampler2D of my shader but I haven't been very successful at all and it has been bugging me for a while.</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">In order to use shaders, I based myself on the code snippet given in this answer (<a href="http://vtk.1045678.n5.nabble.com/GLSL-Shader-on-a-vtkActor-VTK-6-1-and-Qt-5-2-1-tt5727788.html#a5728023">http://vtk.1045678.n5.nabble.com/GLSL-Shader-on-a-vtkActor-VTK-6-1-and-Qt-5-2-1-tt5727788.html#a5728023</a>).</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">Here is my shader:</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">   </span><font color="#000000" face="verdana, sans-serif">#version 130</font></div><div class="gmail_default" style><font color="#000000" face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">     </span><font color="#000000" face="verdana, sans-serif">uniform sampler2D tex;</font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">  </span><font color="#000000" face="verdana, sans-serif">out vec4 color;</font></div><div class="gmail_default" style><font color="#000000" face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">  </span><font color="#000000" face="verdana, sans-serif">void propFuncFS(void)</font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">   </span><font color="#000000" face="verdana, sans-serif">{</font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">       </span><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">     </span><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">color = texture(tex, vec2(100, 100));</span></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">        </span><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">     </span><span style="color:rgb(0,0,0);font-family:verdana,sans-serif">color[3] = 1;</span></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">        </span><font color="#000000" face="verdana, sans-serif">}</font></div></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">This is very simple test that I use to verify that I get a color from the texture. And here is the C++ code to set the sampler2D "tex", that comes after the snippet mentioned above:</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><span style="white-space:pre"> // load the texture</span><br></div><div class="gmail_default" style><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span style="white-space:pre">      </span>vtkSmartPointer<vtkJPEGReader> jpegReader = vtkSmartPointer<vtkJPEGReader>::New();</div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="" style="white-space:pre">   </span>jpegReader->SetFileName("path/to/image");</div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="" style="white-space:pre">   </span>jpegReader->Update();</div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="" style="white-space:pre"> </span>vtkSmartPointer<vtkOpenGLTexture> texture = vtkSmartPointer<vtkOpenGLTexture>::New();</div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span class="" style="white-space:pre">        </span>texture->SetInputConnection(jpegReader->GetOutputPort());</div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span style="white-space:pre">     </span><br></div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span style="white-space:pre">  // try to set the sampler2D here</span><span style="white-space:pre"><br></span></div><div class="gmail_default" style="color:rgb(0,0,0);font-family:verdana,sans-serif"><span style="white-space:pre">       int index = texture->GetIndex();</span><br></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">   </span><font color="#000000" face="verdana, sans-serif"><span style="white-space:pre">vtkSmartPointer<vtkUniformVariables> uniformVariables = vtkSmartPointer<vtkUniformVariables>::New();</span></font><br></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">   </span><font color="#000000" face="verdana, sans-serif"><span style="white-space:pre">uniformVariables->SetUniformi("tex", 1, &index);</span><br></font></div><div class="gmail_default" style><span style="color:rgb(0,0,0);font-family:verdana,sans-serif;white-space:pre">  </span><font color="#000000" face="verdana, sans-serif"><span style="white-space:pre">program->SetUniformVariables(uniformVariables);</span></font></div><div class="gmail_default" style><font color="#000000" face="verdana, sans-serif"><span style="white-space:pre"><br></span></font></div></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">With this code, I get a black texture. So my guess was that the uniforms weren't actually copied onto the GPU, so I tried:</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"> <span class="" style="white-space:pre">  </span><span style="white-space:pre">program</span>->SetContext(m_renderWindow);</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><span class="" style="white-space:pre">       </span><span style="white-space:pre">program</span>->Build();</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><span class="" style="white-space:pre">  </span><span style="white-space:pre">program</span>->SendUniforms();</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">But the Build() fails with the linking error: "no program".</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">At this point, I would really appreciate any help/indication/snippet.</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)">Thanks a lot in advance.</div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(0,0,0)"><br></div>-- <br><div dir="ltr"><span style="border-collapse:collapse"><span style="font-size:10pt;font-family:'Trebuchet MS';color:rgb(51,51,51);font-weight:normal;font-style:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Guillaume</span><br><br></span></div>
</div>