Tweaked shadow map cascades and adaptively send the program to sleep to reach a specfied refresh rate

simple_math_single_header
Martin Felis 2018-07-08 14:00:30 +02:00
parent e9ba7f77cc
commit ce1a6ce9a4
3 changed files with 12 additions and 4 deletions

View File

@ -23,6 +23,7 @@ struct RuntimeModule {
struct RuntimeModuleManager {
std::vector<RuntimeModule*> mModules;
int mNumUpdatesSinceLastModuleChange = 0;
int mTargetFPS = 30;
void RegisterModule(const char* name);
void UnregisterModules();

View File

@ -231,7 +231,11 @@ int main(void)
ImGui::Render();
usleep(16000);
// Send the application to sleep if we have some time left for this frame
double frame_target_time = 1.0 / module_manager.mTargetFPS;
if (frame_delta_time < frame_target_time) {
usleep ((frame_target_time - frame_delta_time) * 1000000 * 0.98);
}
if (glfwGetKey(gWindow, GLFW_KEY_F5) == GLFW_PRESS) {
gFileModificationObserver->Update();

View File

@ -280,7 +280,10 @@ void Light::UpdateSplits(const Camera& camera) {
assert(camera.mIsOrthographic == false);
float near = camera.mNear;
float far = camera.mFar;
// Clamp the far plane of the camera so that we only
// create shadow maps for things that are relatively near
// the camera.
float far = fmin(camera.mFar, 10.0f);
float length = far - near;
float split_near = near;
float aspect = camera.mWidth / camera.mHeight;
@ -296,8 +299,8 @@ void Light::UpdateSplits(const Camera& camera) {
Matrix44f light_matrix_inv = light_matrix.inverse();
mShadowSplits[0] = near;
mShadowSplits[1] = near + length * 0.02;
mShadowSplits[2] = near + length * 0.2;
mShadowSplits[1] = near + length * 0.1;
mShadowSplits[2] = near + length * 0.25;
mShadowSplits[3] = far;
for (int i = 0; i < cNumSplits; ++i) {