commit
2f221e5fd5
|
@ -58,9 +58,9 @@ public:
|
|||
};
|
||||
|
||||
enum CacheMode {
|
||||
CACHE_MODE_IGNORE, //resource and subresources do not use path cache, no path is set into resource.
|
||||
CACHE_MODE_REUSE, //resource and subresources use patch cache, reuse existing loaded resources instead of loading from disk when available
|
||||
CACHE_MODE_REPLACE, //resource and and subresource use path cache, but replace existing loaded resources when available with information from disk
|
||||
CACHE_MODE_IGNORE, // Resource and subresources do not use path cache, no path is set into resource.
|
||||
CACHE_MODE_REUSE, // Resource and subresources use patch cache, reuse existing loaded resources instead of loading from disk when available.
|
||||
CACHE_MODE_REPLACE, // Resource and subresource use path cache, but replace existing loaded resources when available with information from disk.
|
||||
};
|
||||
|
||||
static _ResourceLoader *get_singleton() { return singleton; }
|
||||
|
|
|
@ -94,8 +94,8 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
|
|||
{ Variant::NODE_PATH, ptrsize_32, ptrsize_64, ptrsize_32, ptrsize_64 },
|
||||
{ Variant::RID, sizeof(uint64_t), sizeof(uint64_t), sizeof(uint64_t), sizeof(uint64_t) },
|
||||
{ Variant::OBJECT, ptrsize_32, ptrsize_64, ptrsize_32, ptrsize_64 },
|
||||
{ Variant::CALLABLE, sizeof(Callable), sizeof(Callable), sizeof(Callable), sizeof(Callable) }, //harcoded align
|
||||
{ Variant::SIGNAL, sizeof(Signal), sizeof(Signal), sizeof(Signal), sizeof(Signal) }, //harcoded align
|
||||
{ Variant::CALLABLE, sizeof(Callable), sizeof(Callable), sizeof(Callable), sizeof(Callable) }, // Hardcoded align.
|
||||
{ Variant::SIGNAL, sizeof(Signal), sizeof(Signal), sizeof(Signal), sizeof(Signal) }, // Hardcoded align.
|
||||
{ Variant::DICTIONARY, ptrsize_32, ptrsize_64, ptrsize_32, ptrsize_64 },
|
||||
{ Variant::ARRAY, ptrsize_32, ptrsize_64, ptrsize_32, ptrsize_64 },
|
||||
{ Variant::PACKED_BYTE_ARRAY, ptrsize_32, ptrsize_64, ptrsize_32, ptrsize_64 },
|
||||
|
@ -146,7 +146,7 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
|
|||
}
|
||||
|
||||
{
|
||||
//member offsets sizes
|
||||
// Member offsets sizes.
|
||||
struct {
|
||||
Variant::Type type;
|
||||
const char *member;
|
||||
|
@ -180,7 +180,7 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
|
|||
{ Variant::QUATERNION, "w", 3 * sizeof(float), 3 * sizeof(float), 3 * sizeof(double), 3 * sizeof(double) },
|
||||
{ Variant::AABB, "position", 0, 0, 0, 0 },
|
||||
{ Variant::AABB, "size", vec3_elems * sizeof(float), vec3_elems * sizeof(float), vec3_elems * sizeof(double), vec3_elems * sizeof(double) },
|
||||
//rememer that basis vectors are flipped!
|
||||
// Remember that basis vectors are flipped!
|
||||
{ Variant::BASIS, "x", 0, 0, 0, 0 },
|
||||
{ Variant::BASIS, "y", vec3_elems * sizeof(float), vec3_elems * sizeof(float), vec3_elems * sizeof(double), vec3_elems * sizeof(double) },
|
||||
{ Variant::BASIS, "z", vec3_elems * 2 * sizeof(float), vec3_elems * 2 * sizeof(float), vec3_elems * 2 * sizeof(double), vec3_elems * 2 * sizeof(double) },
|
||||
|
@ -251,7 +251,7 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
|
|||
}
|
||||
|
||||
{
|
||||
// global enums and constants
|
||||
// Global enums and constants.
|
||||
Array constants;
|
||||
Map<String, List<Pair<String, int>>> enum_list;
|
||||
|
||||
|
|
|
@ -40,9 +40,9 @@ class ResourceFormatLoader : public RefCounted {
|
|||
|
||||
public:
|
||||
enum CacheMode {
|
||||
CACHE_MODE_IGNORE, //resource and subresources do not use path cache, no path is set into resource.
|
||||
CACHE_MODE_REUSE, //resource and subresources use patch cache, reuse existing loaded resources instead of loading from disk when available
|
||||
CACHE_MODE_REPLACE, //resource and and subresource use path cache, but replace existing loaded resources when available with information from disk
|
||||
CACHE_MODE_IGNORE, // Resource and subresources do not use path cache, no path is set into resource.
|
||||
CACHE_MODE_REUSE, // Resource and subresources use patch cache, reuse existing loaded resources instead of loading from disk when available.
|
||||
CACHE_MODE_REPLACE, // Resource and subresource use path cache, but replace existing loaded resources when available with information from disk.
|
||||
};
|
||||
|
||||
protected:
|
||||
|
@ -108,7 +108,7 @@ private:
|
|||
|
||||
friend class ResourceFormatImporter;
|
||||
friend class ResourceInteractiveLoader;
|
||||
//internal load function
|
||||
// Internal load function.
|
||||
static RES _load(const String &p_path, const String &p_original_path, const String &p_type_hint, ResourceFormatLoader::CacheMode p_cache_mode, Error *r_error, bool p_use_sub_threads, float *r_progress);
|
||||
|
||||
static ResourceLoadedCallback _loaded_callback;
|
||||
|
|
|
@ -50,8 +50,8 @@ public:
|
|||
/**
|
||||
*
|
||||
* @param p_plane plane used to split the face
|
||||
* @param p_res array of at least 3 faces, amount used in functio return
|
||||
* @param p_is_point_over array of at least 3 booleans, determining which face is over the plane, amount used in functio return
|
||||
* @param p_res array of at least 3 faces, amount used in function return
|
||||
* @param p_is_point_over array of at least 3 booleans, determining which face is over the plane, amount used in function return
|
||||
* @param _epsilon constant used for numerical error rounding, to add "thickness" to the plane (so coplanar points can happen)
|
||||
* @return amount of faces generated by the split, either 0 (means no split possible), 2 or 3
|
||||
*/
|
||||
|
|
|
@ -40,7 +40,7 @@ class Geometry3D {
|
|||
|
||||
public:
|
||||
static void get_closest_points_between_segments(const Vector3 &p1, const Vector3 &p2, const Vector3 &q1, const Vector3 &q2, Vector3 &c1, Vector3 &c2) {
|
||||
// Do the function 'd' as defined by pb. I think is is dot product of some sort.
|
||||
// Do the function 'd' as defined by pb. I think it's a dot product of some sort.
|
||||
#define d_of(m, n, o, p) ((m.x - n.x) * (o.x - p.x) + (m.y - n.y) * (o.y - p.y) + (m.z - n.z) * (o.z - p.z))
|
||||
|
||||
// Calculate the parametric position on the 2 curves, mua and mub.
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
@author Juan Linietsky <reduzio@gmail.com>
|
||||
* Generic Pool Allocator.
|
||||
* This is a generic memory pool allocator, with locking, compacting and alignment. (@TODO alignment)
|
||||
* It used as a standard way to manage alloction in a specific region of memory, such as texture memory,
|
||||
* It used as a standard way to manage allocation in a specific region of memory, such as texture memory,
|
||||
* audio sample memory, or just any kind of memory overall.
|
||||
* (@TODO) abstraction should be greater, because in many platforms, you need to manage a nonreachable memory.
|
||||
*/
|
||||
|
|
|
@ -297,7 +297,7 @@ void register_core_singletons() {
|
|||
}
|
||||
|
||||
void register_core_extensions() {
|
||||
//harcoded for now
|
||||
// Hardcoded for now.
|
||||
if (ProjectSettings::get_singleton()->has_setting("native_extensions/paths")) {
|
||||
Vector<String> paths = ProjectSettings::get_singleton()->get("native_extensions/paths");
|
||||
for (int i = 0; i < paths.size(); i++) {
|
||||
|
|
|
@ -321,7 +321,7 @@ class CommandQueueMT {
|
|||
DECL_CMD(0)
|
||||
SPACE_SEP_LIST(DECL_CMD, 15)
|
||||
|
||||
/* comands that return */
|
||||
// Commands that return.
|
||||
DECL_CMD_RET(0)
|
||||
SPACE_SEP_LIST(DECL_CMD_RET, 15)
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ class RID_Alloc : public RID_AllocBase {
|
|||
|
||||
//initialize
|
||||
for (uint32_t i = 0; i < elements_in_chunk; i++) {
|
||||
//dont initialize chunk
|
||||
// Don't initialize chunk.
|
||||
validator_chunks[chunk_count][i] = 0xFFFFFFFF;
|
||||
free_list_chunks[chunk_count][i] = alloc_count + i;
|
||||
}
|
||||
|
|
|
@ -253,7 +253,7 @@ private:
|
|||
true, //PACKED_COLOR_ARRAY,
|
||||
};
|
||||
|
||||
if (unlikely(needs_deinit[type])) { //make it fast for types that dont need deinit
|
||||
if (unlikely(needs_deinit[type])) { // Make it fast for types that don't need deinit.
|
||||
_clear_internal();
|
||||
}
|
||||
type = NIL;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
Interpolates an abstract value and supplies it to a method called over time.
|
||||
</brief_description>
|
||||
<description>
|
||||
[MethodTweener] is similar to a combination of [CallbackTweener] and [PropertyTweener]. It calls a method providing an interpolated value as a paramater. See [method Tween.tween_method] for more usage information.
|
||||
[MethodTweener] is similar to a combination of [CallbackTweener] and [PropertyTweener]. It calls a method providing an interpolated value as a parameter. See [method Tween.tween_method] for more usage information.
|
||||
[b]Note:[/b] [method Tween.tween_method] is the only correct way to create [MethodTweener]. Any [MethodTweener] created manually will not function correctly.
|
||||
</description>
|
||||
<tutorials>
|
||||
|
|
|
@ -335,7 +335,7 @@
|
|||
Local space [Transform3D] of this node, with respect to the parent node.
|
||||
</member>
|
||||
<member name="visibility_parent" type="NodePath" setter="set_visibility_parent" getter="get_visibility_parent" default="NodePath("")">
|
||||
Defines the visibility range parent for this node and its subtree. The visibility parent must be a GeometryInstance3D. Any visual instance will only be visible if the visibility parent (and all of its visibility ancestors) is hidden by being closer to the camera than its own [member GeometryInstance3D.visibility_range_begin]. Nodes hidden via the [member Node3D.visible] property are essentially removed from the visibility dependency tree, so dependant instances will not take the hidden node or its ancestors into account.
|
||||
Defines the visibility range parent for this node and its subtree. The visibility parent must be a GeometryInstance3D. Any visual instance will only be visible if the visibility parent (and all of its visibility ancestors) is hidden by being closer to the camera than its own [member GeometryInstance3D.visibility_range_begin]. Nodes hidden via the [member Node3D.visible] property are essentially removed from the visibility dependency tree, so dependent instances will not take the hidden node or its ancestors into account.
|
||||
</member>
|
||||
<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
|
||||
If [code]true[/code], this node is drawn. The node is only visible if all of its antecedents are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
<return type="Array">
|
||||
</return>
|
||||
<description>
|
||||
Returns an array of currently exising [Tween]s in the [SceneTree] (both running and paused).
|
||||
Returns an array of currently existing [Tween]s in the [SceneTree] (both running and paused).
|
||||
</description>
|
||||
</method>
|
||||
<method name="has_group" qualifiers="const">
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
</argument>
|
||||
<description>
|
||||
Sets the local pose transform, [code]pose[/code], for the bone at [code]bone_idx[/code].
|
||||
[code]amount[/code] is the interpolation strengh that will be used when applying the pose, and [code]persistent[/code] determines if the applied pose will remain.
|
||||
[code]amount[/code] is the interpolation strength that will be used when applying the pose, and [code]persistent[/code] determines if the applied pose will remain.
|
||||
[b]Note:[/b] The pose transform needs to be a local transform relative to the [Bone2D] node at [code]bone_idx[/code]!
|
||||
</description>
|
||||
</method>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<return type="void">
|
||||
</return>
|
||||
<description>
|
||||
Used for drawing [b]editor-only[/b] modification gizmos. This function will only be called in the Godot editor and can be overriden to draw custom gizmos.
|
||||
Used for drawing [b]editor-only[/b] modification gizmos. This function will only be called in the Godot editor and can be overridden to draw custom gizmos.
|
||||
[b]Note:[/b] You will need to use the Skeleton2D from [method SkeletonModificationStack2D.get_skeleton] and it's draw functions, as the [SkeletonModification2D] resource cannot draw on its own.
|
||||
</description>
|
||||
</method>
|
||||
|
@ -96,7 +96,7 @@
|
|||
If [code]true[/code], the modification's [method _execute] function will be called by the [SkeletonModificationStack2D].
|
||||
</member>
|
||||
<member name="execution_mode" type="int" setter="set_execution_mode" getter="get_execution_mode" default="0">
|
||||
The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only availible in certain execution modes.
|
||||
The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only available in certain execution modes.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
A modification that uses CCDIK to manipulate a series of bones to reach a target in 2D.
|
||||
</brief_description>
|
||||
<description>
|
||||
This [SkeletonModification2D] uses an algorithm called [b]C[/b]yclic [b]C[/b]oordinate [b]D[/b]escent [b]I[/b]nverse [b]K[/b]inematics, or CCDIK, to maniuplate a chain of bones in a [Skeleton2D] so it reaches a defined target.
|
||||
This [SkeletonModification2D] uses an algorithm called [b]C[/b]yclic [b]C[/b]oordinate [b]D[/b]escent [b]I[/b]nverse [b]K[/b]inematics, or CCDIK, to manipulate a chain of bones in a [Skeleton2D] so it reaches a defined target.
|
||||
CCDIK works by rotating a set of bones, typically called a "bone chain", on a single axis. Each bone is rotated to face the target from the tip (by default), which over a chain of bones allow it to rotate properly to reach the target. Because the bones only rotate on a single axis, CCDIK [i]can[/i] look more robotic than other IK solvers.
|
||||
[b]Note:[/b] The CCDIK modifier has [code]ccdik_joints[/code], which are the data objects that hold the data for each joint in the CCDIK chain. This is different from a bone! CCDIK joints hold the data needed for each bone in the bone chain used by CCDIK.
|
||||
CCDIK also fully supports angle constraints, allowing for more control over how a solution is met.
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
<argument index="0" name="joint_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns a boolean that indiciates whether the joint at [code]joint_idx[/code] is overriding the default Jiggle joint data defined in the modification.
|
||||
Returns a boolean that indicates whether the joint at [code]joint_idx[/code] is overriding the default Jiggle joint data defined in the modification.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_jiggle_joint_stiffness" qualifiers="const">
|
||||
|
@ -87,7 +87,7 @@
|
|||
<argument index="0" name="joint_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns a boolean that indiciates whether the joint at [code]joint_idx[/code] is using gravity or not.
|
||||
Returns a boolean that indicates whether the joint at [code]joint_idx[/code] is using gravity or not.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_use_colliders" qualifiers="const">
|
||||
|
@ -206,19 +206,19 @@
|
|||
</methods>
|
||||
<members>
|
||||
<member name="damping" type="float" setter="set_damping" getter="get_damping" default="0.75">
|
||||
The default amount of dampening applied to the Jiggle joints, if they are not overriden. Higher values lead to more of the calculated velocity being applied.
|
||||
The default amount of dampening applied to the Jiggle joints, if they are not overridden. Higher values lead to more of the calculated velocity being applied.
|
||||
</member>
|
||||
<member name="gravity" type="Vector2" setter="set_gravity" getter="get_gravity" default="Vector2(0, 6)">
|
||||
The default amount of gravity applied to the Jiggle joints, if they are not overriden.
|
||||
The default amount of gravity applied to the Jiggle joints, if they are not overridden.
|
||||
</member>
|
||||
<member name="jiggle_data_chain_length" type="int" setter="set_jiggle_data_chain_length" getter="get_jiggle_data_chain_length" default="0">
|
||||
The amount of Jiggle joints in the Jiggle modification.
|
||||
</member>
|
||||
<member name="mass" type="float" setter="set_mass" getter="get_mass" default="0.75">
|
||||
The default amount of mass assigned to the Jiggle joints, if they are not overriden. Higher values lead to faster movements and more overshooting.
|
||||
The default amount of mass assigned to the Jiggle joints, if they are not overridden. Higher values lead to faster movements and more overshooting.
|
||||
</member>
|
||||
<member name="stiffness" type="float" setter="set_stiffness" getter="get_stiffness" default="3.0">
|
||||
The default amount of stiffness assigned to the Jiggle joints, if they are not overriden. Higher values act more like springs, quickly moving into the correct position.
|
||||
The default amount of stiffness assigned to the Jiggle joints, if they are not overridden. Higher values act more like springs, quickly moving into the correct position.
|
||||
</member>
|
||||
<member name="target_nodepath" type="NodePath" setter="set_target_node" getter="get_target_node" default="NodePath("")">
|
||||
The NodePath to the node that is the target for the Jiggle modification. This node is what the Jiggle chain will attempt to rotate the bone chain to.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
A modification that rotates two bones using the law of cosigns to reach the target.
|
||||
</brief_description>
|
||||
<description>
|
||||
This [SkeletonModification2D] uses an algorithm typically called TwoBoneIK. This algorithm works by leveraging the law of cosigns and the lengths of the bones to figure out what rotation the bones currently have, and what rotation they need to make a complete triangle, where the first bone, the second bone, and the target form the three verticies of the triangle. Because the algorithm works by making a triangle, it can only opperate on two bones.
|
||||
This [SkeletonModification2D] uses an algorithm typically called TwoBoneIK. This algorithm works by leveraging the law of cosigns and the lengths of the bones to figure out what rotation the bones currently have, and what rotation they need to make a complete triangle, where the first bone, the second bone, and the target form the three vertices of the triangle. Because the algorithm works by making a triangle, it can only operate on two bones.
|
||||
TwoBoneIK is great for arms, legs, and really any joints that can be represented by just two bones that bend to reach a target. This solver is more lightweight than [SkeletonModification2DFABRIK], but gives similar, natural looking results.
|
||||
</description>
|
||||
<tutorials>
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Returns a boolean that indiciates whether the modification stack is setup and can execute.
|
||||
Returns a boolean that indicates whether the modification stack is setup and can execute.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_modification" qualifiers="const">
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<return type="Vector2">
|
||||
</return>
|
||||
<description>
|
||||
Gets the caret pixel draw poistion.
|
||||
Gets the caret pixel draw position.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_first_non_whitespace_column" qualifiers="const">
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
<return type="Tween">
|
||||
</return>
|
||||
<description>
|
||||
Makes the next [Tweener] run parallely to the previous one. Example:
|
||||
Makes the next [Tweener] run parallelly to the previous one. Example:
|
||||
[codeblock]
|
||||
var tween = create_tween()
|
||||
tween.tween_property(...)
|
||||
|
@ -175,7 +175,7 @@
|
|||
<argument index="0" name="parallel" type="bool" default="true">
|
||||
</argument>
|
||||
<description>
|
||||
If [code]parallel[/code] is [code]true[/code], the [Tweener]s appended after this method will by default run simultanously, as opposed to sequentially.
|
||||
If [code]parallel[/code] is [code]true[/code], the [Tweener]s appended after this method will by default run simultaneously, as opposed to sequentially.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_pause_mode">
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<signals>
|
||||
<signal name="finished">
|
||||
<description>
|
||||
Emited when the [Tweener] has just finished its job.
|
||||
Emitted when the [Tweener] has just finished its job.
|
||||
</description>
|
||||
</signal>
|
||||
</signals>
|
||||
|
|
|
@ -652,8 +652,8 @@ class RenderingDeviceVulkan : public RenderingDevice {
|
|||
// Basically, you can mix and match pools as you
|
||||
// like, but you'll run into fragmentation issues.
|
||||
// Because of this, the recommended approach is to
|
||||
// create a a pool for every descriptor set type,
|
||||
// as this prevents fragmentation.
|
||||
// create a pool for every descriptor set type, as
|
||||
// this prevents fragmentation.
|
||||
//
|
||||
// This is implemented here as a having a list of
|
||||
// pools (each can contain up to 64 sets) for each
|
||||
|
|
|
@ -1970,7 +1970,7 @@ void EditorInspector::update_tree() {
|
|||
if (F.label != String()) {
|
||||
ep->set_label(F.label);
|
||||
} else {
|
||||
//use existin one
|
||||
// Use the existing one.
|
||||
ep->set_label(name);
|
||||
}
|
||||
for (int i = 0; i < F.properties.size(); i++) {
|
||||
|
|
|
@ -926,7 +926,7 @@ void EditorNode::_sources_changed(bool p_exist) {
|
|||
waiting_for_first_scan = false;
|
||||
|
||||
// Reload the global shader variables, but this time
|
||||
// loading texures, as they are now properly imported.
|
||||
// loading textures, as they are now properly imported.
|
||||
RenderingServer::get_singleton()->global_variables_load_settings(true);
|
||||
|
||||
// Start preview thread now that it's safe.
|
||||
|
|
|
@ -1429,7 +1429,7 @@ float EditorSettings::get_auto_display_scale() const {
|
|||
return DisplayServer::get_singleton()->screen_get_max_scale();
|
||||
#else
|
||||
const int screen = DisplayServer::get_singleton()->window_get_current_screen();
|
||||
// Use the smallest dimension to use a correct display scale on portait displays.
|
||||
// Use the smallest dimension to use a correct display scale on portrait displays.
|
||||
const int smallest_dimension = MIN(DisplayServer::get_singleton()->screen_get_size(screen).x, DisplayServer::get_singleton()->screen_get_size(screen).y);
|
||||
if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && smallest_dimension >= 1400) {
|
||||
// hiDPI display.
|
||||
|
|
|
@ -770,7 +770,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) {
|
|||
disk_changed->add_child(vbc);
|
||||
|
||||
Label *dl = memnew(Label);
|
||||
dl->set_text(TTR("This shader has been modified on on disk.\nWhat action should be taken?"));
|
||||
dl->set_text(TTR("This shader has been modified on disk.\nWhat action should be taken?"));
|
||||
vbc->add_child(dl);
|
||||
|
||||
disk_changed->connect("confirmed", callable_mp(this, &ShaderEditor::_reload_shader_from_disk));
|
||||
|
|
|
@ -754,7 +754,7 @@ void ThemeItemImportTree::_import_selected() {
|
|||
return;
|
||||
}
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
ProgressDialog::get_singleton()->add_task("import_theme_items", TTR("Importing Theme Items"), selected_items.size() + 2);
|
||||
|
||||
|
@ -1503,7 +1503,7 @@ void ThemeItemEditorDialog::_add_theme_item(Theme::DataType p_data_type, String
|
|||
void ThemeItemEditorDialog::_remove_data_type_items(Theme::DataType p_data_type, String p_item_type) {
|
||||
List<StringName> names;
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
edited_theme->get_theme_item_list(p_data_type, p_item_type, &names);
|
||||
|
@ -1518,7 +1518,7 @@ void ThemeItemEditorDialog::_remove_data_type_items(Theme::DataType p_data_type,
|
|||
void ThemeItemEditorDialog::_remove_class_items() {
|
||||
List<StringName> names;
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) {
|
||||
|
@ -1542,7 +1542,7 @@ void ThemeItemEditorDialog::_remove_class_items() {
|
|||
void ThemeItemEditorDialog::_remove_custom_items() {
|
||||
List<StringName> names;
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) {
|
||||
|
@ -1566,7 +1566,7 @@ void ThemeItemEditorDialog::_remove_custom_items() {
|
|||
void ThemeItemEditorDialog::_remove_all_items() {
|
||||
List<StringName> names;
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) {
|
||||
|
@ -2574,7 +2574,7 @@ void ThemeTypeEditor::_add_default_type_items() {
|
|||
}
|
||||
|
||||
updating = true;
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
{
|
||||
|
@ -2876,7 +2876,7 @@ void ThemeTypeEditor::_update_stylebox_from_leading() {
|
|||
return;
|
||||
}
|
||||
|
||||
// Prevent changes from immediatelly being reported while the operation is still ongoing.
|
||||
// Prevent changes from immediately being reported while the operation is still ongoing.
|
||||
edited_theme->_freeze_change_propagation();
|
||||
|
||||
List<StringName> names;
|
||||
|
|
|
@ -1244,7 +1244,7 @@ void TileDataCollisionEditor::_polygons_changed() {
|
|||
}
|
||||
}
|
||||
|
||||
// Remove uneeded properties and their editors.
|
||||
// Remove unneeded properties and their editors.
|
||||
for (int i = polygon_editor->get_polygon_count(); dummy_object->has_dummy_property(vformat("polygon_%d_one_way", i)); i++) {
|
||||
dummy_object->remove_dummy_property(vformat("polygon_%d_one_way", i));
|
||||
}
|
||||
|
|
|
@ -6979,7 +6979,7 @@ msgstr ""
|
|||
|
||||
#: editor/plugins/shader_editor_plugin.cpp
|
||||
msgid ""
|
||||
"This shader has been modified on on disk.\n"
|
||||
"This shader has been modified on disk.\n"
|
||||
"What action should be taken?"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
// Split a string into an array using passed delimeter
|
||||
// Split a string into an array using passed delimiter.
|
||||
procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String);
|
||||
var
|
||||
i: Integer;
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#define CAMERAOSX_H
|
||||
|
||||
///@TODO this is a near duplicate of CameraIOS, we should find a way to combine those to minimize code duplication!!!!
|
||||
// If you fix something here, make sure you fix it there as wel!
|
||||
// If you fix something here, make sure you fix it there as well!
|
||||
|
||||
#include "servers/camera_server.h"
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
/*************************************************************************/
|
||||
|
||||
///@TODO this is a near duplicate of CameraIOS, we should find a way to combine those to minimize code duplication!!!!
|
||||
// If you fix something here, make sure you fix it there as wel!
|
||||
// If you fix something here, make sure you fix it there as well!
|
||||
|
||||
#include "camera_osx.h"
|
||||
#include "servers/camera/camera_feed.h"
|
||||
|
|
|
@ -70,7 +70,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file Helper class tp perform various byte oder swappings
|
||||
/** @file Helper class tp perform various byte order swappings
|
||||
(e.g. little to big endian) */
|
||||
#ifndef BYTE_SWAPPER_H
|
||||
#define BYTE_SWAPPER_H
|
||||
|
|
|
@ -198,7 +198,7 @@ ObjectPtr LazyObject::LoadObject() {
|
|||
object.reset(new ModelLimbNode(id, element, doc, name));
|
||||
|
||||
} else if (strcmp(classtag.c_str(), "IKEffector") && strcmp(classtag.c_str(), "FKEffector")) {
|
||||
// FK and IK effectors are not supporte
|
||||
// FK and IK effectors are not supported.
|
||||
object.reset(new Model(id, element, doc, name));
|
||||
}
|
||||
} else if (!strncmp(obtype, "Material", length)) {
|
||||
|
|
|
@ -79,7 +79,7 @@ Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port,
|
|||
String str = "ws://";
|
||||
|
||||
if (p_custom_headers.size()) {
|
||||
WARN_PRINT_ONCE("Custom headers are not supported in in HTML5 platform.");
|
||||
WARN_PRINT_ONCE("Custom headers are not supported in HTML5 platform.");
|
||||
}
|
||||
if (p_ssl) {
|
||||
str = "wss://";
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
- Using [XRController3D] nodes and their [signal XRController3D.button_pressed] and [signal XRController3D.button_released] signals. This is how controllers are typically handled in AR/VR apps in Godot, however, this will only work with advanced VR controllers like the Oculus Touch or Index controllers, for example. The buttons codes are defined by [url=https://immersive-web.github.io/webxr-gamepads-module/#xr-standard-gamepad-mapping]Section 3.3 of the WebXR Gamepads Module[/url].
|
||||
- Using [method Node._unhandled_input] and [InputEventJoypadButton] or [InputEventJoypadMotion]. This works the same as normal joypads, except the [member InputEvent.device] starts at 100, so the left controller is 100 and the right controller is 101, and the button codes are also defined by [url=https://immersive-web.github.io/webxr-gamepads-module/#xr-standard-gamepad-mapping]Section 3.3 of the WebXR Gamepads Module[/url].
|
||||
- Using the [signal select], [signal squeeze] and related signals. This method will work for both advanced VR controllers, and non-traditional "controllers" like a tap on the screen, a spoken voice command or a button press on the device itself. The [code]controller_id[/code] passed to these signals is the same id as used in [member XRController3D.controller_id].
|
||||
You can use one or all of these methods to allow your game or app to support a wider or narrower set of devices and input methods, or to allow more advanced interations with more advanced devices.
|
||||
You can use one or all of these methods to allow your game or app to support a wider or narrower set of devices and input methods, or to allow more advanced interactions with more advanced devices.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="How to make a VR game for WebXR with Godot">https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot</link>
|
||||
|
|
|
@ -20,7 +20,7 @@ package com.google.android.vending.licensing;
|
|||
* Interface used as part of a {@link Policy} to allow application authors to obfuscate
|
||||
* licensing data that will be stored into a SharedPreferences file.
|
||||
* <p>
|
||||
* Any transformation scheme must be reversable. Implementing classes may optionally implement an
|
||||
* Any transformation scheme must be reversible. Implementing classes may optionally implement an
|
||||
* integrity check to further prevent modification to preference data. Implementing classes
|
||||
* should use device-specific information as a key in the obfuscation algorithm to prevent
|
||||
* obfuscated preferences from being shared among devices.
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
|
||||
// GLViewGestureRecognizer allows iOS gestures to work currectly by
|
||||
// GLViewGestureRecognizer allows iOS gestures to work correctly by
|
||||
// emulating UIScrollView's UIScrollViewDelayedTouchesBeganGestureRecognizer.
|
||||
// It catches all gestures incoming to UIView and delays them for 150ms
|
||||
// (the same value used by UIScrollViewDelayedTouchesBeganGestureRecognizer)
|
||||
|
|
|
@ -115,7 +115,7 @@ class GodotProcessor extends AudioWorkletProcessor {
|
|||
this.input = new RingBuffer(p_data[1], avail_in);
|
||||
this.output = new RingBuffer(p_data[2], avail_out);
|
||||
} else if (p_cmd === 'stop') {
|
||||
this.runing = false;
|
||||
this.running = false;
|
||||
this.output = null;
|
||||
this.input = null;
|
||||
}
|
||||
|
|
|
@ -2167,7 +2167,7 @@ void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event,
|
|||
// still works in half the cases. (won't handle deadkeys)
|
||||
// For more complex input methods (deadkeys and more advanced)
|
||||
// you have to use XmbLookupString (??).
|
||||
// So.. then you have to chosse which of both results
|
||||
// So then you have to choose which of both results
|
||||
// you want to keep.
|
||||
// This is a real bizarreness and cpu waster.
|
||||
|
||||
|
|
|
@ -451,7 +451,7 @@ Error OS_LinuxBSD::move_to_trash(const String &p_path) {
|
|||
DirAccess *dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
||||
Error err = dir_access->make_dir_recursive(trash_path);
|
||||
|
||||
// Issue an error if trash can is not created proprely.
|
||||
// Issue an error if trash can is not created properly.
|
||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"");
|
||||
err = dir_access->make_dir_recursive(trash_path + "/files");
|
||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Could not create the trash path \"" + trash_path + "\"/files");
|
||||
|
|
|
@ -369,7 +369,7 @@ String OS_OSX::get_cache_path() const {
|
|||
if (get_environment("XDG_CACHE_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_CACHE_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Libary/Caches` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Library/Caches` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
if (has_environment("HOME")) {
|
||||
|
|
|
@ -2128,7 +2128,7 @@ int CodeEdit::_is_in_delimiter(int p_line, int p_column, DelimiterType p_type) c
|
|||
int region = (p_line <= 0 || delimiter_cache[p_line - 1].size() < 1) ? -1 : delimiter_cache[p_line - 1].back()->value();
|
||||
bool in_region = region != -1 && delimiters[region].type == p_type;
|
||||
for (Map<int, int>::Element *E = delimiter_cache[p_line].front(); E; E = E->next()) {
|
||||
/* If column is specified, loop untill the key is larger then the column. */
|
||||
/* If column is specified, loop until the key is larger then the column. */
|
||||
if (p_column != -1) {
|
||||
if (E->key() > p_column) {
|
||||
break;
|
||||
|
@ -2138,7 +2138,7 @@ int CodeEdit::_is_in_delimiter(int p_line, int p_column, DelimiterType p_type) c
|
|||
continue;
|
||||
}
|
||||
|
||||
/* If no column, calulate if the entire line is a region */
|
||||
/* If no column, calculate if the entire line is a region */
|
||||
/* excluding whitespace. */
|
||||
const String line = get_line(p_line);
|
||||
if (!in_region) {
|
||||
|
|
|
@ -1594,7 +1594,7 @@ void Control::set_rect(const Rect2 &p_rect) {
|
|||
void Control::_set_size(const Size2 &p_size) {
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (data.size_warning && (data.anchor[SIDE_LEFT] != data.anchor[SIDE_RIGHT] || data.anchor[SIDE_TOP] != data.anchor[SIDE_BOTTOM])) {
|
||||
WARN_PRINT("Nodes with non-equal opposite anchors will have their size overriden after _ready(). \nIf you want to set size, change the anchors or consider using set_deferred().");
|
||||
WARN_PRINT("Nodes with non-equal opposite anchors will have their size overridden after _ready(). \nIf you want to set size, change the anchors or consider using set_deferred().");
|
||||
}
|
||||
#endif
|
||||
set_size(p_size);
|
||||
|
|
|
@ -146,7 +146,7 @@ void ImmediateMesh::surface_add_vertex_2d(const Vector2 &p_vertex) {
|
|||
}
|
||||
void ImmediateMesh::surface_end() {
|
||||
ERR_FAIL_COND_MSG(!surface_active, "Not creating any surface. Use surface_begin() to do it.");
|
||||
ERR_FAIL_COND_MSG(!vertices.size(), "No vertices were added, surface cant be created.");
|
||||
ERR_FAIL_COND_MSG(!vertices.size(), "No vertices were added, surface can't be created.");
|
||||
|
||||
uint32_t format = ARRAY_FORMAT_VERTEX;
|
||||
|
||||
|
|
|
@ -1399,7 +1399,7 @@ String ResourceFormatLoaderText::get_resource_type(const String &p_path) const {
|
|||
return String();
|
||||
}
|
||||
|
||||
//for anyhting else must test..
|
||||
// ...for anything else must test...
|
||||
|
||||
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
|
||||
if (!f) {
|
||||
|
|
|
@ -2728,7 +2728,7 @@ TileSet::TileSet() {
|
|||
tile_lines_mesh.instantiate();
|
||||
tile_filled_mesh.instantiate();
|
||||
|
||||
// Instanciate and list all plugins.
|
||||
// Instantiate and list all plugins.
|
||||
tile_set_plugins_vector.append(memnew(TileSetPluginAtlasRendering));
|
||||
tile_set_plugins_vector.append(memnew(TileSetPluginAtlasPhysics));
|
||||
tile_set_plugins_vector.append(memnew(TileSetPluginAtlasNavigation));
|
||||
|
|
|
@ -322,12 +322,12 @@ public:
|
|||
m_angularLimits[2].m_hiLimit = angularUpper.z;
|
||||
}
|
||||
|
||||
//! Retrieves the angular limit informacion
|
||||
//! Retrieves the angular limit information.
|
||||
G6DOFRotationalLimitMotor3DSW *getRotationalLimitMotor(int index) {
|
||||
return &m_angularLimits[index];
|
||||
}
|
||||
|
||||
//! Retrieves the limit informacion
|
||||
//! Retrieves the limit information.
|
||||
G6DOFTranslationalLimitMotor3DSW *getTranslationalLimitMotor() {
|
||||
return &m_linearLimits;
|
||||
}
|
||||
|
|
|
@ -200,7 +200,7 @@ void SliderJoint3DSW::solve(real_t p_step) {
|
|||
real_t softness = (i) ? m_softnessOrthoLin : (m_solveLinLim ? m_softnessLimLin : m_softnessDirLin);
|
||||
real_t restitution = (i) ? m_restitutionOrthoLin : (m_solveLinLim ? m_restitutionLimLin : m_restitutionDirLin);
|
||||
real_t damping = (i) ? m_dampingOrthoLin : (m_solveLinLim ? m_dampingLimLin : m_dampingDirLin);
|
||||
// calcutate and apply impulse
|
||||
// Calculate and apply impulse.
|
||||
real_t normalImpulse = softness * (restitution * depth / p_step - damping * rel_vel) * m_jacLinDiagABInv[i];
|
||||
Vector3 impulse_vector = normal * normalImpulse;
|
||||
if (dynamic_A) {
|
||||
|
|
|
@ -620,7 +620,7 @@ void RendererCanvasRenderRD::_render_item(RD::DrawListID p_draw_list, RID p_rend
|
|||
RD::get_singleton()->draw_list_bind_index_array(p_draw_list, shader.quad_index_array);
|
||||
RD::get_singleton()->draw_list_draw(p_draw_list, true);
|
||||
|
||||
//restore if overrided
|
||||
// Restore if overridden.
|
||||
push_constant.color_texture_pixel_size[0] = texpixel_size.x;
|
||||
push_constant.color_texture_pixel_size[1] = texpixel_size.y;
|
||||
|
||||
|
|
|
@ -2250,7 +2250,7 @@ bool RendererSceneRenderRD::_render_buffers_can_be_storage() {
|
|||
}
|
||||
|
||||
void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RenderingServer::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding, uint32_t p_view_count) {
|
||||
ERR_FAIL_COND_MSG(p_view_count == 0, "Must have atleast 1 view");
|
||||
ERR_FAIL_COND_MSG(p_view_count == 0, "Must have at least 1 view");
|
||||
|
||||
RenderBuffers *rb = render_buffers_owner.getornull(p_render_buffers);
|
||||
rb->width = p_width;
|
||||
|
|
|
@ -571,7 +571,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
|
|||
max_texture_uniforms++;
|
||||
} else {
|
||||
if (E->get().scope == SL::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
||||
continue; //instances are indexed directly, dont need index uniforms
|
||||
continue; // Instances are indexed directly, don't need index uniforms.
|
||||
}
|
||||
|
||||
max_uniforms++;
|
||||
|
@ -605,7 +605,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
|
|||
if (uniform.scope == SL::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
||||
//insert, but don't generate any code.
|
||||
p_actions.uniforms->insert(uniform_name, uniform);
|
||||
continue; //instances are indexed directly, dont need index uniforms
|
||||
continue; // Instances are indexed directly, don't need index uniforms.
|
||||
}
|
||||
if (SL::is_sampler_type(uniform.type)) {
|
||||
ucode = "layout(set = " + itos(actions.texture_layout_set) + ", binding = " + itos(actions.base_texture_binding_index + uniform.texture_order) + ") uniform ";
|
||||
|
|
|
@ -138,7 +138,7 @@ void main() {
|
|||
if (bool(particles.data[particle].flags & PARTICLE_FLAG_ACTIVE) || bool(particles.data[particle].flags & PARTICLE_FLAG_TRAILED)) {
|
||||
txform = particles.data[particle].xform;
|
||||
if (params.trail_size > 1) {
|
||||
// since the steps dont fit precisely in the history frames, must do a tiny bit of
|
||||
// Since the steps don't fit precisely in the history frames, must do a tiny bit of
|
||||
// interpolation to get them close to their intended location.
|
||||
uint part_ofs = particle % params.trail_size;
|
||||
float natural_ofs = fract((float(part_ofs) / float(params.trail_size)) * float(params.trail_total)) * params.frame_delta;
|
||||
|
|
|
@ -177,7 +177,7 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
|
|||
uint cluster_type_size;
|
||||
uint max_cluster_element_count_div_32;
|
||||
|
||||
//use vec4s because std140 doesnt play nice with vec2s, z and w are wasted
|
||||
// Use vec4s because std140 doesn't play nice with vec2s, z and w are wasted.
|
||||
vec4 directional_penumbra_shadow_kernel[32];
|
||||
vec4 directional_soft_shadow_kernel[32];
|
||||
vec4 penumbra_shadow_kernel[32];
|
||||
|
|
|
@ -138,7 +138,7 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
|
|||
vec2 viewport_size;
|
||||
vec2 screen_pixel_size;
|
||||
|
||||
//use vec4s because std140 doesnt play nice with vec2s, z and w are wasted
|
||||
// Use vec4s because std140 doesn't play nice with vec2s, z and w are wasted.
|
||||
vec4 directional_penumbra_shadow_kernel[32];
|
||||
vec4 directional_soft_shadow_kernel[32];
|
||||
vec4 penumbra_shadow_kernel[32];
|
||||
|
|
|
@ -20,10 +20,10 @@ layout(set = 0, binding = 3, std430) restrict readonly buffer DispatchData {
|
|||
dispatch_data;
|
||||
|
||||
struct ProcessVoxel {
|
||||
uint position; //xyz 7 bit packed, extra 11 bits for neigbours
|
||||
uint albedo; //rgb bits 0-15 albedo, bits 16-21 are normal bits (set if geometry exists toward that side), extra 11 bits for neibhbours
|
||||
uint light; //rgbe8985 encoded total saved light, extra 2 bits for neighbours
|
||||
uint light_aniso; //55555 light anisotropy, extra 2 bits for neighbours
|
||||
uint position; // xyz 7 bit packed, extra 11 bits for neighbors.
|
||||
uint albedo; // rgb bits 0-15 albedo, bits 16-21 are normal bits (set if geometry exists toward that side), extra 11 bits for neighbors.
|
||||
uint light; // rgbe8985 encoded total saved light, extra 2 bits for neighbors.
|
||||
uint light_aniso; // 55555 light anisotropy, extra 2 bits for neighbors.
|
||||
//total neighbours: 26
|
||||
};
|
||||
|
||||
|
|
|
@ -266,9 +266,9 @@ void main() {
|
|||
|
||||
} else if (params.sky_mode == SKY_MODE_SKY) {
|
||||
#ifdef USE_CUBEMAP_ARRAY
|
||||
light.rgb = textureLod(samplerCubeArray(sky_irradiance, linear_sampler_mipmaps), vec4(ray_dir, 0.0), 2.0).rgb; //use second mipmap because we dont usually throw a lot of rays, so this compensates
|
||||
light.rgb = textureLod(samplerCubeArray(sky_irradiance, linear_sampler_mipmaps), vec4(ray_dir, 0.0), 2.0).rgb; // Use second mipmap because we don't usually throw a lot of rays, so this compensates.
|
||||
#else
|
||||
light.rgb = textureLod(samplerCube(sky_irradiance, linear_sampler_mipmaps), ray_dir, 2.0).rgb; //use second mipmap because we dont usually throw a lot of rays, so this compensates
|
||||
light.rgb = textureLod(samplerCube(sky_irradiance, linear_sampler_mipmaps), ray_dir, 2.0).rgb; // Use second mipmap because we don't usually throw a lot of rays, so this compensates.
|
||||
#endif
|
||||
light.rgb *= params.sky_energy;
|
||||
light.a = 0.0;
|
||||
|
|
|
@ -101,7 +101,7 @@ layout(set = 0, binding = 10, std430) restrict buffer DispatchData {
|
|||
dispatch_data;
|
||||
|
||||
struct ProcessVoxel {
|
||||
uint position; //xyz 7 bit packed, extra 11 bits for neigbours
|
||||
uint position; // xyz 7 bit packed, extra 11 bits for neighbors.
|
||||
uint albedo; //rgb bits 0-15 albedo, bits 16-21 are normal bits (set if geometry exists toward that side), extra 11 bits for neibhbours
|
||||
uint light; //rgbe8985 encoded total saved light, extra 2 bits for neighbours
|
||||
uint light_aniso; //55555 light anisotropy, extra 2 bits for neighbours
|
||||
|
@ -134,7 +134,7 @@ layout(set = 0, binding = 5, std430) restrict buffer readonly DispatchData {
|
|||
dispatch_data;
|
||||
|
||||
struct ProcessVoxel {
|
||||
uint position; //xyz 7 bit packed, extra 11 bits for neigbours
|
||||
uint position; // xyz 7 bit packed, extra 11 bits for neighbors.
|
||||
uint albedo; //rgb bits 0-15 albedo, bits 16-21 are normal bits (set if geometry exists toward that side), extra 11 bits for neibhbours
|
||||
uint light; //rgbe8985 encoded total saved light, extra 2 bits for neighbours
|
||||
uint light_aniso; //55555 light anisotropy, extra 2 bits for neighbours
|
||||
|
@ -183,7 +183,7 @@ void main() {
|
|||
ivec3 write_pos = read_pos + params.scroll;
|
||||
|
||||
if (any(lessThan(write_pos, ivec3(0))) || any(greaterThanEqual(write_pos, ivec3(params.grid_size)))) {
|
||||
return; //fits outside the 3D texture, dont do anything
|
||||
return; // Fits outside the 3D texture, don't do anything.
|
||||
}
|
||||
|
||||
uint albedo = ((src_process_voxels.data[index].albedo & 0x7FFF) << 1) | 1; //add solid bit
|
||||
|
|
|
@ -1259,7 +1259,7 @@ void RendererSceneCull::_update_instance_visibility_depth(Instance *p_instance)
|
|||
}
|
||||
|
||||
if (cycle_detected) {
|
||||
ERR_PRINT("Cycle detected in the visibility dependecies tree.");
|
||||
ERR_PRINT("Cycle detected in the visibility dependencies tree.");
|
||||
for (Set<Instance *>::Element *E = traversed_nodes.front(); E; E = E->next()) {
|
||||
Instance *instance = E->get();
|
||||
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
|
||||
|
|
|
@ -41,7 +41,7 @@ struct BlitToScreen;
|
|||
/**
|
||||
@author Bastiaan Olij <mux213@gmail.com>
|
||||
|
||||
The XR interface is a template class ontop of which we build interface to different AR, VR and tracking SDKs.
|
||||
The XR interface is a template class on top of which we build interface to different AR, VR and tracking SDKs.
|
||||
The idea is that we subclass this class, implement the logic, and then instantiate a singleton of each interface
|
||||
when Godot starts. These instances do not initialize themselves but register themselves with the AR/VR server.
|
||||
|
||||
|
|
Loading…
Reference in New Issue