Add debug toggle for dynamic resolution
This commit is contained in:
parent
91600b5f6f
commit
f10b5fd62b
5 changed files with 32 additions and 7 deletions
|
@ -114,6 +114,8 @@ void draw_renderer() {
|
|||
|
||||
bool should_recompile = false;
|
||||
|
||||
ImGui::Checkbox("Enable Dynamic Resolution", &render_options.dynamic_resolution);
|
||||
|
||||
float render_scale = render_options.render_scale;
|
||||
if(ImGui::DragFloat("Render Scale", &render_scale, 0.1f, 1.0f, 0.1f) && render_scale > 0.0f) {
|
||||
render_options.render_scale = render_scale;
|
||||
|
|
|
@ -658,14 +658,27 @@ void Engine::begin_frame(const float delta_time) {
|
|||
_app->begin_frame();
|
||||
}
|
||||
|
||||
int frame_delay = 0;
|
||||
const int frame_delay_between_resolution_change = 60;
|
||||
|
||||
void Engine::update(const float delta_time) {
|
||||
const float ideal_delta_time = 0.01667f;
|
||||
|
||||
if(render_options.dynamic_resolution) {
|
||||
if(delta_time < ideal_delta_time) {
|
||||
frame_delay++;
|
||||
|
||||
if(frame_delay >= frame_delay_between_resolution_change) {
|
||||
if(delta_time > ideal_delta_time) {
|
||||
render_options.render_scale -= 0.1f;
|
||||
|
||||
render_options.render_scale = std::fmax(render_options.render_scale, 0.1f);
|
||||
} else {
|
||||
render_options.render_scale += 0.1f;
|
||||
|
||||
render_options.render_scale = std::fmin(render_options.render_scale, 1.0f);
|
||||
}
|
||||
|
||||
frame_delay = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ struct RenderOptions {
|
|||
float min_luminance = -8.0f;
|
||||
float max_luminance = 3.0f;
|
||||
|
||||
bool enable_depth_of_field = true;
|
||||
bool enable_depth_of_field = false;
|
||||
float depth_of_field_strength = 3.0f;
|
||||
|
||||
bool dynamic_resolution = false;
|
||||
|
|
|
@ -188,4 +188,6 @@ private:
|
|||
std::unique_ptr<DoFPass> dofPass;
|
||||
|
||||
std::vector<std::unique_ptr<Pass>> passes;
|
||||
|
||||
double current_render_scale = 1.0;
|
||||
};
|
||||
|
|
|
@ -102,6 +102,7 @@ Renderer::~Renderer() {}
|
|||
|
||||
void Renderer::resize(const prism::Extent extent) {
|
||||
this->extent = extent;
|
||||
this->current_render_scale = render_options.render_scale;
|
||||
|
||||
if(!viewport_mode) {
|
||||
createOffscreenResources();
|
||||
|
@ -122,6 +123,7 @@ void Renderer::resize(const prism::Extent extent) {
|
|||
|
||||
void Renderer::resize_viewport(const prism::Extent extent) {
|
||||
this->viewport_extent = extent;
|
||||
this->current_render_scale = render_options.render_scale;
|
||||
|
||||
createOffscreenResources();
|
||||
createMeshPipeline();
|
||||
|
@ -206,6 +208,13 @@ void Renderer::stopSceneBlur() {
|
|||
void Renderer::render(Scene* scene, int index) {
|
||||
GFXCommandBuffer* commandbuffer = engine->get_gfx()->acquire_command_buffer();
|
||||
|
||||
if(render_options.render_scale != current_render_scale) {
|
||||
if(viewport_mode)
|
||||
resize_viewport(viewport_extent);
|
||||
else
|
||||
resize(extent);
|
||||
}
|
||||
|
||||
const auto extent = get_extent();
|
||||
const auto render_extent = get_render_extent();
|
||||
|
||||
|
@ -361,7 +370,6 @@ void Renderer::render(Scene* scene, int index) {
|
|||
|
||||
commandbuffer->draw(0, 4, 0, 1);
|
||||
|
||||
|
||||
commandbuffer->pop_group();
|
||||
|
||||
if(current_screen != nullptr)
|
||||
|
|
Reference in a new issue