mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-12 02:01:29 -10:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9acb358049 |
No files matched your search
@@ -676,15 +676,12 @@ bool VulkanTextureManager::uploadAnimationFrames(int handle, bitmap* bm, int com
|
||||
// Build per-layer copy regions and upload each frame's data
|
||||
SCP_vector<vk::BufferImageCopy> copyRegions;
|
||||
|
||||
// BMPMAN's bitmap flags describe converted pixel data and do not retain the
|
||||
// BMP_AABITMAP lock flag. EFF animations load each frame separately, so an
|
||||
// 8-bit PCX sibling locked with flags 0 would trip the bpp assert in
|
||||
// bm_convert_format. ANI and APNG decode every frame in the triggering lock,
|
||||
// so their sibling locks load nothing. Other 8bpp sources are safe to treat
|
||||
// the same way: the standalone server never runs Vulkan, user bitmaps are
|
||||
// never multi-frame, and the PNG and DDS loaders ignore lock flags.
|
||||
// Use the same lock parameters that were used for the triggering frame.
|
||||
// bm->flags contains the lock flags (BMP_AABITMAP, BMP_TEX_OTHER, BMP_TEX_DXT*, etc.)
|
||||
// bm->bpp contains the requested bpp. Using these ensures all frames are locked
|
||||
// consistently (e.g., 8bpp for aabitmaps, 32bpp for RGBA textures).
|
||||
auto lockBpp = bm->bpp;
|
||||
auto lockFlags = (lockBpp == 8) ? BMP_AABITMAP : bm->flags;
|
||||
auto lockFlags = bm->flags;
|
||||
|
||||
// Set guard flag to make recursive bm_data calls no-ops
|
||||
m_uploadingAnimation = true;
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace graphics::vulkan {
|
||||
|
||||
// ========== gr_screen function pointer implementations ==========
|
||||
|
||||
int vulkan_preload(int bitmap_num, int is_aabitmap)
|
||||
int vulkan_preload(int bitmap_num, int /*is_aabitmap*/)
|
||||
{
|
||||
auto* texManager = getTextureManager();
|
||||
|
||||
@@ -76,14 +76,8 @@ int vulkan_preload(int bitmap_num, int is_aabitmap)
|
||||
lockFlags = BMP_TEX_ETC2_RGBA1;
|
||||
break;
|
||||
default:
|
||||
// AABITMAP art is a palette-index mask. Keep the indices as R8 so
|
||||
// the HUD shader can use them as coverage instead of RGB color data,
|
||||
// matching the draw-time AABITMAP lock in bindMaterialTextures.
|
||||
// Uncompressed — use 32bpp decompressed
|
||||
compType = 0;
|
||||
if (is_aabitmap) {
|
||||
lockBpp = 8;
|
||||
lockFlags = BMP_AABITMAP;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -105,13 +99,9 @@ int vulkan_preload(int bitmap_num, int is_aabitmap)
|
||||
|
||||
if (success) {
|
||||
static int successCount = 0;
|
||||
// AABITMAP uploads bypass the cap so a playtest can confirm R8 for HUD handles,
|
||||
// which page in long after the first few textures.
|
||||
if (successCount < 10 || is_aabitmap) {
|
||||
auto* uploaded = texManager->getTextureSlot(bitmap_num);
|
||||
nprintf(("vulkan", "vulkan_preload: Successfully uploaded texture %d (compressed=%d, aabitmap=%d, format=%s)\n",
|
||||
bitmap_num, compType, is_aabitmap,
|
||||
uploaded ? vk::to_string(uploaded->format).c_str() : "none"));
|
||||
if (successCount < 10) {
|
||||
nprintf(("vulkan", "vulkan_preload: Successfully uploaded texture %d (compressed=%d)\n",
|
||||
bitmap_num, compType));
|
||||
successCount++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2002,8 +2002,7 @@ ADE_FUNC(getImageHeight, l_Graphics, "string name", "Gets image height", "number
|
||||
ADE_FUNC(flashScreen,
|
||||
l_Graphics,
|
||||
"number|color /* red value or color object */, number Green, number Blue",
|
||||
"Flashes the screen by adding the given color (0-255 per channel) to every pixel. "
|
||||
"Bright parts of the scene can clip to white; see flashScreenAlpha for a blended flash.",
|
||||
"Flashes the screen",
|
||||
nullptr,
|
||||
nullptr)
|
||||
{
|
||||
@@ -2034,43 +2033,6 @@ ADE_FUNC(flashScreen,
|
||||
return ADE_RETURN_NIL;
|
||||
}
|
||||
|
||||
ADE_FUNC(flashScreenAlpha,
|
||||
l_Graphics,
|
||||
"number|color /* red value or color object */, number Green, number Blue, number Alpha",
|
||||
"Flashes the screen by blending every pixel toward the given color by Alpha (0-255), "
|
||||
"so bright parts of the scene keep their detail instead of clipping as with flashScreen. "
|
||||
"When a color object is passed, its alpha is used.",
|
||||
nullptr,
|
||||
nullptr)
|
||||
{
|
||||
if(!Gr_inited)
|
||||
return ADE_RETURN_NIL;
|
||||
|
||||
int r, g, b, a;
|
||||
|
||||
if (lua_isnumber(L, 1)) {
|
||||
if (!ade_get_args(L, "iiii", &r, &g, &b, &a))
|
||||
return ADE_RETURN_NIL;
|
||||
|
||||
} else {
|
||||
color col;
|
||||
|
||||
gr_init_alphacolor(&col, 0, 0, 0, 255);
|
||||
|
||||
if (!ade_get_args(L, "o", l_Color.Get(&col)))
|
||||
return ADE_RETURN_NIL;
|
||||
|
||||
r = col.red;
|
||||
g = col.green;
|
||||
b = col.blue;
|
||||
a = col.alpha;
|
||||
}
|
||||
|
||||
gr_flash_alpha(r, g, b, a);
|
||||
|
||||
return ADE_RETURN_NIL;
|
||||
}
|
||||
|
||||
ADE_FUNC(loadModel, l_Graphics, "string Filename", "Loads the model - will not setup subsystem data, DO NOT USE FOR LOADING SHIP MODELS", "model", "Handle to a model")
|
||||
{
|
||||
const char* s;
|
||||
|
||||
@@ -3144,62 +3144,6 @@ ADE_FUNC(getMissileList,
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(getWeaponList,
|
||||
l_Mission,
|
||||
nullptr,
|
||||
"Get an iterator to the list of weapons in this mission",
|
||||
"iterator<weapon>",
|
||||
"An iterator across all weapons in the mission, including lasers, missiles, and flak. Can be used in a for .. in loop. Is not valid for more than one frame.")
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
return ade_set_args(L, "u", luacpp::LuaFunction::createFromStdFunction(L, [idx](lua_State* LInner, const luacpp::LuaValueList& /*params*/) mutable -> luacpp::LuaValueList {
|
||||
// iterate through the Weapons array to find the next live weapon
|
||||
while (idx < MAX_WEAPONS) {
|
||||
const weapon& wp = Weapons[idx];
|
||||
idx++;
|
||||
|
||||
// unused slots have objnum -1
|
||||
if (wp.objnum >= 0) {
|
||||
if (!Objects[wp.objnum].flags[Object::Object_Flags::Should_be_dead]) {
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createValue(LInner, l_Weapon.Set(object_h(wp.objnum))) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// end of list or no more live weapons found
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createNil(LInner) };
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(getBeamList,
|
||||
l_Mission,
|
||||
nullptr,
|
||||
"Get an iterator to the list of beams in this mission",
|
||||
"iterator<beam>",
|
||||
"An iterator across all beams in the mission. Can be used in a for .. in loop. Is not valid for more than one frame.")
|
||||
{
|
||||
size_t idx = 0;
|
||||
|
||||
return ade_set_args(L, "u", luacpp::LuaFunction::createFromStdFunction(L, [idx](lua_State* LInner, const luacpp::LuaValueList& /*params*/) mutable -> luacpp::LuaValueList {
|
||||
// iterate through the Beams array to find the next active beam
|
||||
while (idx < Beams.size()) {
|
||||
const beam& b = Beams[idx];
|
||||
idx++;
|
||||
|
||||
// inactive and freed beams both have objnum -1
|
||||
if (b.objnum >= 0) {
|
||||
if (!Objects[b.objnum].flags[Object::Object_Flags::Should_be_dead]) {
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createValue(LInner, l_Beam.Set(object_h(b.objnum))) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// end of list or no more active beams found
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createNil(LInner) };
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(getAsteroidList,
|
||||
l_Mission,
|
||||
nullptr,
|
||||
@@ -3260,62 +3204,6 @@ ADE_FUNC(getDebrisList,
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(getFireballList,
|
||||
l_Mission,
|
||||
nullptr,
|
||||
"Get an iterator to the list of fireballs in this mission",
|
||||
"iterator<fireball>",
|
||||
"An iterator across all fireballs in the mission. Can be used in a for .. in loop. Is not valid for more than one frame.")
|
||||
{
|
||||
size_t idx = 0;
|
||||
|
||||
return ade_set_args(L, "u", luacpp::LuaFunction::createFromStdFunction(L, [idx](lua_State* LInner, const luacpp::LuaValueList& /*params*/) mutable -> luacpp::LuaValueList {
|
||||
// iterate through the Fireballs vector to find the next live fireball
|
||||
while (idx < Fireballs.size()) {
|
||||
const fireball& fb = Fireballs[idx];
|
||||
idx++;
|
||||
|
||||
// deleted fireballs keep their slot with objnum -1
|
||||
if (fb.objnum >= 0) {
|
||||
if (!Objects[fb.objnum].flags[Object::Object_Flags::Should_be_dead]) {
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createValue(LInner, l_Fireball.Set(object_h(fb.objnum))) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// end of list or no more live fireballs found
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createNil(LInner) };
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(getPropList,
|
||||
l_Mission,
|
||||
nullptr,
|
||||
"Get an iterator to the list of props in this mission",
|
||||
"iterator<prop>",
|
||||
"An iterator across all props in the mission. Can be used in a for .. in loop. Is not valid for more than one frame.")
|
||||
{
|
||||
size_t idx = 0;
|
||||
|
||||
return ade_set_args(L, "u", luacpp::LuaFunction::createFromStdFunction(L, [idx](lua_State* LInner, const luacpp::LuaValueList& /*params*/) mutable -> luacpp::LuaValueList {
|
||||
// iterate through the Props vector to find the next live prop
|
||||
while (idx < Props.size()) {
|
||||
const auto& opt_prop = Props[idx];
|
||||
idx++;
|
||||
|
||||
// deleted props leave an empty optional behind
|
||||
if (opt_prop.has_value() && opt_prop->objnum >= 0) {
|
||||
if (!Objects[opt_prop->objnum].flags[Object::Object_Flags::Should_be_dead]) {
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createValue(LInner, l_Prop.Set(object_h(opt_prop->objnum))) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// end of list or no more live props found
|
||||
return luacpp::LuaValueList{ luacpp::LuaValue::createNil(LInner) };
|
||||
}));
|
||||
}
|
||||
|
||||
ADE_FUNC(waitAsync,
|
||||
l_Mission,
|
||||
"number seconds",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<p>Opens via <strong>View › Music Player</strong>.</p>
|
||||
<p>Plays back music files from the game's music folder while you work, so you can
|
||||
audition tracks without launching FreeSpace Open. Useful when choosing tracks for
|
||||
<a href="MissionSpecsDialog.html">Mission Specs</a>,
|
||||
<a href="MissionSpecDialog.html">Mission Specs</a>,
|
||||
<a href="BriefingEditorDialog.html">Briefing</a>,
|
||||
<a href="DebriefingDialog.html">Debriefing</a>, or
|
||||
<a href="CommandBriefingDialog.html">Command Briefing</a>.</p>
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>Preferences - QtFRED Help</title>
|
||||
<link rel="stylesheet" type="text/css" href="../css/help.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="breadcrumb"><a href="../index.html">QtFRED Help</a> › Tools › Preferences</nav>
|
||||
<h1>Preferences</h1>
|
||||
<p>Opens via <strong>File › Preferences</strong>.</p>
|
||||
<p>Controls QtFRED editor settings. Changes take effect immediately; there is no
|
||||
Apply button.</p>
|
||||
|
||||
<h2>General</h2>
|
||||
<table>
|
||||
<tr><th>Setting</th><th>Description</th></tr>
|
||||
<tr><td>Move ships with arrow keys</td><td>When enabled, the arrow keys nudge
|
||||
selected objects in the viewport instead of scrolling the view.</td></tr>
|
||||
<tr><td>Check for errors on save</td><td>Runs the built-in mission error checker
|
||||
automatically each time the mission is saved.</td></tr>
|
||||
<tr><td>Show SEXP help tooltips</td><td>Displays documentation tooltips when
|
||||
hovering over SEXP nodes in the condition and action trees.</td></tr>
|
||||
<tr><td>Dark mode</td><td>Switches the editor UI to a dark color
|
||||
theme.</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>Grid</h2>
|
||||
<table>
|
||||
<tr><th>Setting</th><th>Description</th></tr>
|
||||
<tr><td>Grid plane</td><td>Which plane the editor grid lies on:
|
||||
<kbd>XZ</kbd> (horizontal), <kbd>XY</kbd>, or <kbd>YZ</kbd>.</td></tr>
|
||||
<tr><td>Grid center</td><td>The world-space coordinates of the grid's center
|
||||
point.</td></tr>
|
||||
<tr><td>Reset grid</td><td>Resets the grid plane and center to defaults.</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>Keybindings</h2>
|
||||
<p>Lists every editor action alongside its current keyboard shortcut. Click a shortcut
|
||||
field and press a new key combination to rebind it. Conflicts are highlighted.
|
||||
Bindings are saved per-user and persist across sessions.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,6 +68,7 @@ covers the basics of mission creation, the editor dialogs, and advanced topics.<
|
||||
|
||||
<h3>Objects</h3>
|
||||
<ul>
|
||||
<li><a href="dialogs/FormWingDialog.html">Form Wing</a></li>
|
||||
<li><a href="dialogs/JumpNodeEditorDialog.html">Jump Node Editor</a></li>
|
||||
<li><a href="dialogs/ObjectOrientEditorDialog.html">Object Orientation</a></li>
|
||||
<li><a href="dialogs/PropEditorDialog.html">Prop Editor</a></li>
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
<section title="Concepts">
|
||||
<section title="AI" ref="concepts/ai.html"/>
|
||||
<section title="Campaign Flow" ref="concepts/campaign-flow.html"/>
|
||||
<section title="Custom Data" ref="concepts/custom-data.html"/>
|
||||
<section title="IFF & Teams" ref="concepts/iff.html"/>
|
||||
<section title="Messages" ref="concepts/messages.html"/>
|
||||
<section title="SEXPs" ref="concepts/sexps.html"/>
|
||||
@@ -94,7 +93,6 @@
|
||||
<keyword name="AI" id="concept.ai" ref="concepts/ai.html"/>
|
||||
<keyword name="Messages" id="concept.messages" ref="concepts/messages.html"/>
|
||||
<keyword name="Campaign Flow" id="concept.campaignflow" ref="concepts/campaign-flow.html"/>
|
||||
<keyword name="Custom Data Concepts" id="concept.customdata" ref="concepts/custom-data.html"/>
|
||||
<keyword name="Viewport" id="concept.viewport" ref="general/Viewport.html"/>
|
||||
<keyword name="Toolbars" id="concept.toolbar" ref="general/Toolbars.html"/>
|
||||
<keyword name="Custom Data" id="CustomDataDialog" ref="dialogs/CustomDataDialog.html"/>
|
||||
@@ -160,7 +158,6 @@
|
||||
<file>concepts/ai.html</file>
|
||||
<file>concepts/messages.html</file>
|
||||
<file>concepts/campaign-flow.html</file>
|
||||
<file>concepts/custom-data.html</file>
|
||||
<file>dialogs/CustomDataDialog.html</file>
|
||||
<file>css/help.css</file>
|
||||
<file>dialogs/AsteroidEditorDialog.html</file>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
set(FSO_VERSION_REVISION 20261111)
|
||||
set(FSO_VERSION_REVISION_STR 20261111_8ef44a411)
|
||||
Reference in new issue
Block a user