Archived
1
Fork 0

Add debug toggle for dynamic resolution

This commit is contained in:
redstrate 2020-09-22 22:10:02 -04:00
parent 91600b5f6f
commit f10b5fd62b
5 changed files with 32 additions and 7 deletions

View file

@ -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;

View file

@ -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) {
render_options.render_scale -= 0.1f;
frame_delay++;
render_options.render_scale = std::fmax(render_options.render_scale, 0.1f);
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;
}
}

View file

@ -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;

View file

@ -188,4 +188,6 @@ private:
std::unique_ptr<DoFPass> dofPass;
std::vector<std::unique_ptr<Pass>> passes;
double current_render_scale = 1.0;
};

View file

@ -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)