Voila le code de base avec deux textures, la texture de base ( couleur ) plus une en niveau de gris qu'on va utiliser pour contrôler le canal alpha.
Notez qu'il faut absolument ajouter opacity avec une valeur inférieure à 1.0 dans la déclaration du material pour que la transparence alpha soit prise en compte dans le shader ogsl
Évidemment, pour que le shader soit parfaitement exploitable dans un projet, faudrait aussi ajouter le calcul de la lumière, mais c'est pas le but de l'exemple si présent

J'ai ajouté des couleurs pour mieux suivre la démarche.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<demoniak3d>
<scene name="Demo Alpha Mask" display_fps="TRUE" vsync="TRUE" show_ref_grid="FALSE" display_hyperion_logo="TRUE" > <infos
title="opacity mask"
author="www.Steph3D.net"
description="mini tut" />
<window_size width="1024" height="768" />
<global_ambient_light r="0.1" g="0.1" b="0.1" a="1.0" />
<background_color r="0.2" g="0.3" b="0.3" />
<check_hardware_caps glsl="TRUE" />
</scene>
<camera name="Main_Camera" navigation_mode="FLY" display_position="FALSE" display_view_direction="FALSE" >
<position x="-4.60" y="92.95" z="395.69" />
<lookat x="0.01" y="-0.18" z="-0.98" w="0.0" />
</camera>
<mesh name="mesh_plane" shape_type="PLANE" lighting="FALSE" texturing="TRUE" polygon_mode="SOLID" use_vbo="TRUE" >
<plane x_size="400.0" z_size="400.0" num_segs_x="10" num_segs_z="10" />
<attach_material name="Mat01" />
<texture material_name="Mat01" texture_name="txt1" texture_unit="0" />
<texture material_name="Mat01" texture_name="txt2" texture_unit="1" />
<position x="0.0" y="0.0" z="0.0" />
<orientation pitch="90.0" />
</mesh>
<material name="Mat01" shader_program_name="Shader01" opacity="0.0" />
<texture name="txt1" filename="GFX/GPUcolor.jpg" filtering_mode="TRUE" />
<texture name="txt2" filename="GFX/GPUmask.jpg" filtering_mode="TRUE" />
<shader_program name="Shader01" >
<constant_1i name="Color" value="0" />
<constant_1i name="Mask" value="1" />
<raw_data><![CDATA[ [Vertex_Shader]
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0; // UVW des couleur sur le canal 0
gl_TexCoord[1] = gl_MultiTexCoord1; // UVW du mask sur le canal 1
gl_Position = ftransform();
}
[Pixel_Shader]
uniform sampler2D Color; // déclaration de la map de couleur
uniform sampler2D Mask; // déclaration de la map mask
void main (void)
{
gl_FragColor = texture2D( Color, gl_TexCoord[0].xy); // texture de couleur
gl_FragColor.a = texture2D( Mask, gl_TexCoord[1].xy); // texture pour l'alpha mask
} ]]></raw_data>
</shader_program>
</demoniak3d>