//----------------------------------------------------------------------- void GLSLESProgramPipeline::updatePassIterationUniforms(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { size_t index = params->getPassIterationNumberIndex(); GLUniformReferenceIterator currentUniform = mGLUniformReferences.begin(); GLUniformReferenceIterator endUniform = mGLUniformReferences.end(); // Need to find the uniform that matches the multi pass entry for (;currentUniform != endUniform; ++currentUniform) { // Get the index in the parameter real list if (index == currentUniform->mConstantDef->physicalIndex) { #if OGRE_PLATFORM != OGRE_PLATFORM_NACL GLuint progID = 0; if (getVertexProgram() && currentUniform->mSourceProgType == GPT_VERTEX_PROGRAM) { progID = getVertexProgram()->getGLProgramHandle(); OGRE_CHECK_GL_ERROR(glProgramUniform1fvEXT(progID, currentUniform->mLocation, 1, params->getFloatPointer(index))); } if (mFragmentProgram && currentUniform->mSourceProgType == GPT_FRAGMENT_PROGRAM) { progID = mFragmentProgram->getGLProgramHandle(); OGRE_CHECK_GL_ERROR(glProgramUniform1fvEXT(progID, currentUniform->mLocation, 1, params->getFloatPointer(index))); } #endif // There will only be one multipass entry return; } } } }
void ATI_FS_GLGpuProgram::bindProgramPassIterationParameters(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { size_t physicalIndex = params->getPassIterationNumberIndex(); size_t logicalIndex = params->getFloatLogicalIndexForPhysicalIndex(physicalIndex); const float* pFloat = params->getFloatPointer(physicalIndex); glSetFragmentShaderConstantATI( GL_CON_0_ATI + (GLuint)logicalIndex, pFloat); } }
void GLSLSeparableProgram::updatePassIterationUniforms(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { size_t index = params->getPassIterationNumberIndex(); GLUniformReferenceIterator currentUniform = mGLUniformReferences.begin(); GLUniformReferenceIterator endUniform = mGLUniformReferences.end(); // Need to find the uniform that matches the multi pass entry for (;currentUniform != endUniform; ++currentUniform) { // Get the index in the parameter real list if (index == currentUniform->mConstantDef->physicalIndex) { GLuint progID = 0; if (mVertexShader && currentUniform->mSourceProgType == GPT_VERTEX_PROGRAM) { progID = mVertexShader->getGLProgramHandle(); } if (mFragmentShader && currentUniform->mSourceProgType == GPT_FRAGMENT_PROGRAM) { progID = mFragmentShader->getGLProgramHandle(); } if (mGeometryShader && currentUniform->mSourceProgType == GPT_GEOMETRY_PROGRAM) { progID = mGeometryShader->getGLProgramHandle(); } if (mDomainShader && currentUniform->mSourceProgType == GPT_DOMAIN_PROGRAM) { progID = mDomainShader->getGLProgramHandle(); } if (mHullShader && currentUniform->mSourceProgType == GPT_HULL_PROGRAM) { progID = mHullShader->getGLProgramHandle(); } if (mComputeShader && currentUniform->mSourceProgType == GPT_COMPUTE_PROGRAM) { progID = mComputeShader->getGLProgramHandle(); } OGRE_CHECK_GL_ERROR(glProgramUniform1fv(progID, currentUniform->mLocation, 1, params->getFloatPointer(index))); // There will only be one multipass entry return; } } } }
void GLArbGpuProgram::bindProgramPassIterationParameters(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { GLenum type = getGLShaderType(mType); size_t physicalIndex = params->getPassIterationNumberIndex(); size_t logicalIndex = params->getFloatLogicalIndexForPhysicalIndex(physicalIndex); const float* pFloat = params->getFloatPointer(physicalIndex); glProgramLocalParameter4fvARB(type, (GLuint)logicalIndex, pFloat); } }
void GLArbGpuProgram::bindProgramPassIterationParameters(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { GLenum type = (mType == GPT_VERTEX_PROGRAM) ? GL_VERTEX_PROGRAM_ARB : GL_FRAGMENT_PROGRAM_ARB; size_t physicalIndex = params->getPassIterationNumberIndex(); size_t logicalIndex = params->getFloatLogicalIndexForPhysicalIndex(physicalIndex); const float* pFloat = params->getFloatPointer(physicalIndex); glProgramLocalParameter4fvARB(type, (GLuint)logicalIndex, pFloat); } }
//----------------------------------------------------------------------- void GLSLLinkProgram::updatePassIterationUniforms(GpuProgramParametersSharedPtr params) { if (params->hasPassIterationNumber()) { size_t index = params->getPassIterationNumberIndex(); GLUniformReferenceIterator currentUniform = mGLUniformReferences.begin(); GLUniformReferenceIterator endUniform = mGLUniformReferences.end(); // Need to find the uniform that matches the multi pass entry for (;currentUniform != endUniform; ++currentUniform) { // Get the index in the parameter real list if (index == currentUniform->mConstantDef->physicalIndex) { OGRE_CHECK_GL_ERROR(glUniform1fv(currentUniform->mLocation, 1, params->getFloatPointer(index))); // There will only be one multipass entry return; } } } }