Zum einen würde ich empfehlen, die GLSLShader-Klasse zu verwenden anstatt GL direkt anzusprechen. Das Wiki enthält beide Wege, aber die GLSLShader-Klasse ist besser, weil sie mehr Fehlerfälle abfängt und explizite Setter Uniforms usw bietet.
Was deinen Shader angeht...ich bin nicht sicher, ob deine Interpolation so korrekt ist. Aber zumindest sollte es nicht so einfarbig aussehen. Was aber definitiv falsch ist, ist der Teil nach "Was machen diese Zeilen?"...damit setzt du die Sampler auf die entsprechenden Einheiten. Bei dir setzt der Code aber alle auf Unit 1. Das müsste eher so aussehen:
ARBShaderObjects.glUniform1iARB(alpha, 0);//<--
ARBShaderObjects.glUniform1iARB(grass, 1);//<--
ARBShaderObjects.glUniform1iARB(sand, 2);//<--
ARBShaderObjects.glUniform1iARB(stone, 3);//<--
...oder je nachdem, auf welcher Stage du welche Textur aufgebracht hast.