void displayFunc(void) { /* create random geometry for regression test */ if (g_regression) g_render_scene = createRandomScene(g_device,1,random<int>()%1000,random<int>()%1000); /* set accumulation mode */ int accumulate = g_resetAccumulation ? 0 : g_refine; g_resetAccumulation = false; /* render image */ Handle<Device::RTCamera> camera = createCamera(AffineSpace3f(g_camSpace.l,g_camSpace.p)); /* render into framebuffer */ double t0 = getSeconds(); g_device->rtRenderFrame(g_renderer,camera,g_render_scene,g_tonemapper,g_frameBuffer,accumulate); g_device->rtSwapBuffers(g_frameBuffer); /* draw image in OpenGL */ void* ptr = g_device->rtMapFrameBuffer(g_frameBuffer); glRasterPos2i(-1, 1); glPixelZoom(1.0f, -1.0f); glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGBA,GL_FLOAT,ptr); g_device->rtUnmapFrameBuffer(g_frameBuffer); glutSwapBuffers(); double dt = getSeconds()-t0; /* measure rendering time */ std::ostringstream stream; stream.setf(std::ios::fixed, std::ios::floatfield); stream.precision(2); stream << 1.0f/dt << " fps, "; stream.precision(0); stream << dt*1000.0f << " ms"; std::cout << "display " << stream.str() << std::endl; glutSetWindowTitle((std::string("Embree: ") + stream.str()).c_str()); }
void displayFunc(void) { if (g_pause) return; if (g_demo) { double restart_time = 15.0f; double dt = getSeconds()-g_demo_t0; if (dt > restart_time) { dt -= restart_time; g_demo_t0 = getSeconds() - dt; } float theta = dt * 90.0f / 180.0f * float(pi); float phi = 0.0f; if (theta >= 2.0f*float(pi)) theta = 2.0f*float(pi); const Vector3f viewVec = normalize(g_initial_camLookAt - g_initial_camPos); const float dist = length(g_initial_camLookAt - g_initial_camPos); //const Vector3f dX = normalize(cross(viewVec,g_initial_camUp)); //const Vector3f dY = normalize(cross(viewVec,dX)); const Vector3f dY = normalize(g_initial_camUp); AffineSpace3f space = g_demo_camSpace; //space = AffineSpace3f::rotate(g_initial_camLookAt,dX,phi ) * space; space = AffineSpace3f::rotate(g_initial_camLookAt,dY,theta) * space; //g_camPos = g_camLookAt-dist*xfmVector(g_camSpace,Vector3f(0,0,1)); g_camSpace = space; static int extra_resets = 0; if (theta < 2.0f*float(pi)) { g_resetAccumulation = true; extra_resets = 0; } else if (extra_resets < 2) { g_resetAccumulation = true; extra_resets++; } } /* create random geometry for regression test */ if (g_regression) g_render_scene = createRandomScene(g_device,1,random<int>()%100,random<int>()%1000); /* set accumulation mode */ int accumulate = g_resetAccumulation ? 0 : g_refine; g_resetAccumulation = false; /* render image */ Handle<Device::RTCamera> camera = createCamera(AffineSpace3f(g_camSpace.l,g_camSpace.p)); /* render into framebuffer */ g_device->rtRenderFrame(g_renderer,camera,g_render_scene,g_tonemapper,g_frameBuffer,accumulate); g_device->rtSwapBuffers(g_frameBuffer); /* draw image in OpenGL */ void* ptr = g_device->rtMapFrameBuffer(g_frameBuffer); glRasterPos2i(-1, 1); glPixelZoom(1.0f, -1.0f); if (g_format == "RGB_FLOAT32") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGB,GL_FLOAT,ptr); else if (g_format == "RGBA8") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGBA,GL_UNSIGNED_BYTE,ptr); else if (g_format == "RGB8") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGB,GL_UNSIGNED_BYTE,ptr); else throw std::runtime_error("unknown framebuffer format: "+g_format); glFlush(); glutSwapBuffers(); g_device->rtUnmapFrameBuffer(g_frameBuffer); /* calculate rendering time */ double t1 = getSeconds(); g_dt[frameID % avgFrames] = t1-g_t0; g_t0 = t1; frameID++; /* print average render time of previous frames */ size_t num = 0; double dt = 0.0f; for (size_t i=0; i<avgFrames; i++) { if (g_dt[i] != 0.0f) { dt += g_dt[i]; num++; } } dt /= num; std::ostringstream stream; stream.setf(std::ios::fixed, std::ios::floatfield); stream.precision(2); stream << 1.0f/dt << " fps, "; stream.precision(2); stream << dt*1000.0f << " ms"; stream << ", " << g_width << "x" << g_height; if (log_display) std::cout << "display " << stream.str() << std::endl; glutSetWindowTitle((std::string("Embree: ") + stream.str()).c_str()); }
void displayFunc(void) { if (g_pause) return; /* create random geometry for regression test */ if (g_regression) g_render_scene = createRandomScene(g_device,1,random<int>()%100,random<int>()%1000); /* set accumulation mode */ int accumulate = g_resetAccumulation ? 0 : g_refine; g_resetAccumulation = false; /* render image */ Handle<Device::RTCamera> camera = createCamera(AffineSpace3f(g_camSpace.l,g_camSpace.p)); /* render into framebuffer */ g_device->rtRenderFrame(g_renderer,camera,g_render_scene,g_tonemapper,g_frameBuffer,accumulate); g_device->rtSwapBuffers(g_frameBuffer); /* draw image in OpenGL */ void* ptr = g_device->rtMapFrameBuffer(g_frameBuffer); // extern double upload_time; // upload_time = getSeconds() - upload_time; // std::cout << "upload " << upload_time << std::endl; // exit(0); glRasterPos2i(-1, 1); glPixelZoom(1.0f, -1.0f); if (g_format == "RGB_FLOAT32") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGB,GL_FLOAT,ptr); else if (g_format == "RGBA8") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGBA,GL_UNSIGNED_BYTE,ptr); else if (g_format == "RGB8") glDrawPixels((GLsizei)g_width,(GLsizei)g_height,GL_RGB,GL_UNSIGNED_BYTE,ptr); else throw std::runtime_error("unknown framebuffer format: "+g_format); glFlush(); glutSwapBuffers(); g_device->rtUnmapFrameBuffer(g_frameBuffer); /* calculate rendering time */ double t1 = getSeconds(); g_dt[frameID % avgFrames] = t1-g_t0; g_t0 = t1; frameID++; /* print average render time of previous frames */ size_t num = 0; double dt = 0.0f; for (size_t i=0; i<avgFrames; i++) { if (g_dt[i] != 0.0f) { dt += g_dt[i]; num++; } } dt /= num; std::ostringstream stream; stream.setf(std::ios::fixed, std::ios::floatfield); stream.precision(2); stream << 1.0f/dt << " fps, "; stream.precision(2); stream << dt*1000.0f << " ms"; stream << ", " << g_width << "x" << g_height; if (log_display) std::cout << "display " << stream.str() << std::endl; glutSetWindowTitle((std::string("Embree: ") + stream.str()).c_str()); }