Jump to content
The Dark Mod Forums

OrbWeaver

Active Developer
  • Posts

    8629
  • Joined

  • Last visited

  • Days Won

    65

Everything posted by OrbWeaver

  1. I don't generally use Wayland myself due to the numerous applications which have problems with it, but I tried logging into my Ubuntu GNOME desktop using the Wayland session and I do not see any problems with the view rotation or mouse capturing in DR. Which unfortunately means this will probably only be solved if a developer with a system similar to yours is able to investigate it.
  2. As a workaround, does changing the setting "Freelook mode can be toggled" make any difference to the behaviour? This disables the right-click toggle mode and requires you to hold and drag with the mouse to rotate the view.
  3. On modern Windows you should be able to install the Windows Subsystem for Linux which will make it possible to run many Linux commands on Windows.
  4. I agree. It seems that artist control of specular has been removed for the sake of "cool HDR effects". If a mapper wants to make a texture with zero specular, it should have zero specular in the engine.
  5. Does the bright area appear to move over the texture as you move the camera around, or does it remain in the same place? The defining feature of specular lighting is how it varies based on the positions of the viewer, surface and light source. If the bright area appears to move, then this is specular lighting; if it is fixed in place, it is diffuse lighting. Specular lighting is not defined by brightness. It is possible to have a very bright diffuse texture which will max out to full white under a light source (as in your image), just as it is possible to have a very dull specular texture which is difficult to see even in darkness. From a rendering perspective, there is no real distinction between "intensity" and "color" other than the fact that "intensity" affects RGB channels equally, without changing the apparent hue. There would be no increase in render quality by having a separate intensity value that was tracked and calculated independently of color. However, recent DarkRadiant versions add a slider into the Light Inspector which allows mappers to vary the brightness of one or more lights without having to use the color chooser or risk changing the hue. This is purely a user convenience feature, and does not unlock any new rendering possibilities (the intensity changes are just baked into the RGB color applied to the light entity).
  6. Actually I might be confusing two different things. What the latest LWO exporter fixes is the smoothing angle. Previously this was hard-coded at some weird value slightly less than 90°, but this can now be configured to smooth everything, smooth nothing, or use the Autosmooth Angle setting on the object. I have no idea if explicit smooth groups are supported, or if this is even a thing in Blender.
  7. As far as I know the most up-to-date one is the script I maintain (there is a single tdm_export script which supports both ASE and LWO export). However I haven't specifically tested with the latest Blender 3.4 series, so it's possible that it will need an update. I believe this information is out of date. The problem of LWO losing smoothing information was caused by the Blender exporter itself ignoring object-specific data and enforcing a hard-coded smoothing angle. This is now fixed in my latest version, although the old behaviour is selectable at the time of export if you don't want to deal with object smooth groups. As far as I can recall, when I was testing this, the smoothing options did take effect in the engine (although I couldn't say whether they were 100% mathematically correct).
  8. Would you be able to attach or upload the map (or any other map which shows the same issue, if you don't want to share a WIP)? Even if the map has become corrupted, we ought to be able to handle this more gracefully and perhaps recover whatever data we can read even if some is missing. Under no circumstances should we hard crash regardless of what sort of corruption is in the map file.
  9. This was the relevant SVN change: r9525 | orbweaver | 2021-07-30 21:17:43 +0100 (Fri, 30 Jul 2021) | 11 lines Use correct format for uploading precompressed ATI2 normal maps When the 'ATI2' FOURCC is seen in a precompressed DDS file, use the GL_COMPRESSED_RG_RGTC2 internal format (matching the behaviour of image_useNormalCompression on uncompressed source images). The legacy code was using GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT. This is enough to get plausible looking normal maps with DDS files exported in 3Dc/BC5 format using the GIMP DDS plugin. Not tested with files exported from any other tools; it is conceivable that other FOURCCs might need handling too. Note in particular the comment about this only being tested with the GIMP DDS plugin, and that formats used by other tools might need additional changes.
  10. You used bash for this? Why not a proper cross-platform language with decent text processing support that others might be able to understand and maintain, like Python?
  11. This exact behaviour can be created using a blendLight using the blend filter blend mode. The light becomes a volume which simply multiplies (darkens) its projected texture with the texture of contained objects, almost like a 3D volumetric decal.
  12. I have a 1440p screen and I also find certain lines a bit thin, but currently there is no way to control it.
  13. Fixed in Git revision a1f0c789f34b4bb11a132aaeb03a380da18fe6b5. I tested switching light textures in the Light Inspector and switching brush textures on the Media tab, and everything still looks fine so hopefully nothing is broken as a result of switching MaterialSelector to use a sigc::signal instead of an explicit selectionChanged callback.
  14. The actual crash occurs on this line of LightInspector.cpp: 85 void LightInspector::shaderSelectionChanged() 86 { 87 // Get the selected shader -> 88 auto ishader = _texSelector->getSelectedShader(); The _texSelector member is still NULL here, so this is a segfault. The initialisation of _texSelector happens in setupTextureWidgets(), which is called unconditionally in the LightInspector constructor, so a missing method call is not the issue. However, the value of _texSelector is a newly-constructed MaterialSelector object, and this object takes a function pointer to the shaderSelectionChanged() in its constructor: _texSelector = new MaterialSelector(parent, std::bind(&LightInspector::shaderSelectionChanged, this), MaterialSelector::TextureFilter::Lights); It appears that this is creating a race condition: the constructor of MaterialSelector is able to call the shaderSelectionChanged callback (presumably as a result of selection changes during its Populate() method), but it isn't actually safe to call shaderSelectionChanged() until after the MaterialSelector is fully constructed and assigned to the _texSelector member. I think my preferred solution would be to remove the "selectionChanged" function parameter to the MaterialSelector constructor entirely, and replace it with a public signal_selectionChanged() which client code could connect to. This would have two advantages: No possibility of race condition, since you would have to construct the MaterialSelector before connecting to the signal. Signals are more powerful than manual std::function callbacks (e.g. they can auto-disconnect if the target object is destroyed) and are widely used throughout the codebase. However, if anything currently relies on receiving selectionChanged callbacks during the MaterialSelector construction, this would no longer work. @greebo what do you think?
  15. I can reproduce it on Linux in a local source build. Logged as issue 6216.
  16. I would like this option as well. I can't be bothered to hold down Ctrl and a movement key (especially when you're moving slower, so you have to hold it for ages), so I just use toggle crouch as my "creep" replacement. But being able to toggle creep would be a better option, not least because it doesn't change the camera perspective as crouch does.
  17. I've often felt that door opening sounds were much too loud, so this sounds like a potential improvement. One problem is that certain cupboards with two doors actually play the sound twice at the same time (once for each door), making it double the expected volume. But even regular single doors often sound too loud to me.
  18. Looks like I jumped the gun slightly. It doesn't seem to have been completely removed, but has been deprecated for several versions. Knowing Apple, I will be very surprised if they don't eventually remove it altogether in a few versions time.
  19. I don't think you can use OpenGL at all on M1 macs (natively). Anyone who wants to make that port is going to need to write a complete Metal replacement for the renderer.
  20. This does seem to be the cause of the problems. Replacing all calls to FindPage() with GetPageIndex() fixes the issue for me.
  21. I've done more debugging, and it seems like it is FindPage() that is failing for reasons which are unclear. It even fails immediately after the page is added in addControl(), i.e. bool succ = AddPage(content, control->getDisplayName(), false, tabIconIndex); wxASSERT(succ); // succeeds wxASSERT(FindPage(content) != wxNOT_FOUND); // FAILS I guess this means one of two things: A bug in Ubuntu's wxWidgets 3.0.x package (it wouldn't be the first time), or the GTK wxWidgets build more generally. A false assumption in our code about when/how wxAuiNotebook::FindPage() is able to work. For example, perhaps it only works once the AUI interface has actually been displayed on the screen, rather than during the setup process. EDIT: I wonder if it is this bug: https://github.com/wxWidgets/wxWidgets/issues/15932 I can armour restoreState() against passing an invalid index to GetPage() and friends, which avoids the assertion, but then I have multiple copies of every tab in the group widget. On the other hand, I can completely disable the contents of restoreState() and everything looks fine with all tabs present and correct (although I presume any changes to tab layout wouldn't be preserved), so I wonder if it's even necessary for restoreState() to add new tabs at all?
  22. It looks like GetPageCount() and GetPage() are working with size_t indices which (on Linux) are equivalent to unsigned int, so I guess this is wrap-around behaviour. Yes, it's very strange that the index should be -1 immediately after the page was added — I'll do more debugging and see if I can find out which function call isn't working as expected.
  23. I'm also seeing an assertion failure, although it doesn't seem to have anything in common with what other people have posted. This appears at startup before the main window is shown, and appears to be fatal (attempting to Continue just produces the same assertion again). ASSERT INFO: ../src/aui/auibook.cpp(2270): assert "page_idx < m_tabs.GetPageCount()" failed in GetPage(). BACKTRACE: [1] wxAuiNotebook::GetPage(unsigned long) const [2] sigc::internal::signal_emit0<void, sigc::nil>::emit(sigc::internal::signal_impl*) [3] sigc::signal0<void, sigc::nil>::emit() const [4] module::ModuleRegistry::loadAndInitialiseModules() [5] radiant::Radiant::startup() [6] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) [7] wxEvtHandler::SearchDynamicEventTable(wxEvent&) [8] wxEvtHandler::TryHereOnly(wxEvent&) [9] wxEvtHandler::ProcessEventLocally(wxEvent&) [10] wxEvtHandler::ProcessEvent(wxEvent&) [11] wxEvtHandler::ProcessPendingEvents() [12] wxApp::DoIdle() [13] g_main_context_dispatch [14] g_main_loop_run [15] gtk_main [16] wxGUIEventLoop::DoRun() [17] wxEventLoopBase::Run() [18] wxAppConsoleBase::MainLoop() [19] wxEntry(int&, wchar_t**) [20] __libc_start_main More info from LLDB (since the built-in stacktrace seems to miss out a lot of function calls): frame #10: 0x00007ffff6a9eeca libwx_gtk3u_aui-3.0.so.0`wxAuiNotebook::GetPage(unsigned long) const + 106 frame #11: 0x0000555555d4f768 darkradiant`ui::PropertyNotebook::restoreState(this=0x000055555611c490) at PropertyNotebook.cpp:264:34 frame #12: 0x0000555555d3f7b6 darkradiant`ui::AuiLayout::restoreStateFromRegistry(this=0x0000555557179c10) at AuiLayout.cpp:654:36 frame #13: 0x0000555555d46817 darkradiant`ui::MainFrame::construct(this=0x00005555560c53a0) at MainFrame.cpp:271:38 frame #14: 0x0000555555d46680 darkradiant`ui::MainFrame::postModuleInitialisation(this=0x00005555560c53a0) at MainFrame.cpp:211:11 frame #15: 0x0000555555d4c024 darkradiant`sigc::bound_mem_functor0<void, ui::MainFrame>::operator(this=0x0000555556cd1258)() const at mem_fun.h:1991:48 frame #16: 0x0000555555d4ba80 darkradiant`sigc::adaptor_functor<sigc::bound_mem_functor0<void, ui::MainFrame> >::operator(this=0x0000555556cd1250)() const at adaptor_trait.h:256:20 frame #17: 0x0000555555d4b22c darkradiant`sigc::internal::slot_call<sigc::bound_mem_functor0<void, ui::MainFrame>, void>::call_it(rep=0x0000555556cd1220) at slot.h:483:35 frame #18: 0x0000555555aec9e2 darkradiant`sigc::internal::signal_emit0<void, sigc::nil>::emit(impl=0x0000555556a31300) at signal.h:798:79 frame #19: 0x0000555555aee4a8 darkradiant`sigc::signal0<void, sigc::nil>::emit(this=0x0000555556163398) const at signal.h:2804:32 frame #20: 0x00007fffeba2acfb libradiantcore.so`module::ModuleRegistry::loadAndInitialiseModules(this=0x0000555556163320) at ModuleRegistry.cpp:192:32 frame #21: 0x00007fffeba8bc87 libradiantcore.so`radiant::Radiant::startup(this=0x00005555562af760) at Radiant.cpp:97:58 frame #22: 0x0000555555be315f darkradiant`RadiantApp::onStartupEvent(this=0x00005555560a4660, ev=0x00005555562dc8d0) at RadiantApp.cpp:230:30 This is the actual line of code which fails in PropertyNotebook.cpp. It seems that existingIndex is actually -1 here.
  24. I don't see how DoF can possibly work in a game which isn't tracking your eyes. How does the game know what you are looking at? Your eyes could be focussed anywhere on screen, which might show objects at a variety of distances. If the depth is taken from the central aim point, that means that instead of just moving your eyes to look at something on screen, you'd also need to move the mouse to remove the artificial blur. DoF looks nice in photos, and as stgatilov says it might work in a VR simulation with eye tracking, but for a 2D image on a standard screen I can't see it adding any value.
×
×
  • Create New...