3d: Add ALPHA_MAP_TEST mode

It does alpha testing using alpha map texture.
This commit is contained in:
kichikuou
2025-06-02 07:25:38 +09:00
parent e5fadf2b73
commit b5b92bc367
2 changed files with 6 additions and 1 deletions
+4
View File
@@ -22,6 +22,7 @@
#define ALPHA_BLEND 0
#define ALPHA_TEST 1
#define ALPHA_MAP_BLEND 2
#define ALPHA_MAP_TEST 3
#if ENGINE == REIGN_ENGINE
@@ -180,6 +181,9 @@ void main() {
discard;
} else if (alpha_mode == ALPHA_MAP_BLEND) {
alpha *= texture(alpha_texture, tex_coord).r;
} else if (alpha_mode == ALPHA_MAP_TEST) {
if (texture(alpha_texture, tex_coord).r < 0.8)
discard;
}
frag_color = vec4(frag_rgb, alpha);
+2 -1
View File
@@ -52,6 +52,7 @@ enum {
ALPHA_BLEND = 0,
ALPHA_TEST = 1,
ALPHA_MAP_BLEND = 2,
ALPHA_MAP_TEST = 3,
};
enum draw_phase {
@@ -426,7 +427,7 @@ static void render_model(struct RE_instance *inst, struct RE_renderer *r, enum d
}
if (material->alpha_map) {
glUniform1i(r->alpha_mode, ALPHA_MAP_BLEND);
glUniform1i(r->alpha_mode, mesh->is_transparent ? ALPHA_MAP_BLEND : ALPHA_MAP_TEST);
glActiveTexture(GL_TEXTURE0 + ALPHA_TEXTURE_UNIT);
glBindTexture(GL_TEXTURE_2D, material->alpha_map);
glUniform1i(r->alpha_texture, ALPHA_TEXTURE_UNIT);