//---------------------------------------------------------------------------- void Smoke2D::SetNumActiveVortices (int numActive) { if (0 <= numActive && numActive <= mNumVortices) { mNumActive = numActive; } else { mNumActive = 0; } memset(mTimelessVelocity[0], 0, mNumPixels*sizeof(Vector2f)); for (int j = 0; j <= mJMax; ++j) { for (int i = 0; i <= mIMax; ++i) { mTimelessVelocity[j][i] += mGravity + mTimelessWind[j][i]; for (int v = 0; v < mNumActive; ++v) { mTimelessVelocity[j][i] += mTimelessVortex[j][i][v]; } } } ComputeSource(); ComputeVortexOverlay(); }
/** Executes test iteration. * * @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. */ tcu::TestNode::IterateResult ShaderDrawParametersExtensionTestCase::iterate() { if (!m_context.getContextInfo().isExtensionSupported("GL_ARB_shader_draw_parameters")) { m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Not Supported"); return STOP; } const Functions& gl = m_context.getRenderContext().getFunctions(); std::string shader = sdp_compute_extensionCheck; ProgramSources sources; sources << ComputeSource(shader); ShaderProgram program(gl, sources); if (!program.isOk()) { m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); m_testCtx.getLog() << tcu::TestLog::Message << "Checking shader preprocessor directives failed. Source:\n" << shader.c_str() << "InfoLog:\n" << program.getShaderInfo(SHADERTYPE_COMPUTE).infoLog << "\n" << tcu::TestLog::EndMessage; return STOP; } m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); return STOP; }
//---------------------------------------------------------------------------- void Smoke2D::CreateFluidUpdateEffect (VisualEffect*& effect, VisualEffectInstance*& instance) { PixelShader* pshader = new0 PixelShader("Wm5.FluidUpdate2", 1, 1, 3, 3, false); pshader->SetInput(0, "vertexTCoord", Shader::VT_FLOAT2, Shader::VS_TEXCOORD0); pshader->SetOutput(0, "pixelColor", Shader::VT_FLOAT4, Shader::VS_COLOR0); pshader->SetConstant(0, "SpaceParam", 1); pshader->SetConstant(1, "TimeParam", 1); pshader->SetConstant(2, "ViscParam", 1); pshader->SetSampler(0, "StateSampler", Shader::ST_2D); pshader->SetSampler(1, "AdvectionSampler", Shader::ST_2D); pshader->SetSampler(2, "SourceSampler", Shader::ST_2D); pshader->SetFilter(1, Shader::SF_LINEAR); pshader->SetBaseRegisters(msFluidUpdatePRegisters); pshader->SetTextureUnits(msFluidUpdatePTextureUnits); pshader->SetPrograms(msFluidUpdatePPrograms); mIP->CreateEffect(pshader, effect, instance); ShaderFloat* spaceParamConstant = new0 ShaderFloat(1); float* spaceParam = spaceParamConstant->GetData(); spaceParam[0] = mDx; spaceParam[1] = mDy; spaceParam[2] = 1.0f/(float)mIMax; spaceParam[3] = 1.0f/(float)mJMax; instance->SetPixelConstant(0, "SpaceParam", spaceParamConstant); ShaderFloat* timeParamConstant = new0 ShaderFloat(1); float* timeParam = timeParamConstant->GetData(); timeParam[0] = mDtDivDx; timeParam[1] = mDtDivDy; timeParam[2] = mDt; instance->SetPixelConstant(0, "TimeParam", timeParamConstant); ShaderFloat* viscParamConstant = new0 ShaderFloat(1); float* viscParam = viscParamConstant->GetData(); viscParam[0] = mDenLambdaX; viscParam[1] = mDenLambdaY; viscParam[2] = mVelLambdaX; viscParam[3] = mVelLambdaY; instance->SetPixelConstant(0, "ViscParam", viscParamConstant); mSourceTexture = new0 Texture2D(Texture::TF_A32B32G32R32F, mIMaxP1, mJMaxP1, 1); ComputeSource(); instance->SetPixelTexture(0, "StateSampler", mIP->GetTarget(1)->GetColorTexture(0)); instance->SetPixelTexture(0, "AdvectionSampler", mIP->GetTarget(4)->GetColorTexture(0)); instance->SetPixelTexture(0, "SourceSampler", mSourceTexture); mRenderer->Bind(mSourceTexture); }