Fog.
This commit is contained in:
parent
e3ff14bda1
commit
c50a0f4484
|
|
@ -486,6 +486,13 @@ static void RB_FogPass( void ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
R_DrawElements( tess.numIndexes, tess.indexes );
|
R_DrawElements( tess.numIndexes, tess.indexes );
|
||||||
|
|
||||||
|
// VULKAN
|
||||||
|
assert(tess.shader->fogPass > 0);
|
||||||
|
VkPipeline pipeline = vk.fog_pipelines[tess.shader->fogPass - 1][tess.shader->cullType][tess.shader->polygonOffset];
|
||||||
|
vk_bind_stage_specific_resources(pipeline, false, false);
|
||||||
|
vkCmdDrawIndexed(vk.command_buffer, tess.numIndexes, 1, 0, 0, 0);
|
||||||
|
glState.vk_dirty_attachments = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -858,9 +865,6 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// VULKAN
|
|
||||||
vk.xyz_elements += tess.numVertexes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -959,6 +963,9 @@ void RB_StageIteratorGeneric( void )
|
||||||
RB_FogPass();
|
RB_FogPass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VULKAN
|
||||||
|
vk.xyz_elements += tess.numVertexes;
|
||||||
|
|
||||||
//
|
//
|
||||||
// unlock arrays
|
// unlock arrays
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -864,8 +864,10 @@ void vk_create_instance(HWND hwnd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Skybox pipeline.
|
// Standard pipelines.
|
||||||
//
|
//
|
||||||
|
{
|
||||||
|
// skybox
|
||||||
{
|
{
|
||||||
Vk_Pipeline_Def def;
|
Vk_Pipeline_Def def;
|
||||||
def.shader_type = Vk_Shader_Type::single_texture;
|
def.shader_type = Vk_Shader_Type::single_texture;
|
||||||
|
|
@ -877,6 +879,33 @@ void vk_create_instance(HWND hwnd) {
|
||||||
|
|
||||||
vk.skybox_pipeline = create_pipeline(def);
|
vk.skybox_pipeline = create_pipeline(def);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fog
|
||||||
|
{
|
||||||
|
Vk_Pipeline_Def def;
|
||||||
|
def.shader_type = Vk_Shader_Type::single_texture;
|
||||||
|
def.clipping_plane = false;
|
||||||
|
def.mirror = false;
|
||||||
|
|
||||||
|
unsigned int state_bits[2] = {
|
||||||
|
GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA | GLS_DEPTHFUNC_EQUAL,
|
||||||
|
GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA
|
||||||
|
};
|
||||||
|
bool polygon_offset[2] = {false, true};
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
def.state_bits = state_bits[i];
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
def.face_culling = j; // cullType_t value
|
||||||
|
for (int k = 0; k < 2; k++) {
|
||||||
|
def.polygon_offset = polygon_offset[k];
|
||||||
|
vk.fog_pipelines[i][j][k] = create_pipeline(def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vk_destroy_instance() {
|
void vk_destroy_instance() {
|
||||||
|
|
@ -916,6 +945,10 @@ void vk_destroy_instance() {
|
||||||
vkDestroyShaderModule(vk.device, vk.multi_texture_add_fs, nullptr);
|
vkDestroyShaderModule(vk.device, vk.multi_texture_add_fs, nullptr);
|
||||||
|
|
||||||
vkDestroyPipeline(vk.device, vk.skybox_pipeline, nullptr);
|
vkDestroyPipeline(vk.device, vk.skybox_pipeline, nullptr);
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
for (int j = 0; j < 3; j++)
|
||||||
|
for (int k = 0; k < 2; k++)
|
||||||
|
vkDestroyPipeline(vk.device, vk.fog_pipelines[i][j][k], nullptr);
|
||||||
|
|
||||||
vkDestroySwapchainKHR(vk.device, vk.swapchain, nullptr);
|
vkDestroySwapchainKHR(vk.device, vk.swapchain, nullptr);
|
||||||
vkDestroyDevice(vk.device, nullptr);
|
vkDestroyDevice(vk.device, nullptr);
|
||||||
|
|
@ -1655,7 +1688,9 @@ void vk_bind_resources_shared_between_stages() {
|
||||||
vkCmdBindIndexBuffer(vk.command_buffer, vk.index_buffer, vk.index_buffer_offset, VK_INDEX_TYPE_UINT32);
|
vkCmdBindIndexBuffer(vk.command_buffer, vk.index_buffer, vk.index_buffer_offset, VK_INDEX_TYPE_UINT32);
|
||||||
vk.index_buffer_offset += indexes_size;
|
vk.index_buffer_offset += indexes_size;
|
||||||
|
|
||||||
// specify push constants
|
//
|
||||||
|
// Specify push constants.
|
||||||
|
//
|
||||||
float push_constants[16 + 12 + 4]; // mvp transform + eye transform + clipping plane in eye space
|
float push_constants[16 + 12 + 4]; // mvp transform + eye transform + clipping plane in eye space
|
||||||
|
|
||||||
get_mvp_transform(push_constants);
|
get_mvp_transform(push_constants);
|
||||||
|
|
@ -1691,6 +1726,7 @@ void vk_bind_resources_shared_between_stages() {
|
||||||
|
|
||||||
push_constants_size += 64;
|
push_constants_size += 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
vkCmdPushConstants(vk.command_buffer, vk.pipeline_layout, VK_SHADER_STAGE_VERTEX_BIT, 0, push_constants_size, push_constants);
|
vkCmdPushConstants(vk.command_buffer, vk.pipeline_layout, VK_SHADER_STAGE_VERTEX_BIT, 0, push_constants_size, push_constants);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,11 @@ struct Vk_Instance {
|
||||||
VkShaderModule multi_texture_add_fs = VK_NULL_HANDLE;
|
VkShaderModule multi_texture_add_fs = VK_NULL_HANDLE;
|
||||||
|
|
||||||
VkPipeline skybox_pipeline = VK_NULL_HANDLE;
|
VkPipeline skybox_pipeline = VK_NULL_HANDLE;
|
||||||
|
|
||||||
|
// dim 0 is based on fogPass_t: 0 - corresponds to FP_EQUAL, 1 - corresponds to FP_LE.
|
||||||
|
// dim 1 is directly a cullType_t enum value.
|
||||||
|
// dim 2 is a polygon offset value (0 - off, 1 - on).
|
||||||
|
VkPipeline fog_pipelines[2][3][2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Vk_Resources {
|
struct Vk_Resources {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user