mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-09-22 23:18:01 +03:00
3d: Add ALPHA_MAP_TEST mode
It does alpha testing using alpha map texture.
This commit is contained in:
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user