Hi everyone,
How to write the following shaders by using nvidia shaders:
consistencyShaderWithMask = glGenFragmentShadersATI(1);
glBindFragmentShaderATI(consistencyShaderWithMask);
glBeginFragmentShaderATI();
glSetFragmentShaderConstantATI(GL_CON_0_ATI, c0);
// Texture 0: Reference image (active view)
// Texture 1: current view (with perspective projection), alpha is binary segmentation
glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
glSampleMapATI(GL_REG_1_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STQ_DQ_ATI);
// Calculate absolute difference
glColorFragmentOp2ATI(GL_SUB_ATI, GL_REG_3_ATI, GL_NONE, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_NONE, GL_NONE);
glColorFragmentOp3ATI(GL_CND0_ATI, GL_REG_4_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_NEGATE_BIT_ATI,
GL_REG_3_ATI, GL_NONE, GL_NONE);
glEndFragmentShaderATI();
The main problem here is
glSampleMapATI(GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
glSampleMapATI(GL_REG_1_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STQ_DQ_ATI);
Calling shaders:
glBindFragmentShaderATI(consistencyShaderWithMask);
glEnable(GL_FRAGMENT_SHADER_ATI);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1, 0, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
[_images[_activeView] bindInput: GL_TEXTURE0_ARB];
for (i = 0; i < _nImages; ++i)
{
glActiveTexture(GL_TEXTURE1_ARB);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(0.5, 0.5, 0.5);
glTranslatef(1.0, 1.0, 1.0);
glMultMatrixd(_projs[i]);
glMultMatrixd(_models[i]);
glMultMatrixd(_invActiveModel);
glMatrixMode(GL_MODELVIEW);
[_images[i] bindInput: GL_TEXTURE1_ARB];
glBegin(GL_QUADS);
glMultiTexCoord2f(GL_TEXTURE0_ARB, 0, 0);
glMultiTexCoord4f(GL_TEXTURE1_ARB, -x, -y, z, 1);
glVertex2f(0, 0);
glMultiTexCoord2f(GL_TEXTURE0_ARB, 0, 1);
glMultiTexCoord4f(GL_TEXTURE1_ARB, -x, y, z, 1);
glVertex2f(0, 1);
glMultiTexCoord2f(GL_TEXTURE0_ARB, 1, 1);
glMultiTexCoord4f(GL_TEXTURE1_ARB, x, y, z, 1);
glVertex2f(1, 1);
glMultiTexCoord2f(GL_TEXTURE0_ARB, 1, 0);
glMultiTexCoord4f(GL_TEXTURE1_ARB, x, -y, z, 1);
glVertex2f(1, 0);
glEnd();
}
glDisable(GL_BLEND);
glDisable(GL_FRAGMENT_SHADER_ATI);