00001 #include "VFlowRenderer.h"
00002 #include "glew.h"
00003
00004 void VFlowRenderer::setShaderWrapperVelocity()
00005 {
00006 glActiveTextureARB(GL_TEXTURE1_ARB);
00007 glEnable(GL_TEXTURE_2D);
00008 glBindTexture(GL_TEXTURE_2D, m_TransferFunctionHandle);
00009
00010 mVelocityProgram.bind();
00011
00012 mCamera.updateProjMatrix();
00013 mCamera.updateViewMatrix();
00014
00015 glUniformMatrix4fv(mVelocityProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00016 glUniformMatrix4fv(mVelocityProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00017
00018 glUniform1i( mVelocityProgram.getUniformLocation( "mTransfer" ), 1 );
00019 glUniform1f( mVelocityProgram.getUniformLocation( "maxMagnitude" ), mFlowData->getMaximalMagnitude() );
00020 glUniform1f( mVelocityProgram.getUniformLocation( "minMagnitude" ), mFlowData->getMinimalMagnitude() );
00021
00022 }
00023
00024 void VFlowRenderer::clearShaderWrapperVelocity()
00025 {
00026 mVelocityProgram.release();
00027
00028 glActiveTextureARB(GL_TEXTURE1_ARB);
00029 glBindTexture(GL_TEXTURE_2D, 0);
00030 glDisable(GL_TEXTURE_2D);
00031 }
00032
00033 void VFlowRenderer::setShaderWrapperPressure()
00034 {
00035 glActiveTextureARB(GL_TEXTURE1_ARB);
00036 glEnable(GL_TEXTURE_2D);
00037 glBindTexture(GL_TEXTURE_2D, m_TransferFunctionHandle);
00038
00039 mPressureProgram.bind();
00040
00041 mCamera.updateProjMatrix();
00042 mCamera.updateViewMatrix();
00043
00044 glUniformMatrix4fv(mPressureProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00045 glUniformMatrix4fv(mPressureProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00046
00047 glUniform1i( mPressureProgram.getUniformLocation( "mTransfer" ), 1 );
00048 glUniform1f( mPressureProgram.getUniformLocation( "maxDataValue" ), mFlowData->getMaximalDatavalue( 1 ) );
00049 glUniform1f( mPressureProgram.getUniformLocation( "minDataValue" ), mFlowData->getMinimalDatavalue( 1 ) );
00050
00051 }
00052
00053 void VFlowRenderer::clearShaderWrapperPressure()
00054 {
00055 mVelocityProgram.release();
00056
00057 glActiveTextureARB(GL_TEXTURE1_ARB);
00058 glBindTexture(GL_TEXTURE_2D, 0);
00059 glDisable(GL_TEXTURE_2D);
00060 }
00061
00062 void VFlowRenderer::setShaderWrapperVorticity()
00063 {
00064 glActiveTextureARB(GL_TEXTURE1_ARB);
00065 glEnable(GL_TEXTURE_2D);
00066 glBindTexture(GL_TEXTURE_2D, m_TransferFunctionHandle);
00067
00068 mVorticityProgram.bind();
00069
00070 mCamera.updateProjMatrix();
00071 mCamera.updateViewMatrix();
00072
00073 glUniformMatrix4fv(mVorticityProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00074 glUniformMatrix4fv(mVorticityProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00075
00076 glUniform1i( mVorticityProgram.getUniformLocation( "mTransfer" ), 1 );
00077 glUniform1f( mVorticityProgram.getUniformLocation( "maxDataValue" ), mFlowData->getMaximalDatavalue( 2 ) );
00078 glUniform1f( mVorticityProgram.getUniformLocation( "minDataValue" ), mFlowData->getMinimalDatavalue( 2 ) );
00079
00080 }
00081
00082 void VFlowRenderer::clearShaderWrapperVorticity()
00083 {
00084 mVorticityProgram.release();
00085
00086 glActiveTextureARB(GL_TEXTURE1_ARB);
00087 glBindTexture(GL_TEXTURE_2D, 0);
00088 glDisable(GL_TEXTURE_2D);
00089 }
00090
00091 void VFlowRenderer::setShaderWrapperGlyph()
00092 {
00093 glEnable(GL_POINT_SPRITE);
00094 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
00095 glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
00096
00097 glEnable(GL_BLEND);
00098 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00099
00100 glEnable(GL_ALPHA_TEST);
00101 glAlphaFunc(GL_GREATER, 0.1f);
00102
00103 glActiveTextureARB(GL_TEXTURE0_ARB);
00104 glEnable(GL_TEXTURE_2D);
00105 if(mUseGlyph)
00106 {
00107 glBindTexture(GL_TEXTURE_2D, mGlyph.getImageHandle());
00108 }
00109 else
00110 {
00111 glBindTexture(GL_TEXTURE_2D, mTriangle.getImageHandle());
00112 }
00113
00114
00115
00116
00117
00118
00119
00120
00121 mGlyphProgram.bind();
00122
00123 mCamera.updateProjMatrix();
00124 mCamera.updateViewMatrix();
00125
00126 float layer = 1.0f;
00127 glUniform1f(mGlyphProgram.getUniformLocation("mLayer"),layer);
00128
00129 glUniform1f(mGlyphProgram.getUniformLocation("mGlyphSize"), mBaseGlyphSize);
00130 glUniform1f(mGlyphProgram.getUniformLocation("mDistance"), mCameraDistance);
00131
00132 glUniform1f(mGlyphProgram.getUniformLocation("mArrowAlpha"), arrowalpha);
00133
00134 glUniform1i(mGlyphProgram.getUniformLocation("mGlyph"),0);
00135 glUniform3fv(mGlyphProgram.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00136
00137 glUniform3fv(mGlyphProgram.getUniformLocation("mArrowColor"), 1, arrowColor->getPtr());
00138
00139 glUniformMatrix4fv(mGlyphProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00140 glUniformMatrix4fv(mGlyphProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00141
00142 float scalefactor = 2.0f;
00143
00144 if ( ( mFlowData->getExtends( ) )[ 1 ] < 1.0f )
00145 {
00146 scalefactor = 0.3f;
00147 }
00148
00149 if ( ( mFlowData->getExtends( ) )[ 1 ] > 15.0f )
00150 {
00151 scalefactor = 1.5f;
00152 }
00153
00154 glUniform1f(mGlyphProgram.getUniformLocation("mOverallScaleFactor"), scalefactor );
00155 glUniform1f(mGlyphProgram.getUniformLocation("mScalingParam"), arrows_nonunifcale );
00156 glUniform1f(mGlyphProgram.getUniformLocation("mMaxDataValue"), mFlowData->getMaximalDatavalue( activeDataValue - 1 ) );
00157 glUniform1f(mGlyphProgram.getUniformLocation("mMinDataValue"), mFlowData->getMinimalDatavalue( activeDataValue - 1 ) );
00158 glUniform1f(mGlyphProgram.getUniformLocation("mScaleProperty"), (float)activeDataValue );
00159
00160
00161
00162
00163 }
00164
00165 void VFlowRenderer::clearShaderWrapperGlyph()
00166 {
00167 mGlyphProgram.release();
00168
00169 glActiveTextureARB(GL_TEXTURE0_ARB);
00170 glBindTexture(GL_TEXTURE_2D, 0);
00171 glDisable(GL_TEXTURE_2D);
00172
00173
00174
00175
00176
00177 glDisable(GL_ALPHA_TEST);
00178 glDisable(GL_BLEND);
00179
00180 glDisable(GL_POINT_SPRITE);
00181 glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
00182 glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_FALSE);
00183 }
00184
00185 void VFlowRenderer::setShaderWrapperGlyphTf()
00186 {
00187 glEnable(GL_POINT_SPRITE);
00188 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
00189 glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
00190
00191 glEnable(GL_BLEND);
00192 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00193
00194 glEnable(GL_ALPHA_TEST);
00195 glAlphaFunc(GL_GREATER, 0.1f);
00196
00197 glActiveTextureARB(GL_TEXTURE0_ARB);
00198 glEnable(GL_TEXTURE_2D);
00199 if(mUseGlyph)
00200 {
00201 glBindTexture(GL_TEXTURE_2D, mGlyph.getImageHandle());
00202 }
00203 else
00204 {
00205 glBindTexture(GL_TEXTURE_2D, mTriangle.getImageHandle());
00206 }
00207
00208 glActiveTextureARB(GL_TEXTURE1_ARB);
00209 glEnable(GL_TEXTURE_2D);
00210 glBindTexture(GL_TEXTURE_2D, m_ArrowTransferFunctionHandle);
00211
00212
00213
00214
00215 mGlyphProgramTf.bind();
00216
00217 mCamera.updateProjMatrix();
00218 mCamera.updateViewMatrix();
00219
00220 float layer = 1.0f;
00221 glUniform1f(mGlyphProgramTf.getUniformLocation("mLayer"),layer);
00222
00223 glUniform1f(mGlyphProgramTf.getUniformLocation("mGlyphSize"), mBaseGlyphSize);
00224 glUniform1f(mGlyphProgramTf.getUniformLocation("mDistance"), mCameraDistance);
00225
00226 glUniform1f(mGlyphProgramTf.getUniformLocation("mArrowAlpha"), arrowalpha);
00227
00228 glUniform1i(mGlyphProgramTf.getUniformLocation("mGlyph"),0);
00229 glUniform3fv(mGlyphProgramTf.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00230
00231 glUniform3fv(mGlyphProgramTf.getUniformLocation("mArrowColor"), 1, arrowColor->getPtr());
00232
00233 glUniformMatrix4fv(mGlyphProgramTf.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00234 glUniformMatrix4fv(mGlyphProgramTf.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00235
00236 float scalefactor = 2.0f;
00237
00238 if ( ( mFlowData->getExtends( ) )[ 1 ] < 1.0f )
00239 {
00240 scalefactor = 0.3f;
00241 }
00242
00243 if ( ( mFlowData->getExtends( ) )[ 1 ] > 15.0f )
00244 {
00245 scalefactor = 1.5f;
00246 }
00247
00248 glUniform1f(mGlyphProgramTf.getUniformLocation("mOverallScaleFactor"), scalefactor );
00249 glUniform1f(mGlyphProgramTf.getUniformLocation("mScalingParam"), arrows_nonunifcale );
00250 glUniform1f(mGlyphProgramTf.getUniformLocation("mMaxDataValue"), mFlowData->getMaximalDatavalue( activeDataValue - 1 ) );
00251 glUniform1f(mGlyphProgramTf.getUniformLocation("mMinDataValue"), mFlowData->getMinimalDatavalue( activeDataValue - 1 ) );
00252 glUniform1f(mGlyphProgramTf.getUniformLocation("mScaleProperty"), (float)activeDataValue );
00253
00254 glUniform1f( mGlyphProgramTf.getUniformLocation( "maxMagnitude" ), mFlowData->getMaximalMagnitude() );
00255 glUniform1f( mGlyphProgramTf.getUniformLocation( "minMagnitude" ), mFlowData->getMinimalMagnitude() );
00256
00257 glUniform1i(mGlyphProgramTf.getUniformLocation("mTransfer"),1);
00258
00259 }
00260
00261 void VFlowRenderer::clearShaderWrapperGlyphTf()
00262 {
00263 mGlyphProgramTf.release();
00264
00265 glActiveTextureARB(GL_TEXTURE0_ARB);
00266 glBindTexture(GL_TEXTURE_2D, 0);
00267 glDisable(GL_TEXTURE_2D);
00268
00269 glActiveTextureARB(GL_TEXTURE1_ARB);
00270 glEnable(GL_TEXTURE_2D);
00271 glBindTexture(GL_TEXTURE_2D, 0);
00272
00273 glDisable(GL_ALPHA_TEST);
00274 glDisable(GL_BLEND);
00275
00276 glDisable(GL_POINT_SPRITE);
00277 glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
00278 glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_FALSE);
00279 }
00280
00281 void VFlowRenderer::setShaderWrapperIcon()
00282 {
00283 mIconProgram.bind();
00284
00285 mCamera.updateProjMatrix();
00286 mCamera.updateViewMatrix();
00287
00288 glUniformMatrix4fv(mIconProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00289 glUniformMatrix4fv(mIconProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00290 }
00291
00292 void VFlowRenderer::clearShaderWrapperIcon()
00293 {
00294 mIconProgram.release();
00295 }
00296
00297 void VFlowRenderer::setShaderWrapperStreamLines()
00298 {
00299 glEnable(GL_BLEND);
00300 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00301
00302 mCamera.updateProjMatrix();
00303 mCamera.updateViewMatrix();
00304
00305 mRenderToVBProgram.bind();
00306
00307 glUniformMatrix4fv(mRenderToVBProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00308 glUniformMatrix4fv(mRenderToVBProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00309
00310 glUniform1f(mRenderToVBProgram.getUniformLocation("mAlpha"), streamlinesalpha);
00311
00312 glUniform3fv(mRenderToVBProgram.getUniformLocation("mColor"), 1, streamlinesColor->getPtr());
00313 }
00314
00315 void VFlowRenderer::clearShaderWrapperStreamLines()
00316 {
00317 mRenderToVBProgram.release();
00318
00319 glBindTexture(GL_TEXTURE_2D, 0);
00320 glDisable(GL_TEXTURE_2D);
00321
00322 glDisable(GL_BLEND);
00323 }
00324
00325 void VFlowRenderer::setShaderWrapperStreamLinesGlyph()
00326 {
00327 glEnable(GL_BLEND);
00328 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00329
00330 glActiveTextureARB(GL_TEXTURE0_ARB);
00331 glEnable(GL_TEXTURE_2D);
00332 glBindTexture(GL_TEXTURE_2D, mTriangle.getImageHandle());
00333
00334 mCamera.updateProjMatrix();
00335 mCamera.updateViewMatrix();
00336
00337 mRenderToVBProgramGlyph.bind();
00338
00339 glUniformMatrix4fv(mRenderToVBProgramGlyph.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00340 glUniformMatrix4fv(mRenderToVBProgramGlyph.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00341
00342 glUniform1f(mRenderToVBProgramGlyph.getUniformLocation("mAlpha"), streamlinesalpha);
00343 glUniform1i(mRenderToVBProgramGlyph.getUniformLocation("mGlyph"),0);
00344
00345 glUniform3fv(mRenderToVBProgramGlyph.getUniformLocation("mColor"), 1, streamlinesColor->getPtr());
00346 }
00347
00348 void VFlowRenderer::clearShaderWrapperStreamLinesGlyph()
00349 {
00350 mRenderToVBProgramGlyph.release();
00351
00352 glActiveTextureARB(GL_TEXTURE0_ARB);
00353 glBindTexture(GL_TEXTURE_2D, 0);
00354 glDisable(GL_TEXTURE_2D);
00355
00356 glDisable(GL_BLEND);
00357 }
00358
00359 void VFlowRenderer::setShaderWrapperStreamLinesTf( int m_TimeStep )
00360 {
00361
00362 glEnable(GL_BLEND);
00363 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00364
00365 glActiveTextureARB(GL_TEXTURE0_ARB);
00366 glEnable(GL_TEXTURE_2D);
00367 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00368
00369 glActiveTextureARB(GL_TEXTURE1_ARB);
00370 glEnable(GL_TEXTURE_2D);
00371 glBindTexture(GL_TEXTURE_2D, m_StreamLineTransferFunctionHandle);
00372
00373 mCamera.updateProjMatrix();
00374 mCamera.updateViewMatrix();
00375
00376 mRenderToVBProgramTf.bind();
00377
00378 glUniform1i(mRenderToVBProgramTf.getUniformLocation("mVelocity"),0);
00379 glUniform1i(mRenderToVBProgramTf.getUniformLocation("mTransfer"),1);
00380
00381 glUniformMatrix4fv(mRenderToVBProgramTf.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00382 glUniformMatrix4fv(mRenderToVBProgramTf.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00383
00384 glUniformMatrix4fv(mRenderToVBProgramTf.getUniformLocation("mVertexToTexture"),1,false,mFlowData->getVertexToTexture());
00385
00386 glUniform1f( mRenderToVBProgramTf.getUniformLocation( "maxMagnitude" ), mFlowData->getMaximalMagnitude() );
00387 glUniform1f( mRenderToVBProgramTf.getUniformLocation( "minMagnitude" ), mFlowData->getMinimalMagnitude() );
00388
00389 glUniform3fv(mRenderToVBProgramTf.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00390
00391 }
00392
00393 void VFlowRenderer::clearShaderWrapperStreamLinesTf()
00394 {
00395 mRenderToVBProgramTf.release();
00396
00397 glActiveTextureARB(GL_TEXTURE0_ARB);
00398 glBindTexture(GL_TEXTURE_2D, 0);
00399 glDisable(GL_TEXTURE_2D);
00400
00401 glActiveTextureARB(GL_TEXTURE1_ARB);
00402 glEnable(GL_TEXTURE_2D);
00403 glBindTexture(GL_TEXTURE_2D, 0);
00404
00405 glDisable(GL_BLEND);
00406 }
00407
00408 void VFlowRenderer::setShaderWrapperStreamLinesTfGlyph( int m_TimeStep )
00409 {
00410
00411 glEnable(GL_BLEND);
00412 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00413
00414 glActiveTextureARB(GL_TEXTURE0_ARB);
00415 glEnable(GL_TEXTURE_2D);
00416 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00417
00418 glActiveTextureARB(GL_TEXTURE1_ARB);
00419 glEnable(GL_TEXTURE_2D);
00420 glBindTexture(GL_TEXTURE_2D, m_StreamLineTransferFunctionHandle);
00421
00422 glActiveTextureARB(GL_TEXTURE2_ARB);
00423 glEnable(GL_TEXTURE_2D);
00424 glBindTexture(GL_TEXTURE_2D, mTriangle.getImageHandle());
00425
00426 mCamera.updateProjMatrix();
00427 mCamera.updateViewMatrix();
00428
00429 mRenderToVBProgramTfGlyph.bind();
00430
00431 glUniform1i(mRenderToVBProgramTfGlyph.getUniformLocation("mVelocity"),0);
00432 glUniform1i(mRenderToVBProgramTfGlyph.getUniformLocation("mTransfer"),1);
00433 glUniform1i(mRenderToVBProgramTfGlyph.getUniformLocation("mGlyph"),2);
00434
00435 glUniformMatrix4fv(mRenderToVBProgramTfGlyph.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00436 glUniformMatrix4fv(mRenderToVBProgramTfGlyph.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00437
00438 glUniformMatrix4fv(mRenderToVBProgramTfGlyph.getUniformLocation("mVertexToTexture"),1,false,mFlowData->getVertexToTexture());
00439
00440 glUniform1f( mRenderToVBProgramTfGlyph.getUniformLocation( "maxMagnitude" ), mFlowData->getMaximalMagnitude() );
00441 glUniform1f( mRenderToVBProgramTfGlyph.getUniformLocation( "minMagnitude" ), mFlowData->getMinimalMagnitude() );
00442
00443 glUniform3fv(mRenderToVBProgramTfGlyph.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00444
00445 }
00446
00447 void VFlowRenderer::clearShaderWrapperStreamLinesTfGlyph()
00448 {
00449 mRenderToVBProgramTfGlyph.release();
00450
00451 glActiveTextureARB(GL_TEXTURE0_ARB);
00452 glBindTexture(GL_TEXTURE_2D, 0);
00453 glDisable(GL_TEXTURE_2D);
00454
00455 glActiveTextureARB(GL_TEXTURE1_ARB);
00456 glEnable(GL_TEXTURE_2D);
00457 glBindTexture(GL_TEXTURE_2D, 0);
00458
00459 glActiveTextureARB(GL_TEXTURE2_ARB);
00460 glEnable(GL_TEXTURE_2D);
00461 glBindTexture(GL_TEXTURE_2D, 0);
00462
00463 glDisable(GL_BLEND);
00464 }
00465
00466 void VFlowRenderer::setShaderWrapperLIC( int m_TimeStep )
00467 {
00468
00469 glActiveTextureARB(GL_TEXTURE0_ARB);
00470 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00471 glDisable(GL_TEXTURE_2D);
00472
00473 glActiveTextureARB(GL_TEXTURE1_ARB);
00474 glEnable(GL_TEXTURE_2D);
00475 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getTextureHandle());
00476
00477
00478 glEnable(GL_BLEND);
00479 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00480
00481 mLICProgram.bind();
00482
00483 mCamera.updateProjMatrix();
00484 mCamera.updateViewMatrix();
00485
00486
00487 glUniformMatrix4fv(mLICProgram.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00488 glUniformMatrix4fv(mLICProgram.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00489
00490
00491 glUniform1i(mLICProgram.getUniformLocation("mVelocity"),0);
00492 glUniform1i(mLICProgram.getUniformLocation("mNoise"),1);
00493
00494 glUniform1i(mLICProgram.getUniformLocation("mSteps"),licsteps);
00495 glUniform1i(mLICProgram.getUniformLocation("mStepSize"),licstepsize);
00496
00497 glUniform1f(mLICProgram.getUniformLocation("mAlpha"),licalpha);
00498
00499 glUniform3fv(mLICProgram.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00500
00501
00502 }
00503
00504 void VFlowRenderer::clearShaderWrapperLIC()
00505 {
00506 mLICProgram.release();
00507
00508 glDisable(GL_BLEND);
00509
00510
00511 glActiveTextureARB(GL_TEXTURE0_ARB);
00512 glBindTexture(GL_TEXTURE_2D, 0);
00513 glDisable(GL_TEXTURE_2D);
00514
00515 glActiveTextureARB(GL_TEXTURE1_ARB);
00516 glEnable(GL_TEXTURE_2D);
00517 glBindTexture(GL_TEXTURE_2D, 0);
00518 }
00519
00520 void VFlowRenderer::setShaderWrapperLICTexture( int m_TimeStep )
00521 {
00522
00523 mLicTextureOffset += 0.05f;
00524 if(mLicTextureOffset > 1.0f)
00525 {
00526 mLicTextureOffset -= 1.0f;
00527 }
00528
00529
00530
00531
00532 glActiveTextureARB(GL_TEXTURE0_ARB);
00533 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00534 glDisable(GL_TEXTURE_2D);
00535
00536 glActiveTextureARB(GL_TEXTURE1_ARB);
00537 glEnable(GL_TEXTURE_2D);
00538 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getTextureHandle());
00539
00540 glActiveTextureARB(GL_TEXTURE2_ARB);
00541 glEnable(GL_TEXTURE_2D);
00542 glBindTexture(GL_TEXTURE_2D, mGaussTextureHandle);
00543
00544
00545 glEnable(GL_BLEND);
00546 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00547
00548 mLICProgramTexture.bind();
00549
00550 mCamera.updateProjMatrix();
00551 mCamera.updateViewMatrix();
00552
00553
00554 glUniformMatrix4fv(mLICProgramTexture.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00555 glUniformMatrix4fv(mLICProgramTexture.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00556
00557
00558 glUniform1i(mLICProgramTexture.getUniformLocation("mVelocity"),0);
00559 glUniform1i(mLICProgramTexture.getUniformLocation("mNoise"),1);
00560 glUniform1i(mLICProgramTexture.getUniformLocation("mFilter"),2);
00561
00562 glUniform1i(mLICProgramTexture.getUniformLocation("mSteps"),licsteps);
00563 glUniform1i(mLICProgramTexture.getUniformLocation("mStepSize"),licstepsize);
00564
00565 glUniform1f(mLICProgramTexture.getUniformLocation("mAlpha"),licalpha);
00566
00567 glUniform1f(mLICProgramTexture.getUniformLocation("mTextureOffset"),mLicTextureOffset);
00568
00569 glUniform3fv(mLICProgramTexture.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00570
00571
00572 }
00573
00574 void VFlowRenderer::clearShaderWrapperLICTexture()
00575 {
00576 mLICProgramTexture.release();
00577
00578 glDisable(GL_BLEND);
00579
00580
00581 glActiveTextureARB(GL_TEXTURE0_ARB);
00582 glBindTexture(GL_TEXTURE_2D, 0);
00583 glDisable(GL_TEXTURE_2D);
00584
00585 glActiveTextureARB(GL_TEXTURE1_ARB);
00586 glEnable(GL_TEXTURE_2D);
00587 glBindTexture(GL_TEXTURE_2D, 0);
00588
00589 glActiveTextureARB(GL_TEXTURE2_ARB);
00590 glEnable(GL_TEXTURE_2D);
00591 glBindTexture(GL_TEXTURE_2D, 0);
00592 }
00593
00594 void VFlowRenderer::setShaderWrapperOLICTexture( int m_TimeStep )
00595 {
00596
00597 mLicTextureOffset += 0.05f;
00598 if(mLicTextureOffset > 1.0f)
00599 {
00600 mLicTextureOffset -= 1.0f;
00601 }
00602
00603
00604
00605
00606 glActiveTextureARB(GL_TEXTURE0_ARB);
00607 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00608 glDisable(GL_TEXTURE_2D);
00609
00610 glActiveTextureARB(GL_TEXTURE1_ARB);
00611 glEnable(GL_TEXTURE_2D);
00612 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getTextureHandle());
00613
00614 glActiveTextureARB(GL_TEXTURE2_ARB);
00615 glEnable(GL_TEXTURE_2D);
00616 glBindTexture(GL_TEXTURE_2D, mGaussTextureHandle);
00617
00618 glActiveTextureARB(GL_TEXTURE3_ARB);
00619 glEnable(GL_TEXTURE_2D);
00620 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getFrolicHandle());
00621
00622
00623 glEnable(GL_BLEND);
00624 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00625
00626 mOLICProgramTexture.bind();
00627
00628 mCamera.updateProjMatrix();
00629 mCamera.updateViewMatrix();
00630
00631
00632 glUniformMatrix4fv(mOLICProgramTexture.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00633 glUniformMatrix4fv(mOLICProgramTexture.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00634
00635
00636 glUniform1i(mOLICProgramTexture.getUniformLocation("mVelocity"),0);
00637 glUniform1i(mOLICProgramTexture.getUniformLocation("mNoise"),1);
00638 glUniform1i(mOLICProgramTexture.getUniformLocation("mFilter"),2);
00639 glUniform1i(mOLICProgramTexture.getUniformLocation("mOrient"),3);
00640
00641 glUniform1i(mOLICProgramTexture.getUniformLocation("mSteps"),licsteps);
00642 glUniform1i(mOLICProgramTexture.getUniformLocation("mStepSize"),licstepsize);
00643
00644 glUniform1f(mOLICProgramTexture.getUniformLocation("mAlpha"),licalpha);
00645
00646 glUniform1f(mOLICProgramTexture.getUniformLocation("mTextureOffset"),mLicTextureOffset);
00647
00648 glUniform3fv(mOLICProgramTexture.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00649
00650
00651 }
00652
00653 void VFlowRenderer::clearShaderWrapperOLICTexture()
00654 {
00655 mOLICProgramTexture.release();
00656
00657 glDisable(GL_BLEND);
00658
00659
00660 glActiveTextureARB(GL_TEXTURE0_ARB);
00661 glBindTexture(GL_TEXTURE_2D, 0);
00662 glDisable(GL_TEXTURE_2D);
00663
00664 glActiveTextureARB(GL_TEXTURE1_ARB);
00665 glEnable(GL_TEXTURE_2D);
00666 glBindTexture(GL_TEXTURE_2D, 0);
00667
00668 glActiveTextureARB(GL_TEXTURE2_ARB);
00669 glEnable(GL_TEXTURE_2D);
00670 glBindTexture(GL_TEXTURE_2D, 0);
00671
00672 glActiveTextureARB(GL_TEXTURE3_ARB);
00673 glEnable(GL_TEXTURE_2D);
00674 glBindTexture(GL_TEXTURE_2D, 0);
00675 }
00676
00677 void VFlowRenderer::setShaderWrapperLICTf( int m_TimeStep )
00678 {
00679
00680 glActiveTextureARB(GL_TEXTURE0_ARB);
00681 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00682 glDisable(GL_TEXTURE_2D);
00683
00684 glActiveTextureARB(GL_TEXTURE1_ARB);
00685 glEnable(GL_TEXTURE_2D);
00686 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getTextureHandle());
00687
00688 glActiveTextureARB(GL_TEXTURE2_ARB);
00689 glEnable(GL_TEXTURE_2D);
00690 glBindTexture(GL_TEXTURE_2D, m_LicTransferFunctionHandle);
00691
00692
00693 glEnable(GL_BLEND);
00694 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00695
00696 mLICProgramTf.bind();
00697
00698 mCamera.updateProjMatrix();
00699 mCamera.updateViewMatrix();
00700
00701
00702 glUniformMatrix4fv(mLICProgramTf.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00703 glUniformMatrix4fv(mLICProgramTf.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00704
00705
00706 glUniform1i(mLICProgramTf.getUniformLocation("mVelocity"),0);
00707 glUniform1i(mLICProgramTf.getUniformLocation("mNoise"),1);
00708 glUniform1i(mLICProgramTf.getUniformLocation("mTransfer"),2);
00709
00710 glUniform1i(mLICProgramTf.getUniformLocation("mSteps"),licsteps);
00711 glUniform1i(mLICProgramTf.getUniformLocation("mStepSize"),licstepsize);
00712
00713 glUniform1f(mLICProgramTf.getUniformLocation("mAlpha"),licalpha);
00714
00715 glUniform3fv(mLICProgramTf.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00716
00717
00718 }
00719
00720 void VFlowRenderer::clearShaderWrapperLICTf()
00721 {
00722 mLICProgramTf.release();
00723
00724 glDisable(GL_BLEND);
00725
00726
00727 glActiveTextureARB(GL_TEXTURE0_ARB);
00728 glBindTexture(GL_TEXTURE_2D, 0);
00729 glDisable(GL_TEXTURE_2D);
00730
00731 glActiveTextureARB(GL_TEXTURE1_ARB);
00732 glEnable(GL_TEXTURE_2D);
00733 glBindTexture(GL_TEXTURE_2D, 0);
00734
00735 glActiveTextureARB(GL_TEXTURE2_ARB);
00736 glEnable(GL_TEXTURE_2D);
00737 glBindTexture(GL_TEXTURE_2D, 0);
00738 }
00739
00740 void VFlowRenderer::setShaderWrapperLICTextureTf( int m_TimeStep )
00741 {
00742
00743 mLicTextureOffset += 0.05f;
00744 if(mLicTextureOffset > 1.0f)
00745 {
00746 mLicTextureOffset -= 1.0f;
00747 }
00748
00749 glActiveTextureARB(GL_TEXTURE0_ARB);
00750 glBindTexture(GL_TEXTURE_2D, mFlowData->getVelocityHandle(m_TimeStep));
00751 glDisable(GL_TEXTURE_2D);
00752
00753 glActiveTextureARB(GL_TEXTURE1_ARB);
00754 glEnable(GL_TEXTURE_2D);
00755 glBindTexture(GL_TEXTURE_2D, mWhiteNoise.getTextureHandle());
00756
00757 glActiveTextureARB(GL_TEXTURE2_ARB);
00758 glEnable(GL_TEXTURE_2D);
00759 glBindTexture(GL_TEXTURE_2D, m_LicTransferFunctionHandle);
00760
00761 glActiveTextureARB(GL_TEXTURE3_ARB);
00762 glEnable(GL_TEXTURE_2D);
00763 glBindTexture(GL_TEXTURE_2D, mGaussTextureHandle);
00764
00765
00766 glEnable(GL_BLEND);
00767 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00768
00769 mLICProgramTextureTf.bind();
00770
00771 mCamera.updateProjMatrix();
00772 mCamera.updateViewMatrix();
00773
00774
00775 glUniformMatrix4fv(mLICProgramTextureTf.getUniformLocation("mViewMatrix"),1,false,mCamera.getViewMatrix());
00776 glUniformMatrix4fv(mLICProgramTextureTf.getUniformLocation("mProjectionMatrix"),1,false,mCamera.getProjectionMatrix());
00777
00778
00779 glUniform1i(mLICProgramTextureTf.getUniformLocation("mVelocity"),0);
00780 glUniform1i(mLICProgramTextureTf.getUniformLocation("mNoise"),1);
00781 glUniform1i(mLICProgramTextureTf.getUniformLocation("mTransfer"),2);
00782 glUniform1i(mLICProgramTextureTf.getUniformLocation("mFilter"),3);
00783
00784 glUniform1i(mLICProgramTextureTf.getUniformLocation("mSteps"),licsteps);
00785 glUniform1i(mLICProgramTextureTf.getUniformLocation("mStepSize"),licstepsize);
00786
00787 glUniform1f(mLICProgramTextureTf.getUniformLocation("mAlpha"),licalpha);
00788
00789 glUniform3fv(mLICProgramTextureTf.getUniformLocation("mExtends"), 1, mFlowData->getExtends());
00790
00791 glUniform1f(mLICProgramTextureTf.getUniformLocation("mTextureOffset"),mLicTextureOffset);
00792
00793
00794 }
00795
00796 void VFlowRenderer::clearShaderWrapperLICTextureTf()
00797 {
00798 mLICProgramTextureTf.release();
00799
00800 glDisable(GL_BLEND);
00801
00802
00803 glActiveTextureARB(GL_TEXTURE0_ARB);
00804 glBindTexture(GL_TEXTURE_2D, 0);
00805 glDisable(GL_TEXTURE_2D);
00806
00807 glActiveTextureARB(GL_TEXTURE1_ARB);
00808 glEnable(GL_TEXTURE_2D);
00809 glBindTexture(GL_TEXTURE_2D, 0);
00810
00811 glActiveTextureARB(GL_TEXTURE2_ARB);
00812 glEnable(GL_TEXTURE_2D);
00813 glBindTexture(GL_TEXTURE_2D, 0);
00814
00815 glActiveTextureARB(GL_TEXTURE3_ARB);
00816 glEnable(GL_TEXTURE_2D);
00817 glBindTexture(GL_TEXTURE_2D, 0);
00818 }