<div dir="ltr">Thanks Rick for giving us the case for reproducing the error. I will have someone look into it. <div><br></div><div>Thanks,</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 27, 2016 at 6:28 PM, Richard Frank <span dir="ltr"><<a href="mailto:rickfrank@me.com" target="_blank">rickfrank@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Hi,</div><div><br></div><div>I was able to isolate the problem.</div><div><br></div><div>We are using vtkLightKit in our application.</div><div><br></div><div>Here is a small app that will demonstrate the problem</div><div><br></div><div><a href="https://www.dropbox.com/s/crwlm6njmqvdrz4/Source.7z?dl=0" target="_blank">https://www.dropbox.com/s/crwlm6njmqvdrz4/Source.7z?dl=0</a><br><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">But basically all you have to do is:</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word"> vtkSmartPointer<vtkLightKit> lightKit = vtkSmartPointer<vtkLightKit>::New();<br> lightKit->AddLightsToRenderer(ren1);</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">and render a volume</div><div style="word-wrap:break-word">and the shader fails to compile.</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">Can you verify?</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">Also, while in there the code</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">this->Impl->ShaderProgram = this->Impl->ShaderCache->ReadyShaderProgram(<br> vertexShader.c_str(), fragmentShader.c_str(), "");<br> if (!this->Impl->ShaderProgram->GetCompiled())<br> {<br> vtkErrorMacro("Shader failed to compile");<br> }</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">should be changed to </div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff">if (this->Impl->ShaderProgram == nullptr || !this->Impl->ShaderProgram->GetCompiled())</span></div><div style="word-wrap:break-word">{<br><br>}</div><div style="word-wrap:break-word"><br></div><div style="word-wrap:break-word">as <span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff">ReadyShaderProgram returns nullptr at least in this case (which causes the crash)</span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff"><br></span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff">Let me  know if you can repro and, if you fix it I will fetch from git and try again.</span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff"><br></span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff">Thanks!</span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff"><br></span></div><div style="word-wrap:break-word"><span style="color:#000000;font-family:SFNSText,'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;font-style:normal;font-variant:normal;font-weight:300;letter-spacing:normal;line-height:22.5px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:#ffffff">Rick Frank</span></div><div style="word-wrap:break-word"><br><div><br><blockquote type="cite"><div>Begin forwarded message:</div><div style="margin:0px"><span><b>From: </b></span><span>Richard Frank <<a href="mailto:rickfrank@me.com" target="_blank">rickfrank@me.com</a>><br></span></div><div style="margin:0px"><span><b>Date: </b></span><span>April 7, 2016 at 11:45:48 AM EDT<br></span></div><div style="margin:0px"><span><b>To: </b></span><span>Aashish Chaudhary <<a href="mailto:aashish.chaudhary@kitware.com" target="_blank">aashish.chaudhary@kitware.com</a>><br></span></div><div style="margin:0px"><span><b>Cc: </b></span><span><a href="mailto:vtkusers@vtk.org" target="_blank">vtkusers@vtk.org</a><br></span></div><div style="margin:0px"><span><b>Subject: </b></span><span><b>Re: [vtkusers] Error in vtkOpenGLGPUVolumeRayCastMapper.cxx, continued</b><br></span></div><br><div><div><div>Hi,</div><div><br></div><div>I pulled from git about 2 or 3 days ago, and got around to testing this AM.</div><div><br></div><div>I still crash, albeit slightly different place it seems but the same undefined gl_aspect</div><div><br></div><div>:</div><div><br></div><div>ERROR: In Y:\ThirdParty\vtk700\Rendering\OpenGL2\vtkShaderProgram.cxx, line 378<br>vtkShaderProgram (00000000362FFA50): 1: #version 150<br>2: #ifdef GL_ES<br>3: #if __VERSION__ == 300<br>4: #define varying in<br>5: #ifdef GL_FRAGMENT_PRECISION_HIGH<br>6: precision highp float;<br>7: precision highp sampler2D;<br>8: precision highp sampler3D;<br>9: #else<br>10: precision mediump float;<br>11: precision mediump sampler2D;<br>12: precision mediump sampler3D;<br>13: #endif<br>14: #define texelFetchBuffer texelFetch<br>15: #define texture1D texture<br>16: #define texture2D texture<br>17: #define texture3D texture<br>18: #endif // 300<br>19: #if __VERSION__ == 100<br>20: #extension GL_OES_standard_derivatives : enable<br>21: #ifdef GL_FRAGMENT_PRECISION_HIGH<br>22: precision highp float;<br>23: #else<br>24: precision mediump float;<br>25: #endif<br>26: #endif // 100<br>27: #else // GL_ES<br>28: #define highp<br>29: #define mediump<br>30: #define lowp<br>31: #if __VERSION__ == 150<br>32: #define varying in<br>33: #define texelFetchBuffer texelFetch<br>34: #define texture1D texture<br>35: #define texture2D texture<br>36: #define texture3D texture<br>37: #endif<br>38: #if __VERSION__ == 120<br>39: #extension GL_EXT_gpu_shader4 : require<br>40: #endif<br>41: #endif // GL_ES<br>42: <br>43: <br>44: /*=========================================================================<br>45: <br>46: Program: Visualization Toolkit<br>47: Module: raycasterfs.glsl<br>48: <br>49: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen<br>50: All rights reserved.<br>51: See Copyright.txt or <a href="http://www.kitware.com/Copyright.htm" target="_blank">http://www.kitware.com/Copyright.htm</a> for details.<br>52: <br>53: This software is distributed WITHOUT ANY WARRANTY; without even<br>54: the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR<br>55: PURPOSE. See the above copyright notice for more information.<br>56: <br>57: =========================================================================*/<br>58: <br>59: //////////////////////////////////////////////////////////////////////////////<br>60: ///<br>61: /// Inputs<br>62: ///<br>63: //////////////////////////////////////////////////////////////////////////////<br>64: <br>65: /// 3D texture coordinates form vertex shader<br>66: varying vec3 ip_textureCoords;<br>67: varying vec3 ip_vertexPos;<br>68: <br>69: //////////////////////////////////////////////////////////////////////////////<br>70: ///<br>71: /// Outputs<br>72: ///<br>73: //////////////////////////////////////////////////////////////////////////////<br>74: <br>75: vec4 g_fragColor = vec4(0.0);<br>76: <br>77: //////////////////////////////////////////////////////////////////////////////<br>78: ///<br>79: /// Uniforms, attributes, and globals<br>80: ///<br>81: //////////////////////////////////////////////////////////////////////////////<br>82: vec3 g_dataPos;<br>83: vec3 g_dirStep;<br>84: vec4 g_srcColor;<br>85: vec4 g_eyePosObj;<br>86: bool g_exit;<br>87: <br>88: uniform vec4 in_volume_scale;<br>89: uniform vec4 in_volume_bias;<br>90: <br>91: out vec4 fragOutput0;<br>92: <br>93: <br>94: <br>95: // Volume dataset <br>96: uniform sampler3D in_volume; <br>97: uniform int in_noOfComponents; <br>98: uniform int in_independentComponents; <br>99: <br>100: uniform sampler2D in_noiseSampler; <br>101: #ifndef GL_ES <br>102: uniform sampler2D in_depthSampler; <br>103: #endif <br>104: <br>105: // Camera position <br>106: uniform vec3 in_cameraPos; <br>107: <br>108: // view and model matrices <br>109: uniform mat4 in_volumeMatrix; <br>110: uniform mat4 in_inverseVolumeMatrix; <br>111: uniform mat4 in_projectionMatrix; <br>112: uniform mat4 in_inverseProjectionMatrix; <br>113: uniform mat4 in_modelViewMatrix; <br>114: uniform mat4 in_inverseModelViewMatrix; <br>115: uniform mat4 in_textureDatasetMatrix; <br>116: uniform mat4 in_inverseTextureDatasetMatrix; <br>117: uniform mat4 in_texureToEyeIt; <br>118: <br>119: // Ray step size <br>120: uniform vec3 in_cellStep; <br>121: uniform vec2 in_scalarsRange[4]; <br>122: uniform vec3 in_cellSpacing; <br>123: <br>124: // Sample distance <br>125: uniform float in_sampleDistance; <br>126: <br>127: // Scales <br>128: uniform vec3 in_cellScale; <br>129: uniform vec2 in_windowLowerLeftCorner; <br>130: uniform vec2 in_inverseOriginalWindowSize; <br>131: uniform vec2 in_inverseWindowSize; <br>132: uniform vec3 in_textureExtentsMax; <br>133: uniform vec3 in_textureExtentsMin; <br>134: <br>135: // Material and lighting <br>136: uniform vec3 in_diffuse; <br>137: uniform vec3 in_ambient; <br>138: uniform vec3 in_specular; <br>139: uniform float in_shininess; <br>140: <br>141: // Others <br>142: uniform bool in_cellFlag; <br>143: uniform bool in_useJittering; <br>144: vec3 g_xvec; <br>145: vec3 g_yvec; <br>146: vec3 g_zvec; <br>147: uniform bool in_twoSidedLighting; <br>148: vec3 g_cellSpacing; <br>149: float g_avgSpacing; <br>150: vec4 g_fragWorldPos; <br>151: uniform int in_numberOfLights; <br>152: uniform vec3 in_lightAmbientColor[6]; <br>153: uniform vec3 in_lightDiffuseColor[6]; <br>154: uniform vec3 in_lightSpecularColor[6]; <br>155: uniform vec3 in_lightDirection[6]; <br>156: <br>157: //VTK::Termination::Dec<br>158: <br>159: //VTK::Cropping::Dec<br>160: <br>161: //VTK::Shading::Dec<br>162: <br>163: //VTK::BinaryMask::Dec<br>164: <br>165: //VTK::CompositeMask::Dec<br>166: <br>167: <br>168: uniform sampler2D in_opacityTransferFunc; <br>169: float computeOpacity(vec4 scalar) <br>170: { <br>171: return texture2D(in_opacityTransferFunc, vec2(scalar.w, 0)).r; <br>172: }<br>173: <br>174: <br>175: uniform sampler2D in_gradientTransferFunc; <br>176: float computeGradientOpacity(vec4 grad) <br>177: { <br>178: return texture2D(in_gradientTransferFunc, vec2(grad.w, 0.0)).r; <br>179: } <br>180: // c is short for component <br>181: vec4 computeGradient(int c) <br>182: { <br>183: vec3 g1; <br>184: vec4 g2; <br>185: g1.x = texture3D(in_volume, vec3(g_dataPos + g_xvec)).x; <br>186: g1.y = texture3D(in_volume, vec3(g_dataPos + g_yvec)).x; <br>187: g1.z = texture3D(in_volume, vec3(g_dataPos + g_zvec)).x; <br>188: g2.x = texture3D(in_volume, vec3(g_dataPos - g_xvec)).x; <br>189: g2.y = texture3D(in_volume, vec3(g_dataPos - g_yvec)).x; <br>190: g2.z = texture3D(in_volume, vec3(g_dataPos - g_zvec)).x; <br>191: g1 = g1 * in_volume_scale.r + in_volume_bias.r; <br>192: g2 = g2 * in_volume_scale.r + in_volume_bias.r; <br>193: g1.x = in_scalarsRange[c][0] + ( <br>194: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g1.x; <br>195: g1.y = in_scalarsRange[c][0] + ( <br>196: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g1.y; <br>197: g1.z = in_scalarsRange[c][0] + ( <br>198: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g1.z; <br>199: g2.x = in_scalarsRange[c][0] + ( <br>200: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g2.x; <br>201: g2.y = in_scalarsRange[c][0] + ( <br>202: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g2.y; <br>203: g2.z = in_scalarsRange[c][0] + ( <br>204: in_scalarsRange[c][1] - in_scalarsRange[c][0]) * g2.z; <br>205: <a href="http://g2.xyz" target="_blank">g2.xyz</a> = g1 - <a href="http://g2.xyz" target="_blank">g2.xyz</a>; <br>206: g2.x /= g_aspect.x; <br>207: g2.y /= g_aspect.y; <br>208: g2.z /= g_aspect.z; <br>209: g2.w = 0.0; <br>210: float grad_mag = length(g2); <br>211: if (grad_mag > 0.0) <br>212: { <br>213: g2.x /= grad_mag; <br>214: g2.y /= grad_mag; <br>215: g2.z /= grad_mag; <br>216: } <br>217: else <br>218: { <br>219: <a href="http://g2.xyz" target="_blank">g2.xyz</a> = vec3(0.0, 0.0, 0.0); <br>220: } <br>221: grad_mag = grad_mag * 1.0 / (0.25 * (in_scalarsRange[c][1] - <br>222: (in_scalarsRange[c][0]))); <br>223: grad_mag = clamp(grad_mag, 0.0, 1.0); <br>224: g2.w = grad_mag; <br>225: return g2; <br>226: }<br>227: <br>228: <br>229: vec4 computeLighting(vec4 color, int component) <br>230: { <br>231: vec4 finalColor = vec4(0.0); <br>232: // Compute gradient function only once <br>233: vec4 gradient = computeGradient(component); <br>234: g_fragWorldPos = in_modelViewMatrix * in_volumeMatrix * <br>235: in_textureDatasetMatrix * vec4(-g_dataPos, 1.0); <br>236: if (g_fragWorldPos.w != 0.0) <br>237: { <br>238: g_fragWorldPos /= g_fragWorldPos.w; <br>239: } <br>240: vec3 vdir = normalize(g_fragWorldPos.xyz); <br>241: vec3 normal = <a href="http://gradient.xyz" target="_blank">gradient.xyz</a>; <br>242: vec3 ambient = vec3(0.0); <br>243: vec3 diffuse = vec3(0.0); <br>244: vec3 specular = vec3(0.0); <br>245: float normalLength = length(normal); <br>246: if (normalLength > 0.0) <br>247: { <br>248: normal = normalize((in_texureToEyeIt * vec4(normal, 0.0)).xyz); <br>249: } <br>250: else <br>251: { <br>252: normal = vec3(0.0, 0.0, 0.0); <br>253: } <br>254: for (int lightNum = 0; lightNum < in_numberOfLights; lightNum++) <br>255: { <br>256: vec3 ldir = in_lightDirection[lightNum].xyz; <br>257: vec3 h = normalize(ldir + vdir); <br>258: float nDotH = dot(normal, h); <br>259: if (nDotH < 0.0 && in_twoSidedLighting) <br>260: { <br>261: nDotH = -nDotH; <br>262: } <br>263: float nDotL = dot(normal, ldir); <br>264: if (nDotL < 0.0 && in_twoSidedLighting) <br>265: { <br>266: nDotL = -nDotL; <br>267: } <br>268: if (nDotL > 0.0) <br>269: { <br>270: diffuse += in_lightDiffuseColor[lightNum] * nDotL; <br>271: } <br>272: if (nDotH > 0.0) <br>273: { <br>274: specular = in_lightSpecularColor[lightNum] * pow(nDotH, in_shininess); <br>275: } <br>276: ambient += in_lightAmbientColor[lightNum]; <br>277: } <br>278: finalColor.xyz = in_ambient * ambient + <br>279: in_diffuse * diffuse * color.rgb + <br>280: in_specular * specular; <br>281: if (gradient.w >= 0.0) <br>282: { <br>283: color.a = color.a * <br>284: computeGradientOpacity(gradient); <br>285: } <br>286: finalColor.a = color.a; <br>287: return finalColor; <br>288: }<br>289: <br>290: <br>291: uniform sampler2D in_colorTransferFunc; <br>292: vec4 computeColor(vec4 scalar, float opacity) <br>293: { <br>294: return computeLighting(vec4(texture2D(in_colorTransferFunc, <br>295: vec2(scalar.w, 0.0)).xyz, opacity), 0); <br>296: }<br>297: <br>298: <br>299: vec3 computeRayDirection() <br>300: { <br>301: return normalize(ip_vertexPos.xyz - g_eyePosObj.xyz); <br>302: }<br>303: <br>304: /// We support only 8 clipping planes for now<br>305: /// The first value is the size of the data array for clipping<br>306: /// planes (origin, normal)<br>307: uniform float in_clippingPlanes[49];<br>308: uniform float in_scale;<br>309: uniform float in_bias;<br>310: <br>311: //////////////////////////////////////////////////////////////////////////////<br>312: ///<br>313: /// Main<br>314: ///<br>315: //////////////////////////////////////////////////////////////////////////////<br>316: void main()<br>317: {<br>318: /// Initialize g_fragColor (output) to 0<br>319: g_fragColor = vec4(0.0);<br>320: g_dirStep = vec3(0.0);<br>321: g_srcColor = vec4(0.0);<br>322: g_exit = false;<br>323: <br>324: <br>325: bool l_adjustTextureExtents = !in_cellFlag; <br>326: // Get the 3D texture coordinates for lookup into the in_volume dataset <br>327: g_dataPos = ip_textureCoords.xyz; <br>328: <br>329: // Eye position in object space <br>330: g_eyePosObj = (in_inverseVolumeMatrix * vec4(in_cameraPos, 1.0)); <br>331: if (g_eyePosObj.w != 0.0) <br>332: { <br>333: g_eyePosObj.x /= g_eyePosObj.w; <br>334: g_eyePosObj.y /= g_eyePosObj.w; <br>335: g_eyePosObj.z /= g_eyePosObj.w; <br>336: g_eyePosObj.w = 1.0; <br>337: } <br>338: <br>339: // Getting the ray marching direction (in object space); <br>340: vec3 rayDir = computeRayDirection(); <br>341: <br>342: // Multiply the raymarching direction with the step size to get the <br>343: // sub-step size we need to take at each raymarching step <br>344: g_dirStep = (in_inverseTextureDatasetMatrix * <br>345: vec4(rayDir, 0.0)).xyz * in_sampleDistance; <br>346: <br>347: float jitterValue = (texture2D(in_noiseSampler, g_dataPos.xy).x); <br>348: if (in_useJittering) <br>349: { <br>350: g_dataPos += g_dirStep * jitterValue; <br>351: } <br>352: else <br>353: { <br>354: g_dataPos += g_dirStep; <br>355: } <br>356: <br>357: // Flag to deternmine if voxel should be considered for the rendering <br>358: bool l_skip = false; <br>359: g_cellSpacing = vec3(in_cellSpacing[0], <br>360: in_cellSpacing[1], <br>361: in_cellSpacing[2]); <br>362: g_avgSpacing = (g_cellSpacing[0] + <br>363: g_cellSpacing[1] + <br>364: g_cellSpacing[2])/3.0; <br>365: g_xvec = vec3(in_cellStep[0], 0.0, 0.0); <br>366: g_yvec = vec3(0.0, in_cellStep[1], 0.0); <br>367: g_zvec = vec3(0.0, 0.0, in_cellStep[2]); <br>368: // Adjust the aspect <br>369: g_aspect.x = g_cellSpacing[0] * 2.0 / g_avgSpacing; <br>370: g_aspect.y = g_cellSpacing[1] * 2.0 / g_avgSpacing; <br>371: g_aspect.z = g_cellSpacing[2] * 2.0 / g_avgSpacing;<br>372: <br>373: <br>374: // Minimum texture access coordinate <br>375: vec3 l_texMin = vec3(0.0); <br>376: vec3 l_texMax = vec3(1.0); <br>377: if (l_adjustTextureExtents) <br>378: { <br>379: vec3 delta = in_textureExtentsMax - in_textureExtentsMin; <br>380: l_texMin = vec3(0.5) / delta; <br>381: l_texMax = (delta - vec3(0.5)) / delta; <br>382: } <br>383: <br>384: // Flag to indicate if the raymarch loop should terminate <br>385: bool stop = false; <br>386: <br>387: // 2D Texture fragment coordinates [0,1] from fragment coordinates <br>388: // the frame buffer texture has the size of the plain buffer but <br>389: // we use a fraction of it. The texture coordinates is less than 1 if <br>390: // the reduction factor is less than 1. <br>391: // Device coordinates are between -1 and 1. We need texture <br>392: // coordinates between 0 and 1 the in_depthSampler buffer has the <br>393: // original size buffer. <br>394: vec2 fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) * <br>395: in_inverseWindowSize; <br>396: float l_terminatePointMax = 0.0; <br>397: <br>398: #ifdef GL_ES <br>399: vec4 l_depthValue = vec4(1.0,1.0,1.0,1.0); <br>400: #else <br>401: vec4 l_depthValue = texture2D(in_depthSampler, fragTexCoord); <br>402: #endif <br>403: // Depth test <br>404: if(gl_FragCoord.z >= l_depthValue.x) <br>405: { <br>406: discard; <br>407: } <br>408: <br>409: // color buffer or max scalar buffer have a reduced size. <br>410: fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) * <br>411: in_inverseOriginalWindowSize; <br>412: <br>413: // Compute max number of iterations it will take before we hit <br>414: // the termination point <br>415: <br>416: // Abscissa of the point on the depth buffer along the ray. <br>417: // point in texture coordinates <br>418: vec4 terminatePoint; <br>419: terminatePoint.x = (gl_FragCoord.x - in_windowLowerLeftCorner.x) * 2.0 * <br>420: in_inverseWindowSize.x - 1.0; <br>421: terminatePoint.y = (gl_FragCoord.y - in_windowLowerLeftCorner.y) * 2.0 * <br>422: in_inverseWindowSize.y - 1.0; <br>423: terminatePoint.z = (2.0 * l_depthValue.x - (gl_DepthRange.near + <br>424: gl_DepthRange.far)) / gl_DepthRange.diff; <br>425: terminatePoint.w = 1.0; <br>426: <br>427: // From normalized device coordinates to eye coordinates. <br>428: // in_projectionMatrix is inversed because of way VT <br>429: // From eye coordinates to texture coordinates <br>430: terminatePoint = in_inverseTextureDatasetMatrix * <br>431: in_inverseVolumeMatrix * <br>432: in_inverseModelViewMatrix * <br>433: in_inverseProjectionMatrix * <br>434: terminatePoint; <br>435: terminatePoint /= terminatePoint.w; <br>436: <br>437: l_terminatePointMax = length(terminatePoint.xyz - g_dataPos.xyz) / <br>438: length(g_dirStep); <br>439: float l_currentT = 0.0;<br>440: <br>441: //VTK::Shading::Init<br>442: <br>443: //VTK::Cropping::Init<br>444: <br>445: //VTK::Clipping::Init<br>446: <br>447: //VTK::RenderToImage::Init<br>448: <br>449: //VTK::DepthPass::Init<br>450: <br>451: /// For all samples along the ray<br>452: while (!g_exit)<br>453: {<br>454: <br>455: l_skip = false;<br>456: <br>457: //VTK::Cropping::Impl<br>458: <br>459: //VTK::Clipping::Impl<br>460: <br>461: //VTK::BinaryMask::Impl<br>462: <br>463: //VTK::CompositeMask::Impl<br>464: <br>465: <br>466: if (!l_skip) <br>467: { <br>468: vec4 scalar = texture3D(in_volume, g_dataPos); <br>469: scalar.r = scalar.r*in_volume_scale.r + in_volume_bias.r; <br>470: scalar = vec4(scalar.r,scalar.r,scalar.r,scalar.r); <br>471: g_srcColor = vec4(0.0); <br>472: g_srcColor.a = computeOpacity(scalar); <br>473: if (g_srcColor.a > 0.0) <br>474: { <br>475: g_srcColor = computeColor(scalar, g_srcColor.a); <br>476: // Opacity calculation using compositing: <br>477: // Here we use front to back compositing scheme whereby <br>478: // the current sample value is multiplied to the <br>479: // currently accumulated alpha and then this product <br>480: // is subtracted from the sample value to get the <br>481: // alpha from the previous steps. Next, this alpha is <br>482: // multiplied with the current sample colour <br>483: // and accumulated to the composited colour. The alpha <br>484: // value from the previous steps is then accumulated <br>485: // to the composited colour alpha. <br>486: g_srcColor.rgb *= g_srcColor.a; <br>487: g_fragColor = (1.0f - g_fragColor.a) * g_srcColor + g_fragColor; <br>488: } <br>489: }<br>490: <br>491: //VTK::RenderToImage::Impl<br>492: <br>493: //VTK::DepthPass::Impl<br>494: <br>495: /// Advance ray<br>496: g_dataPos += g_dirStep;<br>497: <br>498: <br>499: // sign function performs component wise operation and returns -1 <br>500: // if the difference is less than 0, 0 if equal to 0, and 1 if <br>501: // above 0. So if the ray is inside the volume, dot product will <br>502: // always be 3. <br>503: stop = dot(sign(g_dataPos - l_texMin), sign(l_texMax - g_dataPos)) <br>504: < 3.0; <br>505: <br>506: // If the stopping condition is true we brek out of the ray marching <br>507: // loop <br>508: if (stop) <br>509: { <br>510: break; <br>511: } <br>512: // Early ray termination <br>513: // if the currently composited colour alpha is already fully saturated <br>514: // we terminated the loop or if we have hit an obstacle in the <br>515: // direction of they ray (using depth buffer) we terminate as well. <br>516: if((g_fragColor.a > (1.0 - 1.0/255.0)) || <br>517: l_currentT >= l_terminatePointMax) <br>518: { <br>519: break; <br>520: } <br>521: ++l_currentT;<br>522: }<br>523: <br>524: //VTK::Base::Exit<br>525: <br>526: //VTK::Terminate::Exit<br>527: <br>528: //VTK::Cropping::Exit<br>529: <br>530: //VTK::Clipping::Exit<br>531: <br>532: //VTK::Shading::Exit<br>533: <br>534: g_fragColor.r = g_fragColor.r * in_scale + in_bias * g_fragColor.a;<br>535: g_fragColor.g = g_fragColor.g * in_scale + in_bias * g_fragColor.a;<br>536: g_fragColor.b = g_fragColor.b * in_scale + in_bias * g_fragColor.a;<br>537: fragOutput0 = g_fragColor;<br>538: <br>539: //VTK::RenderToImage::Exit<br>540: <br>541: //VTK::DepthPass::Exit<br>542: }<br>543: <br><br><br><br>ERROR: In Y:\ThirdParty\vtk700\Rendering\OpenGL2\vtkShaderProgram.cxx, line 379<br>vtkShaderProgram (00000000362FFA50): 0(206) : error C1008: undefined variable "g_aspect"<br>0(207) : error C1008: undefined variable "g_aspect"<br>0(208) : error C1008: undefined variable "g_aspect"<br>0(369) : error C1008: undefined variable "g_aspect"<br>0(370) : error C1008: undefined variable "g_aspect"<br>0(371) : error C1008: undefined variable "g_aspect"<br></div><div><br></div><div><br></div><div><br>On Apr 04, 2016, at 11:49 AM, Aashish Chaudhary <<a href="mailto:aashish.chaudhary@kitware.com" target="_blank">aashish.chaudhary@kitware.com</a>> wrote:<br><br></div><div><blockquote type="cite"><div><div dir="ltr">Yes please. If you can checkout the latest master, this should not happen. <div><br></div><div>Thanks,</div><div>Aashish</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 4, 2016 at 11:48 AM, Richard Frank <span dir="ltr"><<a href="mailto:rickfrank@me.com" target="_blank">rickfrank@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>No I'm using 7.0.0 release not a git clone.</div><div><br></div><div>I guess I should get the latest? </div><div><br></div><div>Rick</div><div><div><div><br></div><div><br>On Apr 04, 2016, at 10:53 AM, Aashish Chaudhary <<a href="mailto:aashish.chaudhary@kitware.com" target="_blank">aashish.chaudhary@kitware.com</a>> wrote:<br><br></div><div><blockquote type="cite"><div><div dir="ltr">Thanks, and are you using VTK master as of last week since we had this problem and got fixed recently.  <div><br></div><div>- Aashish</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 4, 2016 at 10:47 AM, Richard Frank <span dir="ltr"><<a href="mailto:rickfrank@me.com" target="_blank">rickfrank@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Hi,</div><div><br></div><div>Here is a portion of code:</div><div><br></div><div><br> volumeProperty->SetColor(0, colorTransferFunction);<br> volumeProperty->SetColor(1, maskColorTransferFunction);<br> volumeProperty->SetScalarOpacity(opacityTransferFunction);<br> volumeProperty->SetGradientOpacity(volumeGradientOpacityFunction);<br> volumeProperty->SetInterpolationTypeToLinear();<br> volumeProperty->ShadeOn();<br> volumeProperty->SetAmbient(0.4);<br> volumeProperty->SetDiffuse(0.8);<br> volumeProperty->SetSpecular(0.2);<br> volumeProperty->SetSpecularPower(105.0);<br> volumeProperty->SetScalarOpacityUnitDistance(0.7);<br> volume->SetProperty(volumeProperty);</div><div><br></div><div>The hard coded numbers are just picked empirically by viewing our most common inputs.</div><div><div><div><br>On Apr 03, 2016, at 10:26 PM, Aashish Chaudhary <<a href="mailto:aashish.chaudhary@kitware.com" target="_blank">aashish.chaudhary@kitware.com</a>> wrote:<br><br></div><div><blockquote type="cite"><div><div dir="ltr">Rick, <div><br></div><div>Can you send me information on what you are turning on in volume property and in mapper that leads to this crash? Also, is your data is single or 2 or 4 component? </div><div><br></div><div>Thanks,</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Apr 3, 2016 at 9:25 PM, Richard Frank <span dir="ltr"><<a href="mailto:rickfrank@me.com" target="_blank">rickfrank@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Further investigation seems to point the GradientOpacity section of shader  raycasterfs.glsl, code which seems to be inserted at runtime: I guess gl_aspect is not defined in this scenario?</div><div><br></div><div>Any suggestions welcome!</div><div><br></div><div>Rick</div><div><br></div><div>vec4 computeGradient() <br>145: { <br>146: vec3 g1; <br>147: vec4 g2; <br>148: g1.x = texture3D(in_volume, vec3(g_dataPos + g_xvec)).x; <br>149: g1.y = texture3D(in_volume, vec3(g_dataPos + g_yvec)).x; <br>150: g1.z = texture3D(in_volume, vec3(g_dataPos + g_zvec)).x; <br>151: g2.x = texture3D(in_volume, vec3(g_dataPos - g_xvec)).x; <br>152: g2.y = texture3D(in_volume, vec3(g_dataPos - g_yvec)).x; <br>153: g2.z = texture3D(in_volume, vec3(g_dataPos - g_zvec)).x; <br>154: g1 = g1*in_volume_scale.r + in_volume_bias.r; <br>155: g2 = g2*in_volume_scale.r + in_volume_bias.r; <br>156: g1.x = in_scalarsRange[0] + ( <br>157: in_scalarsRange[1] - in_scalarsRange[0]) * g1.x; <br>158: g1.y = in_scalarsRange[0] + ( <br>159: in_scalarsRange[1] - in_scalarsRange[0]) * g1.y; <br>160: g1.z = in_scalarsRange[0] + ( <br>161: in_scalarsRange[1] - in_scalarsRange[0]) * g1.z; <br>162: g2.x = in_scalarsRange[0] + ( <br>163: in_scalarsRange[1] - in_scalarsRange[0]) * g2.x; <br>164: g2.y = in_scalarsRange[0] + ( <br>165: in_scalarsRange[1] - in_scalarsRange[0]) * g2.y; <br>166: g2.z = in_scalarsRange[0] + ( <br>167: in_scalarsRange[1] - in_scalarsRange[0]) * g2.z; <br>168: <a href="http://g2.xyz/" target="_blank">g2.xyz</a> = g1 - <a href="http://g2.xyz/" target="_blank">g2.xyz</a>; <br>169: g2.x /= g_aspect.x; <br>170: g2.y /= g_aspect.y; <br>171: g2.z /= g_aspect.z; <br>172: float grad_mag = sqrt(g2.x * g2.x + <br>173: g2.y * g2.y + <br>174: g2.z * g2.z); <br>175: if (grad_mag > 0.0) <br>176: { <br>177: g2.x /= grad_mag; <br>178: g2.y /= grad_mag; <br>179: g2.z /= grad_mag; <br>180: } <br>181: else <br>182: { <br>183: <a href="http://g2.xyz/" target="_blank">g2.xyz</a> = vec3(0.0, 0.0, 0.0); <br>184: } <br>185: grad_mag = grad_mag * 1.0 / (0.25 * (in_scalarsRange[1] - <br>186: (in_scalarsRange[0]))); <br>187: grad_mag = clamp(grad_mag, 0.0, 1.0); <br>188: g2.w = grad_mag; <br>189: return g2; <br>190: }</div><div><br></div><div><br></div><div><br></div></div><br>_______________________________________________<br> Powered by <a href="http://www.kitware.com/" rel="noreferrer" target="_blank">www.kitware.com</a><br> <br> Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br> <br> Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br> <br> Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=vtkusers</a><br> <br> Follow this link to subscribe/unsubscribe:<br> <a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br> <br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><span style="font-family:'trebuchet ms',sans-serif"><i>| Aashish Chaudhary <br>| Technical Leader         <br>| Kitware Inc.            <br></i></span><div><i><span style="font-family:'trebuchet ms',sans-serif">| </span><a href="http://www.kitware.com/company/team/chaudhary.html" target="_blank">http://www.kitware.com/company/team/chaudhary.html</a></i></div></div></div></div></div></blockquote></div></div></div></div></blockquote></div><br><br clear="all"><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br><div><div dir="ltr"><span style="font-family:'trebuchet ms',sans-serif"><i>| Aashish Chaudhary <br>| Technical Leader         <br>| Kitware Inc.            <br></i></span><div><i><span style="font-family:'trebuchet ms',sans-serif">| </span><a href="http://www.kitware.com/company/team/chaudhary.html" target="_blank">http://www.kitware.com/company/team/chaudhary.html</a></i></div></div></div></font></span></div></div></blockquote></div></div></div></div></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><span style="font-family:'trebuchet ms',sans-serif"><i>| Aashish Chaudhary <br>| Technical Leader         <br>| Kitware Inc.            <br></i></span><div><i><span style="font-family:'trebuchet ms',sans-serif">| </span><a href="http://www.kitware.com/company/team/chaudhary.html" target="_blank">http://www.kitware.com/company/team/chaudhary.html</a></i></div></div></div></font></span></div></div></blockquote></div></div></div></blockquote></div><br></div></div><div></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><font face="trebuchet ms, sans-serif"><i>| Aashish Chaudhary <br>| Technical Leader         <br>| Kitware Inc.            <br></i></font><div><i><font face="trebuchet ms, sans-serif">| </font><a href="http://www.kitware.com/company/team/chaudhary.html" target="_blank">http://www.kitware.com/company/team/chaudhary.html</a></i></div></div></div>
</div>