[vulkan] Implement water alpha

I'm not sure it's working properly, but that compose pass is suspect,
especially with respect to lighting.
This commit is contained in:
Bill Currie 2022-05-21 17:48:45 +09:00
parent 3bb54bc20a
commit 0d609efbc6
6 changed files with 17 additions and 4 deletions

View file

@ -350,7 +350,7 @@
{ {
stageFlags = fragment; stageFlags = fragment;
offset = 64; offset = 64;
size = "4 * 4 + 4"; size = "4 * 4 + 4 + 4";
}, },
); );
}; };

View file

@ -6,6 +6,7 @@ layout (push_constant) uniform PushConstants {
layout (offset = 64) layout (offset = 64)
vec4 fog; vec4 fog;
float time; float time;
float alpha;
}; };
layout (location = 0) in vec4 tl_st; layout (location = 0) in vec4 tl_st;

View file

@ -10,6 +10,7 @@ layout (push_constant) uniform PushConstants {
layout (offset = 64) layout (offset = 64)
vec4 fog; vec4 fog;
float time; float time;
float alpha;
}; };
layout (location = 0) in vec4 tl_st; layout (location = 0) in vec4 tl_st;

View file

@ -6,6 +6,7 @@ layout (push_constant) uniform PushConstants {
layout (offset = 64) layout (offset = 64)
vec4 fog; vec4 fog;
float time; float time;
float alpha;
}; };
layout (location = 0) in vec4 tl_st; layout (location = 0) in vec4 tl_st;
@ -48,5 +49,7 @@ main (void)
c = texture (Texture, t_st); c = texture (Texture, t_st);
e = texture (Texture, e_st); e = texture (Texture, e_st);
frag_color = c + e;//fogBlend (c); c += e;
c.a = alpha;
frag_color = c;//fogBlend (c);
} }

View file

@ -10,6 +10,7 @@ layout (push_constant) uniform PushConstants {
layout (offset = 64) layout (offset = 64)
vec4 fog; vec4 fog;
float time; float time;
float alpha;
}; };
layout (location = 0) in vec4 tl_st; layout (location = 0) in vec4 tl_st;

View file

@ -77,6 +77,7 @@ typedef struct bsp_push_constants_s {
mat4f_t Model; mat4f_t Model;
quat_t fog; quat_t fog;
float time; float time;
float alpha;
} bsp_push_constants_t; } bsp_push_constants_t;
static const char * __attribute__((used)) bsp_pass_names[] = { static const char * __attribute__((used)) bsp_pass_names[] = {
@ -782,8 +783,11 @@ push_fragconst (bsp_push_constants_t *constants, VkPipelineLayout layout,
{ VK_SHADER_STAGE_FRAGMENT_BIT, { VK_SHADER_STAGE_FRAGMENT_BIT,
field_offset (bsp_push_constants_t, time), field_offset (bsp_push_constants_t, time),
sizeof (constants->time), &constants->time }, sizeof (constants->time), &constants->time },
{ VK_SHADER_STAGE_FRAGMENT_BIT,
field_offset (bsp_push_constants_t, alpha),
sizeof (constants->alpha), &constants->alpha },
}; };
QFV_PushConstants (device, cmd, layout, 2, push_constants); QFV_PushConstants (device, cmd, layout, 3, push_constants);
} }
static void static void
@ -1112,7 +1116,10 @@ Vulkan_DrawWaterSurfaces (qfv_renderframe_t *rFrame)
turb_begin (rFrame); turb_begin (rFrame);
push_transform (identity, bctx->layout, device, push_transform (identity, bctx->layout, device,
bframe->cmdSet.a[QFV_bspTurb]); bframe->cmdSet.a[QFV_bspTurb]);
bsp_push_constants_t frag_constants = { .time = vr_data.realtime }; bsp_push_constants_t frag_constants = {
.time = vr_data.realtime,
.alpha = r_wateralpha
};
push_fragconst (&frag_constants, bctx->layout, device, push_fragconst (&frag_constants, bctx->layout, device,
bframe->cmdSet.a[QFV_bspTurb]); bframe->cmdSet.a[QFV_bspTurb]);
for (is = bctx->waterchain; is; is = is->tex_chain) { for (is = bctx->waterchain; is; is = is->tex_chain) {