summaryrefslogtreecommitdiff
path: root/indra/newview
AgeCommit message (Collapse)Author
2024-02-22Lua listen_events(), await_event() => get_event_{pumps,next}().Nat Goodspeed
Don't set up a Lua callback to receive incoming events, a la listen_events(). Don't listen on an arbitrary event pump, a la await_event(). Instead, the new get_event_pumps() entry point simply delivers the reply pump and command pump names (as listen_events() did) without storing a Lua callback. Make LuaListener capture incoming events on the reply pump in a queue. This avoids the problem of multiple events arriving too quickly for the Lua script to retrieve. If the queue gets too big, discard the excess instead of blocking the caller of post(). Then the new get_event_next() entry point retrieves the next (pump, data) pair from the queue, blocking the Lua script until a suitable event arrives. This is closer to the use of stdin for a LEAP plugin. It also addresses the question: what should the Lua script's C++ coroutine do while waiting for an incoming reply pump event? Recast llluamanager_test.cpp for this new, more straightforward API. Move LLLeap's and LuaListener's reply LLEventPump into LLLeapListener, which they both use. This simplifies LLLeapListener's API, which was a little convoluted: the caller supplied a connect callback to allow LLLeapListener to connect some listener to the caller's reply pump. Now, instead, the caller simply passes a bool(pumpname, data) callback to receive events incoming on LLLeapListener's own reply pump. Fix a latent bug in LLLeapListener: if a plugin called listen() more than once with the same listener name, the new connection would not have been saved. While at it, replace some older Boost features in LLLeapListener and LLLeap.
2024-02-13Add leaphelp() Lua builtin function for help on LEAP operations.Nat Goodspeed
leaphelp() (no argument) shows a list of all LEAP APIs. leaphelp(API) shows further help for a specific API. Both forms query LuaListener's LeapListener and report its responses. In future we might reimplement leaphelp() as a Lua function. Add LuaState::getListener() method, which checks whether there's a LuaListener associated with this LuaState and returns a pointer if so. Add LuaState::obtainListener() method, which finds or creates a LuaListener for this LuaState and returns its pointer. Both the above use logic migrated from the Lua listen_events() entry point, which now calls obtainListener() instead.
2024-02-13Merge branch 'release/luau-scripting' into helpcmd.Nat Goodspeed
2024-02-12WIP: Changes towards supporting Lua console help text.Nat Goodspeed
2024-02-12Make LLFloaterLUADebug assume 'Execute' button on LUA String EnterMaxim Nikolenko
2024-02-09Add command-line switches --lua "chunk" and --luafile pathname.Nat Goodspeed
--lua "chunk" runs the specified Lua chunk at startup time. --luafile pathname runs the specified Lua script file at startup time. You may specify more than one --lua or --luafile switch on the command line.
2024-02-09Make LLLUAmanager::runScriptFile() use filename as description.Nat Goodspeed
Since the description shows up in the log output, it's better to see just the script filename than to see "runScriptFile('filename')".
2024-02-09Make LLFloaterLUADebug store a persistent LuaState.Nat Goodspeed
That means that as you use the floater, variables that you assign and functions that you define are available to subsequent Lua chunks.
2024-02-09Merge branch 'implicit-print' of viewer-private into implicit-printNat Goodspeed
2024-02-09When LLFloaterLUADebug script returns a value, display the value.Nat Goodspeed
The chunk: return 1, 2, {} differs in two ways from: print(1, 2, {}) First, print() engages the Lua tostring() builtin, so it displays values as Lua sees them. (For a table, tostring() displays "table: hex", which isn't so wonderful.) But LLFloaterLUADebug serializes the LLSD converted from the Lua return values. Second, we've overridden print() to engage a function that writes to the viewer log as well as displaying to LLFloaterLUADebug. (As we go forward, most Lua scripts won't be run manually by LLFloaterLUADebug.) The values returned by a Lua chunk aren't implicitly logged. Each C++ caller wanting to evaluate a Lua expression can choose whether to log the results.
2024-02-08Add required helptext parameter to lua_function() macro.Nat Goodspeed
Extend the LuaFunction::Registry map to store helptext as well as the function pointer. Add help text to every existing lua_function() invocation.
2024-02-07Fix tests broken by switching from Lua 5.4 to Luau.Nat Goodspeed
Add a new test<1>() that tests returning values from a Lua chunk using LLLUAmanager::waitScriptLine(). This exercises lua_tollsd() without yet involving LLEventPump machinery. For that purpose, extract from test<2>() the sequence of (description, expression, LLSD expected) triples into a static C array. The new test<1>() returns each such expression as a result; test<2>() posts each such expression to a test LLEventPump. test<2>() now uses waitScriptLine() instead of pumping the coroutine scheduler a few times and hoping. The pump-and-hope tactic worked before, but no longer does. waitScriptLine() is more robust anyway. Move the former test<1>() to test<3>() because it exercises still more machinery, specifically listen_events() and await_event(). Because this test involves a handshake with C++ code, use startScriptLine() to launch the Lua coroutine while providing a definite way to wait for completion later. Again, startScriptLine() followed by get() on the returned future is more robust than the previous pump-and-hope code. Similarly, the former test<3>(), now renamed test<4>(), uses startScriptLine() and Future::get() instead of pump-and-hope.
2024-02-07Add LLLUAmanager::startScriptFile(), startScriptLine() functions.Nat Goodspeed
Break out for LLLUAmanager consumers the promise/future semantics of waitScriptFile() and waitScriptLine(). startScriptMumble() uses runScriptMumble() to launch a coroutine to run the specified Lua script or chunk, providing an internal adapter callback to set a promise on completion. It then returns to its caller the future obtained from that promise. This allows a caller to call startScriptMumble(), run in parallel with the Lua coroutine for a while and then call get() on the returned future to wait for results. waitScriptMumble() is then trivially implemented using startScriptMumble(). Fix runScriptLine()'s logic to abbreviate the passed Lua chunk for use as the description. We were erroneously assigning back through a string_view of the parameter, which overwrote a temporary string in the argument list. With Lua 5.4, listen_events() tried to discover the main "thread" (Lua coroutine) associated with the current lua_State so we could call async callbacks on that thread. Luau doesn't seem to provide that feature, so run callbacks on whichever thread calls listen_events(). Reinstate original multi-argument lua_print_msg(), tweaked to avoid the Lua 5.4 lua_rotate() function, which is missing from Luau.
2024-02-07Add machinery to capture result of running a Lua script or snippet.Nat Goodspeed
Add LuaState::expr() that evaluates a Lua snippet and reports back any result (or error) left on the stack. Add LLLUAmanager::runScriptFile() and runScriptLine() overloads that accept a callback with an (int count, LLSD result) signature. The count disambiguates (error, no result, one result, array of results). Also add overloads that accept an existing LuaState instance. Also add waitScriptFile() and waitScriptLine() methods that pause the calling coroutine until the Lua script completes, and return its results. Instead of giving LuaState a description to use for all subsequent checkLua() calls, remove description from its constructor and data members. Move to expr() and checkLua() parameters: we want a description specific to each operation, rather than for the LuaState as a whole. This prepares for persistent LuaState instances. For now, the existing script_finished_fn semantics remain: the callback will be called only when the LuaState is destroyed. This may need to change as we migrate towards longer-lasting LuaState instances. Make lua_function(name) macro append suffixes to the name for both the LuaFunction subclass declaration and the instance declaration. This allows publishing a lua_function() name such as sleep(), which already has a different C++ declaration. Move the Lua sleep() entry point to a standalone lua_function(sleep), instead of a lambda in the body of runScriptFile().
2024-02-06Break out lua_function.h,.cpp and lualistener.h,.cpp.Nat Goodspeed
The intention is to decentralize Luau entry points into our C++ code, permitting a given entry point to be added to the .cpp file that already deals with that class or functional area. Continuing to add every such entry point to llluamanager.cpp doesn't scale well. Extract LuaListener class from llluamanager.cpp to its own header and .cpp file. Extract from llluamanager into lua_function.h (and .cpp) declarations useful for adding a lua_function Luau entry point, e.g.: lua_register() lua_rawlen() lua_tostdstring() lua_pushstdstring() lua_tollsd() lua_pushllsd() LuaPopper lua_function() and LuaFunction class LuaState lua_what lua_stack DebugExit
2024-01-31strip lua testing functionsMnikolenko Productengine
2024-01-29DRTVWR-589: get rid of pragma and update windows libsMnikolenko Productengine
2024-01-26DRTVWR-589: update to start using Luau libsMnikolenko Productengine
2024-01-08DRTVWR-589: Merge branch 'main' into DRTVWR-589.Nat Goodspeed
2024-01-08Increment viewer version to 7.1.3Nat Goodspeed
following promotion of DRTVWR-596
2024-01-05DRTVWR-589: Post-merge fixMnikolenko Productengine
2024-01-04DRTVWR-589: Merge branch 'main' into DRTVWR-589Nat Goodspeed
2023-12-14Merge branch 'DRTVWR-601' of github.com:secondlife/viewer into DRTVWR-601RunitaiLinden
2023-12-14SL-20611 Followup -- fix for depth based atmospheric mask making ↵RunitaiLinden
atmospherics effect sun/moon/clouds
2023-12-14Merge branch 'DRTVWR-596' into DRTVWR-601Brad Linden
2023-12-14Merge remote-tracking branch 'origin/main' into DRTVWR-596Brad Linden
2023-12-14Merge branch 'SL-20730' into DRTVWR-596Brad Linden
2023-12-14Increment viewer version to 7.1.2Nat Goodspeed
following promotion of DRTVWR-587
2023-12-14Merge branch 'DRTVWR-601' of github.com:secondlife/viewer into DRTVWR-601RunitaiLinden
2023-12-14SL-20730 Patch another potential source of NaNsRunitaiLinden
2023-12-14SL-20715 Mask cutoff not copied corretly in build toolsAndrey Kleshchev
2023-12-14SL-20717 Add PBR to Advanced > Rendering TypesMaxim Nikolenko
2023-12-13Merge pull request #578 from sldevel/HUD-fixcosmic-linden
Fix for semi-transparent HUDs rendering opaque
2023-12-13Merge branch 'DRTVWR-601' of github.com:secondlife/viewer into DRTVWR-601RunitaiLinden
2023-12-13SL-20730 Scrub nans from haze alphaRunitaiLinden
2023-12-13Merge remote-tracking branch 'origin/DRTVWR-596' into DRTVWR-596Brad Linden
2023-12-13SL-20611 Followup -- fix for impostors being invisible.RunitaiLinden
2023-12-13SL-20715 Mapping mode and specular color not copied correctlyAndrey Kleshchev
and fixed diffuse alpha
2023-12-12Fix for semi-transparent HUDs rendering opaqueHenri Beauchamp
This commit fixes a bug introduced with commit 6472b75bcd70470fe5775d1cf6eb70a75b3d76e5 where the fullbrightF.glsl shader fails to set color.a to final_alpha for HUDs.
2023-12-11SL-20611 Brute force fix for water haze -- paid for by cycles saved by not ↵Dave Parks
drawing water twice, but needs a better long term solution.
2023-12-11SL-20611 Followup -- reenable water hazeDave Parks
2023-12-11SL-20611 Followup -- fix for artifacts on water surface from GPUs that don't ↵Dave Parks
like to read from a depth buffer that is bound for writing
2023-12-08Merge remote-tracking branch 'origin/DRTVWR-596' into DRTVWR-601Brad Linden
2023-12-08SL-20674 Fix for textures ignoring texture scale when determining what ↵RunitaiLinden
resolution to be.
2023-12-08SL-20701 FIXED Build tool texture tab shows incorrect material parameters in ↵Maxim Nikolenko
some cases
2023-12-06BUG-234706 Fix unstable performance on nvidia systems by always enabling ↵Ansariel Hiller
Threaded Optimization via driver application profile (#564)
2023-12-06Merge branch 'DRTVWR-596' of github.com:secondlife/viewer into DRTVWR-596RunitaiLinden
2023-12-06SL-20611 Followup -- fix banding in water fog (thanks, Rye!)RunitaiLinden
2023-12-06SL-19655 BugSplat Crash: LLGLState::checkStates (2427)Alexander Gavriliuk
2023-12-05SL-20654 Fix for box probes sometimes glitching out at the corners. ↵RunitaiLinden
Incidental fix for crash when mWaterPool is null.