diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cc4a7c40f31031011f014857f197be0b71ddcfc..35cf8318b452174b8c035941820699c385806f78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,7 +218,12 @@ include_directories(${Boost_INCLUDE_DIRS} ${TIFF_INCLUDE_DIR} ${SPNAV_INCLUDE_DIR} ) - +if (UNIX) + SET(CMAKE_SKIP_BUILD_RPATH FALSE) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}") + SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +endif() add_subdirectory(modules) diff --git a/cmake_support/OST.cmake b/cmake_support/OST.cmake index 6d04eb292ea2121296bf810f1e3a92514e46f9b7..50e77606961a6f9701165e1b296c2fd0e25e4132 100644 --- a/cmake_support/OST.cmake +++ b/cmake_support/OST.cmake @@ -190,12 +190,11 @@ macro(module) set_target_properties(${_LIB_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_STAGE_PATH} ARCHIVE_OUTPUT_DIRECTORY ${LIB_STAGE_PATH} - RUNTIME_OUTPUT_DIRECTORY ${LIB_STAGE_PATH} - INSTALL_RPATH "." - INSTALL_NAME_DIR "@rpath") + RUNTIME_OUTPUT_DIRECTORY ${LIB_STAGE_PATH}) if (APPLE) set_target_properties(${_LIB_NAME} PROPERTIES - LINK_FLAGS "-Wl,-rpath,.") + LINK_FLAGS "-Wl,-rpath,." + INSTALL_NAME_DIR "@rpath") endif() if (WIN32) #set_target_properties(${_LIB_NAME} PROPERTIES PREFIX "../") @@ -391,12 +390,12 @@ macro(pymod) target_link_libraries("_${_ARG_NAME}" ${_PARENT_LIB_NAME} ${PYTHON_LIBRARIES} ${BOOST_PYTHON_LIBRARIES}) set_target_properties("_${_ARG_NAME}" - PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR} - INSTALL_NAME_DIR "@rpath") + PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR}) if (APPLE) file(RELATIVE_PATH _REL_PATH "${PYMOD_STAGE_DIR}" "${LIB_STAGE_PATH}") set_target_properties(_${_ARG_NAME} PROPERTIES - LINK_FLAGS "-Wl,-rpath,@${_REL_PATH}") + LINK_FLAGS "-Wl,-rpath,@${_REL_PATH}" + INSTALL_NAME_DIR "@rpath") endif() if (NOT WIN32) set_target_properties("_${_ARG_NAME}" diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc index d6b843c4a6c5a585881af022cf6c318d5f9db4e0..41f0e3db45aed86b7403d314c4dada87c95d20be 100644 --- a/modules/gfx/pymod/export_scene.cc +++ b/modules/gfx/pymod/export_scene.cc @@ -98,6 +98,7 @@ void export_Scene() .def("SetStereoInverted",&Scene::SetStereoInverted) .def("SetStereoView",&Scene::SetStereoView) .def("SetStereoEyeDist",&Scene::SetStereoEyeDist) + .def("SetStereoEyeOff",&Scene::SetStereoEyeOff) .def("SetLightDir",&Scene::SetLightDir) .def("SetLightProp",set_light_prop1) .def("SetLightProp",set_light_prop2) diff --git a/modules/gfx/src/CMakeLists.txt b/modules/gfx/src/CMakeLists.txt index 3c6e8b1f86fa0d4e9c81c3118505a7d836f170de..99d643e74c5727bbcf5b148772033b589fbd4641 100644 --- a/modules/gfx/src/CMakeLists.txt +++ b/modules/gfx/src/CMakeLists.txt @@ -223,29 +223,34 @@ target_link_libraries(ost_gfx ${OPENGL_LIBRARIES} ${PNG_LIBRARIES}) if (USE_SHADER) set(SHADER_FILES - shader/basic_vs.glsl + shader/aaline_fs.glsl + shader/amboccl_fs.glsl shader/basic_fs.glsl - shader/fraglight_vs.glsl - shader/fraglight_fs.glsl shader/basic_hf_vs.glsl - shader/selfx_vs.glsl - shader/selfx_fs.glsl - shader/toon_vs.glsl - shader/toon_fs.glsl - shader/toon2_fs.glsl - shader/noop_vs.glsl - shader/aaline_fs.glsl - shader/iso_vs.glsl - shader/iso_fs.glsl - shader/fast_sphere_vs.glsl + shader/basic_lf_fs.glsl + shader/basic_lf_vs.glsl + shader/basic_vs.glsl + shader/convolute1_fs.glsl + shader/dumpnorm_fs.glsl + shader/dumpnorm_vs.glsl shader/fast_sphere_fs.glsl + shader/fast_sphere_vs.glsl + shader/fraglight_fs.glsl + shader/fraglight_lf_fs.glsl + shader/fraglight_lf_vs.glsl + shader/fraglight_vs.glsl + shader/iso_fs.glsl + shader/iso_vs.glsl + shader/noop_vs.glsl shader/outline_vs.glsl shader/quadpp_vs.glsl - shader/convolute1_fs.glsl - shader/scenefx_vs.glsl shader/scenefx_fs.glsl - shader/dumpnorm_vs.glsl - shader/dumpnorm_fs.glsl + shader/scenefx_vs.glsl + shader/selfx_fs.glsl + shader/selfx_vs.glsl + shader/toon2_fs.glsl + shader/toon_fs.glsl + shader/toon_vs.glsl ) copy_if_different("./" "${SHARED_DATA_PATH}/shader" "${SHADER_FILES}" "SHADER_TARGETS" ost_gfx) diff --git a/modules/gfx/src/bitmap_io.cc b/modules/gfx/src/bitmap_io.cc index 677b602c66ce81aa27527fdb5cd4335d0364f86d..7c8fdf71b2b10f9225f74d6db8e1f6c22372a00f 100644 --- a/modules/gfx/src/bitmap_io.cc +++ b/modules/gfx/src/bitmap_io.cc @@ -168,7 +168,7 @@ Bitmap import_png(const String& filename) } } - LOGN_VERBOSE("loaded " << width << "x" << height << ":" << channels << " bitmap"); + LOGN_DEBUG("loaded " << width << "x" << height << ":" << channels << " bitmap"); bm.channels=channels; bm.width=width; diff --git a/modules/gfx/src/impl/scene_fx.cc b/modules/gfx/src/impl/scene_fx.cc index d0ef2cb703d78e1621d0a667765982456609d212..474efaba3102e48f3a349c2b160a88d930aa3026 100644 --- a/modules/gfx/src/impl/scene_fx.cc +++ b/modules/gfx/src/impl/scene_fx.cc @@ -55,7 +55,7 @@ SceneFX::~SceneFX() void SceneFX::Setup() { - LOGN_VERBOSE("SceneFX: setup"); + LOGN_DEBUG("SceneFX: setup"); glGenTextures(1,&scene_tex_id_); glGenTextures(1,&depth_tex_id_); diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc index 1a4a540416dda64f63234cd66ce63057cacdba6e..e784007fc423a64fed2849b79c320840d975f715 100644 --- a/modules/gfx/src/scene.cc +++ b/modules/gfx/src/scene.cc @@ -125,7 +125,8 @@ Scene::Scene(): stereo_(0), stereo_inverted_(false), stereo_eye_(0), - stereo_eye_dist_(10.0), + stereo_eye_dist_(5.0), + stereo_eye_off_(0.0), scene_left_tex_(), scene_right_tex_() { @@ -355,7 +356,7 @@ void Scene::InitGL() glGetIntegerv(GL_SAMPLES, &msamples); if(mbufs>0 && msamples>0) { - LOGN_VERBOSE("enabling multisampling with: " << msamples << " samples"); + LOGN_VERBOSE("Scene: enabling multisampling with: " << msamples << " samples"); glDisable(GL_LINE_SMOOTH); glDisable(GL_POINT_SMOOTH); glDisable(GL_POLYGON_SMOOTH); @@ -862,7 +863,6 @@ void Scene::Apply(GfxNodeVisitor& v) const void Scene::OnInput(const InputEvent& e) { - float sf=1.0; if(e.GetCommand()==INPUT_COMMAND_AUTOSLAB) { Autoslab(); } else if(e.GetCommand()==INPUT_COMMAND_TOGGLE_FOG) { @@ -898,7 +898,8 @@ void Scene::OnInput(const InputEvent& e) transform_.ApplyYAxisTranslation(e.GetDelta()*fxy[1]); } } else if(e.GetCommand()==INPUT_COMMAND_TRANSZ) { - float delta=e.GetDelta()*sf; + float currz=transform_.GetTrans()[2]; + float delta=currz*pow(1.01,-e.GetDelta())-currz; transform_.ApplyZAxisTranslation(delta); SetNearFar(znear_-delta,zfar_-delta); } else if(e.GetCommand()==INPUT_COMMAND_SLABN) { @@ -1266,6 +1267,14 @@ void Scene::SetStereoEyeDist(float d) } } +void Scene::SetStereoEyeOff(float d) +{ + stereo_eye_off_=d; + if(stereo_>0) { + RequestRedraw(); + } +} + void Scene::SetLightDir(const Vec3& dir) { if(Length2(dir)>0.0) { @@ -1735,7 +1744,7 @@ void Scene::prep_glyphs() } for(int cc=128;cc<256;++cc) glyph_map_[cc]=Vec2(0.0,0.0); - LOGN_VERBOSE("done loading glyphs"); + LOGN_DEBUG("done loading glyphs"); } @@ -1811,20 +1820,19 @@ void Scene::stereo_projection(unsigned int view) GLdouble right = top*aspect_ratio_; GLdouble left = -right; GLdouble shift=0.0; + + glFrustum(left,right,bot,top,zn,zf); + if(view==1 || view==2) { - shift = 0.5*stereo_eye_dist_*zn/zf * (view==1 ? -1.0 : 1.0); - left+=shift; - right+=shift*0.5; + float ff=(view==1 ? -1.0 : 1.0); + float dist=-transform_.GetTrans()[2]; + geom::Mat4 skew=geom::Transpose(geom::Mat4(1.0,0.0,ff*stereo_eye_dist_/dist,ff*stereo_eye_dist_, + 0.0,1.0,0.0,0.0, + 0.0,0.0,1.0,0.0, + 0.0,0.0,0.0,1.0)); + glMultMatrix(skew.Data()); } - glFrustum(left,right,bot,top,zn,zf); - GLdouble trans[16]; - for(int i=0;i<16;++i) trans[i]=0.0; - trans[0]=1.0; - trans[5]=1.0; - trans[10]=1.0; - trans[15]=1.0; - trans[12]=shift; - glMultMatrixd(trans); + } void Scene::render_stereo() diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh index d9eacf632e322711ab8a35afa48f27d292726d07..1027d2a0f4d9128f62b327725bbdc9f2f549a428 100644 --- a/modules/gfx/src/scene.hh +++ b/modules/gfx/src/scene.hh @@ -189,6 +189,7 @@ class DLLEXPORT_OST_GFX Scene { void SetStereoView(unsigned int); void SetStereoEyeDist(float); + void SetStereoEyeOff(float); /// \brief set main light direction void SetLightDir(const geom::Vec3& dir); @@ -438,7 +439,7 @@ private: unsigned int stereo_; bool stereo_inverted_; unsigned int stereo_eye_; - float stereo_eye_dist_; + float stereo_eye_dist_,stereo_eye_off_; unsigned int scene_left_tex_; unsigned int scene_right_tex_; diff --git a/modules/gui/src/gl_win.cc b/modules/gui/src/gl_win.cc index 90bb1d9a73bdbf964bfb40717195b745a25eb757..d0ea7f00db3261b3311feda4c08a23ab0c08ad7c 100644 --- a/modules/gui/src/gl_win.cc +++ b/modules/gui/src/gl_win.cc @@ -90,7 +90,7 @@ gl_canvas_(NULL) this->SetInternalWidget(main); gfx::Scene::Instance().AttachObserver(this); QGLFormat format = gl_canvas_->format(); - LOGN_VERBOSE("GLCanvas: rbits=" << format.redBufferSize() + LOGN_DEBUG("GLCanvas: rbits=" << format.redBufferSize() << " gbits=" << format.greenBufferSize() << " bbits=" << format.blueBufferSize() << " abits=" << format.alphaBufferSize()