clang-format: Various fixes to comments alignment from clang-format
13
All reviewed manually and occasionally rewritten to avoid bad auto formatting.
This commit is contained in:
parent
42d385b312
commit
1b65550ec7
45 changed files with 417 additions and 666 deletions
|
@ -42,23 +42,23 @@ BVHABB_CLASS _logic_abb_merge(const BVHABB_CLASS &a, const BVHABB_CLASS &b) {
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
@file q3DynamicAABBTree.h
|
* @file q3DynamicAABBTree.h
|
||||||
@author Randy Gaul
|
* @author Randy Gaul
|
||||||
@date 10/10/2014
|
* @date 10/10/2014
|
||||||
Copyright (c) 2014 Randy Gaul http://www.randygaul.net
|
* Copyright (c) 2014 Randy Gaul http://www.randygaul.net
|
||||||
This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
* arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
* appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not
|
* 2. Altered source versions must be plainly marked as such, and must not
|
||||||
be misrepresented as being the original software.
|
* be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -76,10 +76,10 @@ int32_t _logic_balance(int32_t iA, uint32_t p_tree_id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A
|
/* A
|
||||||
/ \
|
* / \
|
||||||
B C
|
* B C
|
||||||
/ \ / \
|
* / \ / \
|
||||||
D E F G
|
* D E F G
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CRASH_COND(A->num_children != 2);
|
CRASH_COND(A->num_children != 2);
|
||||||
|
|
|
@ -736,8 +736,6 @@ int32_t ConvexHullInternal::Rational64::compare(const Rational64 &b) const {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return (numerator * b.denominator > b.numerator * denominator) ? sign : (numerator * b.denominator < b.numerator * denominator) ? -sign : 0;
|
|
||||||
|
|
||||||
#ifdef USE_X86_64_ASM
|
#ifdef USE_X86_64_ASM
|
||||||
|
|
||||||
int32_t result;
|
int32_t result;
|
||||||
|
@ -758,10 +756,9 @@ int32_t ConvexHullInternal::Rational64::compare(const Rational64 &b) const {
|
||||||
: "=&b"(result), [tmp] "=&r"(tmp), "=a"(dummy)
|
: "=&b"(result), [tmp] "=&r"(tmp), "=a"(dummy)
|
||||||
: "a"(denominator), [bn] "g"(b.numerator), [tn] "g"(numerator), [bd] "g"(b.denominator)
|
: "a"(denominator), [bn] "g"(b.numerator), [tn] "g"(numerator), [bd] "g"(b.denominator)
|
||||||
: "%rdx", "cc");
|
: "%rdx", "cc");
|
||||||
return result ? result ^ sign // if sign is +1, only bit 0 of result is inverted, which does not change the sign of result (and cannot result in zero)
|
// if sign is +1, only bit 0 of result is inverted, which does not change the sign of result (and cannot result in zero)
|
||||||
// if sign is -1, all bits of result are inverted, which changes the sign of result (and again cannot result in zero)
|
// if sign is -1, all bits of result are inverted, which changes the sign of result (and again cannot result in zero)
|
||||||
:
|
return result ? result ^ sign : 0;
|
||||||
0;
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -43,17 +43,14 @@ real_t Triangulate::get_area(const Vector<Vector2> &contour) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
is_inside_triangle decides if a point P is Inside of the triangle
|
* `is_inside_triangle` decides if a point P is inside the triangle
|
||||||
defined by A, B, C.
|
* defined by A, B, C.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Triangulate::is_inside_triangle(real_t Ax, real_t Ay,
|
bool Triangulate::is_inside_triangle(real_t Ax, real_t Ay,
|
||||||
real_t Bx, real_t By,
|
real_t Bx, real_t By,
|
||||||
real_t Cx, real_t Cy,
|
real_t Cx, real_t Cy,
|
||||||
real_t Px, real_t Py,
|
real_t Px, real_t Py,
|
||||||
bool include_edges)
|
bool include_edges) {
|
||||||
|
|
||||||
{
|
|
||||||
real_t ax, ay, bx, by, cx, cy, apx, apy, bpx, bpy, cpx, cpy;
|
real_t ax, ay, bx, by, cx, cy, apx, apy, bpx, bpy, cpx, cpy;
|
||||||
real_t cCROSSap, bCROSScp, aCROSSbp;
|
real_t cCROSSap, bCROSScp, aCROSSbp;
|
||||||
|
|
||||||
|
@ -79,7 +76,7 @@ bool Triangulate::is_inside_triangle(real_t Ax, real_t Ay,
|
||||||
} else {
|
} else {
|
||||||
return ((aCROSSbp >= 0.0) && (bCROSScp >= 0.0) && (cCROSSap >= 0.0));
|
return ((aCROSSbp >= 0.0) && (bCROSScp >= 0.0) && (cCROSSap >= 0.0));
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
bool Triangulate::snip(const Vector<Vector2> &p_contour, int u, int v, int w, int n, const Vector<int> &V, bool relaxed) {
|
bool Triangulate::snip(const Vector<Vector2> &p_contour, int u, int v, int w, int n, const Vector<int> &V, bool relaxed) {
|
||||||
int p;
|
int p;
|
||||||
|
|
|
@ -310,14 +310,6 @@ String String::operator+(const String &p_str) const {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
String String::operator+(CharType p_chr) const {
|
|
||||||
|
|
||||||
String res=*this;
|
|
||||||
res+=p_chr;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
String &String::operator+=(const String &p_str) {
|
String &String::operator+=(const String &p_str) {
|
||||||
if (empty()) {
|
if (empty()) {
|
||||||
*this = p_str;
|
*this = p_str;
|
||||||
|
@ -1675,14 +1667,6 @@ CharString String::utf8() const {
|
||||||
return utf8s;
|
return utf8s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
String::String(CharType p_char) {
|
|
||||||
|
|
||||||
shared=NULL;
|
|
||||||
copy_from(p_char);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
String::String(const char *p_str) {
|
String::String(const char *p_str) {
|
||||||
copy_from(p_str);
|
copy_from(p_str);
|
||||||
}
|
}
|
||||||
|
@ -1937,7 +1921,8 @@ bool String::is_numeric() const {
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
static double built_in_strtod(const C *string, /* A decimal ASCII floating-point number,
|
static double built_in_strtod(
|
||||||
|
/* A decimal ASCII floating-point number,
|
||||||
* optionally preceded by white space. Must
|
* optionally preceded by white space. Must
|
||||||
* have form "-I.FE-X", where I is the integer
|
* have form "-I.FE-X", where I is the integer
|
||||||
* part of the mantissa, F is the fractional
|
* part of the mantissa, F is the fractional
|
||||||
|
@ -1948,17 +1933,21 @@ static double built_in_strtod(const C *string, /* A decimal ASCII floating-point
|
||||||
* necessary unless F is present. The "E" may
|
* necessary unless F is present. The "E" may
|
||||||
* actually be an "e". E and X may both be
|
* actually be an "e". E and X may both be
|
||||||
* omitted (but not just one). */
|
* omitted (but not just one). */
|
||||||
C **endPtr = nullptr) /* If non-NULL, store terminating Cacter's
|
const C *string,
|
||||||
|
/* If non-nullptr, store terminating Cacter's
|
||||||
* address here. */
|
* address here. */
|
||||||
{
|
C **endPtr = nullptr) {
|
||||||
static const int maxExponent = 511; /* Largest possible base 10 exponent. Any
|
/* Largest possible base 10 exponent. Any
|
||||||
* exponent larger than this will already
|
* exponent larger than this will already
|
||||||
* produce underflow or overflow, so there's
|
* produce underflow or overflow, so there's
|
||||||
* no need to worry about additional digits.
|
* no need to worry about additional digits. */
|
||||||
*/
|
static const int maxExponent = 511;
|
||||||
static const double powersOf10[] = { /* Table giving binary powers of 10. Entry */
|
/* Table giving binary powers of 10. Entry
|
||||||
10., /* is 10^2^i. Used to convert decimal */
|
* is 10^2^i. Used to convert decimal
|
||||||
100., /* exponents into floating-point numbers. */
|
* exponents into floating-point numbers. */
|
||||||
|
static const double powersOf10[] = {
|
||||||
|
10.,
|
||||||
|
100.,
|
||||||
1.0e4,
|
1.0e4,
|
||||||
1.0e8,
|
1.0e8,
|
||||||
1.0e16,
|
1.0e16,
|
||||||
|
@ -1973,8 +1962,9 @@ static double built_in_strtod(const C *string, /* A decimal ASCII floating-point
|
||||||
const double *d;
|
const double *d;
|
||||||
const C *p;
|
const C *p;
|
||||||
int c;
|
int c;
|
||||||
int exp = 0; /* Exponent read from "EX" field. */
|
/* Exponent read from "EX" field. */
|
||||||
int fracExp = 0; /* Exponent that derives from the fractional
|
int exp = 0;
|
||||||
|
/* Exponent that derives from the fractional
|
||||||
* part. Under normal circumstances, it is
|
* part. Under normal circumstances, it is
|
||||||
* the negative of the number of digits in F.
|
* the negative of the number of digits in F.
|
||||||
* However, if I is very long, the last digits
|
* However, if I is very long, the last digits
|
||||||
|
@ -1983,11 +1973,13 @@ static double built_in_strtod(const C *string, /* A decimal ASCII floating-point
|
||||||
* unnecessary overflow on I alone). In this
|
* unnecessary overflow on I alone). In this
|
||||||
* case, fracExp is incremented one for each
|
* case, fracExp is incremented one for each
|
||||||
* dropped digit. */
|
* dropped digit. */
|
||||||
int mantSize; /* Number of digits in mantissa. */
|
int fracExp = 0;
|
||||||
int decPt; /* Number of mantissa digits BEFORE decimal
|
/* Number of digits in mantissa. */
|
||||||
* point. */
|
int mantSize;
|
||||||
const C *pExp; /* Temporarily holds location of exponent in
|
/* Number of mantissa digits BEFORE decimal point. */
|
||||||
* string. */
|
int decPt;
|
||||||
|
/* Temporarily holds location of exponent in string. */
|
||||||
|
const C *pExp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Strip off leading blanks and check for a sign.
|
* Strip off leading blanks and check for a sign.
|
||||||
|
@ -2154,7 +2146,6 @@ done:
|
||||||
double String::to_double(const char *p_str) {
|
double String::to_double(const char *p_str) {
|
||||||
#ifndef NO_USE_STDLIB
|
#ifndef NO_USE_STDLIB
|
||||||
return built_in_strtod<char>(p_str);
|
return built_in_strtod<char>(p_str);
|
||||||
//return atof(p_str); DOES NOT WORK ON ANDROID(??)
|
|
||||||
#else
|
#else
|
||||||
return built_in_strtod<char>(p_str);
|
return built_in_strtod<char>(p_str);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5196,10 +5196,6 @@ void CanvasItemEditor::_popup_callback(int p_op) {
|
||||||
if (key_pos) {
|
if (key_pos) {
|
||||||
ctrl->set_position(Point2());
|
ctrl->set_position(Point2());
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (key_scale)
|
|
||||||
AnimationPlayerEditor::singleton->get_track_editor()->insert_node_value_key(ctrl,"rect/size",ctrl->get_size());
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -606,15 +606,6 @@ PathEditorPlugin::PathEditorPlugin(EditorNode *p_node) {
|
||||||
menu->connect("id_pressed", this, "_handle_option_pressed");
|
menu->connect("id_pressed", this, "_handle_option_pressed");
|
||||||
|
|
||||||
curve_edit->set_pressed(true);
|
curve_edit->set_pressed(true);
|
||||||
/*
|
|
||||||
collision_polygon_editor = memnew( PathEditor(p_node) );
|
|
||||||
editor->get_viewport()->add_child(collision_polygon_editor);
|
|
||||||
collision_polygon_editor->set_margin(MARGIN_LEFT,200);
|
|
||||||
collision_polygon_editor->set_margin(MARGIN_RIGHT,230);
|
|
||||||
collision_polygon_editor->set_margin(MARGIN_TOP,0);
|
|
||||||
collision_polygon_editor->set_margin(MARGIN_BOTTOM,10);
|
|
||||||
collision_polygon_editor->hide();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PathEditorPlugin::~PathEditorPlugin() {
|
PathEditorPlugin::~PathEditorPlugin() {
|
||||||
|
|
|
@ -82,46 +82,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
namespace FBXDocParser {
|
namespace FBXDocParser {
|
||||||
//enum Flag
|
|
||||||
//{
|
|
||||||
// e_unknown_0 = 1 << 0,
|
|
||||||
// e_unknown_1 = 1 << 1,
|
|
||||||
// e_unknown_2 = 1 << 2,
|
|
||||||
// e_unknown_3 = 1 << 3,
|
|
||||||
// e_unknown_4 = 1 << 4,
|
|
||||||
// e_unknown_5 = 1 << 5,
|
|
||||||
// e_unknown_6 = 1 << 6,
|
|
||||||
// e_unknown_7 = 1 << 7,
|
|
||||||
// e_unknown_8 = 1 << 8,
|
|
||||||
// e_unknown_9 = 1 << 9,
|
|
||||||
// e_unknown_10 = 1 << 10,
|
|
||||||
// e_unknown_11 = 1 << 11,
|
|
||||||
// e_unknown_12 = 1 << 12,
|
|
||||||
// e_unknown_13 = 1 << 13,
|
|
||||||
// e_unknown_14 = 1 << 14,
|
|
||||||
// e_unknown_15 = 1 << 15,
|
|
||||||
// e_unknown_16 = 1 << 16,
|
|
||||||
// e_unknown_17 = 1 << 17,
|
|
||||||
// e_unknown_18 = 1 << 18,
|
|
||||||
// e_unknown_19 = 1 << 19,
|
|
||||||
// e_unknown_20 = 1 << 20,
|
|
||||||
// e_unknown_21 = 1 << 21,
|
|
||||||
// e_unknown_22 = 1 << 22,
|
|
||||||
// e_unknown_23 = 1 << 23,
|
|
||||||
// e_flag_field_size_64_bit = 1 << 24, // Not sure what is
|
|
||||||
// e_unknown_25 = 1 << 25,
|
|
||||||
// e_unknown_26 = 1 << 26,
|
|
||||||
// e_unknown_27 = 1 << 27,
|
|
||||||
// e_unknown_28 = 1 << 28,
|
|
||||||
// e_unknown_29 = 1 << 29,
|
|
||||||
// e_unknown_30 = 1 << 30,
|
|
||||||
// e_unknown_31 = 1 << 31
|
|
||||||
//};
|
|
||||||
//
|
|
||||||
//bool check_flag(uint32_t flags, Flag to_check)
|
|
||||||
//{
|
|
||||||
// return (flags & to_check) != 0;
|
|
||||||
//}
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Token::Token(const char *sbegin, const char *send, TokenType type, size_t offset) :
|
Token::Token(const char *sbegin, const char *send, TokenType type, size_t offset) :
|
||||||
sbegin(sbegin),
|
sbegin(sbegin),
|
||||||
|
@ -438,12 +398,6 @@ void TokenizeBinary(TokenList &output_tokens, const char *input, size_t length)
|
||||||
//TokenizeError("file is too short",0);
|
//TokenizeError("file is too short",0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//uint32_t offset = 0x15;
|
|
||||||
/* const char* cursor = input + 0x15;
|
|
||||||
const uint32_t flags = ReadWord(input, cursor, input + length);
|
|
||||||
const uint8_t padding_0 = ReadByte(input, cursor, input + length); // unused
|
|
||||||
const uint8_t padding_1 = ReadByte(input, cursor, input + length); // unused*/
|
|
||||||
|
|
||||||
if (strncmp(input, "Kaydara FBX Binary", 18)) {
|
if (strncmp(input, "Kaydara FBX Binary", 18)) {
|
||||||
TokenizeError("magic bytes not found", 0);
|
TokenizeError("magic bytes not found", 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -642,13 +642,6 @@ void ParseVectorDataArray(std::vector<Vector3> &out, const ElementPtr el) {
|
||||||
static_cast<real_t>(d[1]),
|
static_cast<real_t>(d[1]),
|
||||||
static_cast<real_t>(d[2])));
|
static_cast<real_t>(d[2])));
|
||||||
}
|
}
|
||||||
// for debugging
|
|
||||||
/*for ( size_t i = 0; i < out.size(); i++ ) {
|
|
||||||
aiVector3D vec3( out[ i ] );
|
|
||||||
std::stringstream stream;
|
|
||||||
stream << " vec3.x = " << vec3.x << " vec3.y = " << vec3.y << " vec3.z = " << vec3.z << std::endl;
|
|
||||||
DefaultLogger::get()->info( stream.str() );
|
|
||||||
}*/
|
|
||||||
} else if (type == 'f') {
|
} else if (type == 'f') {
|
||||||
const float *f = reinterpret_cast<const float *>(&buff[0]);
|
const float *f = reinterpret_cast<const float *>(&buff[0]);
|
||||||
for (unsigned int i = 0; i < count3; ++i, f += 3) {
|
for (unsigned int i = 0; i < count3; ++i, f += 3) {
|
||||||
|
|
|
@ -352,13 +352,6 @@ Error PluginScript::reload(bool p_keep_state) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
/*for (Set<PlaceHolderScriptInstance*>::Element *E=placeholders.front();E;E=E->next()) {
|
|
||||||
|
|
||||||
_update_placeholder(E->get());
|
|
||||||
}*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
FREE_SCRIPT_MANIFEST(manifest);
|
FREE_SCRIPT_MANIFEST(manifest);
|
||||||
return OK;
|
return OK;
|
||||||
#undef FREE_SCRIPT_MANIFEST
|
#undef FREE_SCRIPT_MANIFEST
|
||||||
|
|
|
@ -2435,7 +2435,6 @@ void VisualScriptLanguage::debug_get_stack_level_locals(int p_level, List<String
|
||||||
const StringName *f = _call_stack[l].function;
|
const StringName *f = _call_stack[l].function;
|
||||||
|
|
||||||
ERR_FAIL_COND(!_call_stack[l].instance->functions.has(*f));
|
ERR_FAIL_COND(!_call_stack[l].instance->functions.has(*f));
|
||||||
//VisualScriptInstance::Function *func = &_call_stack[l].instance->functions[*f];
|
|
||||||
|
|
||||||
VisualScriptNodeInstance *node = _call_stack[l].instance->instances[*_call_stack[l].current_id];
|
VisualScriptNodeInstance *node = _call_stack[l].instance->instances[*_call_stack[l].current_id];
|
||||||
ERR_FAIL_COND(!node);
|
ERR_FAIL_COND(!node);
|
||||||
|
@ -2481,23 +2480,8 @@ void VisualScriptLanguage::debug_get_stack_level_locals(int p_level, List<String
|
||||||
p_locals->push_back("working_mem/mem_" + itos(i));
|
p_locals->push_back("working_mem/mem_" + itos(i));
|
||||||
p_values->push_back((*_call_stack[l].work_mem)[i]);
|
p_values->push_back((*_call_stack[l].work_mem)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
ERR_FAIL_INDEX(p_level,_debug_call_stack_pos);
|
|
||||||
|
|
||||||
|
|
||||||
VisualFunction *f = _call_stack[l].function;
|
|
||||||
|
|
||||||
List<Pair<StringName,int> > locals;
|
|
||||||
|
|
||||||
f->debug_get_stack_member_state(*_call_stack[l].line,&locals);
|
|
||||||
for( List<Pair<StringName,int> >::Element *E = locals.front();E;E=E->next() ) {
|
|
||||||
|
|
||||||
p_locals->push_back(E->get().first);
|
|
||||||
p_values->push_back(_call_stack[l].stack[E->get().second]);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualScriptLanguage::debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {
|
void VisualScriptLanguage::debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {
|
||||||
if (_debug_parse_err_node >= 0) {
|
if (_debug_parse_err_node >= 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -857,16 +857,11 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||||
int iofs = ofs + 8;
|
int iofs = ofs + 8;
|
||||||
|
|
||||||
string_count = decode_uint32(&p_manifest[iofs]);
|
string_count = decode_uint32(&p_manifest[iofs]);
|
||||||
//styles_count = decode_uint32(&p_manifest[iofs + 4]);
|
// iofs + 4 is `styles_count`.
|
||||||
string_flags = decode_uint32(&p_manifest[iofs + 8]);
|
string_flags = decode_uint32(&p_manifest[iofs + 8]);
|
||||||
string_data_offset = decode_uint32(&p_manifest[iofs + 12]);
|
string_data_offset = decode_uint32(&p_manifest[iofs + 12]);
|
||||||
//styles_offset = decode_uint32(&p_manifest[iofs + 16]);
|
// iofs + 16 is `styles_offset`.
|
||||||
/*
|
|
||||||
printf("string count: %i\n",string_count);
|
|
||||||
printf("flags: %i\n",string_flags);
|
|
||||||
printf("sdata ofs: %i\n",string_data_offset);
|
|
||||||
printf("styles ofs: %i\n",styles_offset);
|
|
||||||
*/
|
|
||||||
uint32_t st_offset = iofs + 20;
|
uint32_t st_offset = iofs + 20;
|
||||||
string_table.resize(string_count);
|
string_table.resize(string_count);
|
||||||
uint32_t string_end = 0;
|
uint32_t string_end = 0;
|
||||||
|
@ -1441,7 +1436,6 @@ void EditorExportPlatformAndroid::_fix_resources(const Ref<EditorExportPreset> &
|
||||||
encode_uint32(ret.size(), &ret.write[4]);
|
encode_uint32(ret.size(), &ret.write[4]);
|
||||||
|
|
||||||
r_manifest = ret;
|
r_manifest = ret;
|
||||||
//printf("end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorExportPlatformAndroid::_load_image_data(const Ref<Image> &p_splash_image, Vector<uint8_t> &p_data) {
|
void EditorExportPlatformAndroid::_load_image_data(const Ref<Image> &p_splash_image, Vector<uint8_t> &p_data) {
|
||||||
|
|
|
@ -33,24 +33,24 @@ Adapted from corresponding SDL 2.0 code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
* Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
* Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
* appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "power_android.h"
|
#include "power_android.h"
|
||||||
|
|
|
@ -33,24 +33,24 @@ Adapted from corresponding SDL 2.0 code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
* Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
* Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
* appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "power_osx.h"
|
#include "power_osx.h"
|
||||||
|
|
|
@ -42,9 +42,9 @@ PowerUWP::~PowerUWP() {
|
||||||
bool PowerUWP::UpdatePowerInfo() {
|
bool PowerUWP::UpdatePowerInfo() {
|
||||||
// TODO, WinRT: Battery info is available on at least one WinRT platform (Windows Phone 8). Implement UpdatePowerInfo as appropriate. */
|
// TODO, WinRT: Battery info is available on at least one WinRT platform (Windows Phone 8). Implement UpdatePowerInfo as appropriate. */
|
||||||
/* Notes from SDL:
|
/* Notes from SDL:
|
||||||
- the Win32 function, GetSystemPowerStatus, is not available for use on WinRT
|
* - the Win32 function, GetSystemPowerStatus, is not available for use on WinRT
|
||||||
- Windows Phone 8 has a 'Battery' class, which is documented as available for C++
|
* - Windows Phone 8 has a 'Battery' class, which is documented as available for C++
|
||||||
- More info on WP8's Battery class can be found at http://msdn.microsoft.com/library/windowsphone/develop/jj207231
|
* - More info on WP8's Battery class can be found at http://msdn.microsoft.com/library/windowsphone/develop/jj207231
|
||||||
*/
|
*/
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,24 +33,24 @@ Adapted from corresponding SDL 2.0 code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
* Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
* Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
* appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "power_windows.h"
|
#include "power_windows.h"
|
||||||
|
|
|
@ -468,15 +468,6 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a
|
||||||
XISelectEvents(x11_display, x11_window, &xi.all_event_mask, 1);
|
XISelectEvents(x11_display, x11_window, &xi.all_event_mask, 1);
|
||||||
XISelectEvents(x11_display, DefaultRootWindow(x11_display), &xi.all_master_event_mask, 1);
|
XISelectEvents(x11_display, DefaultRootWindow(x11_display), &xi.all_master_event_mask, 1);
|
||||||
|
|
||||||
// Disabled by now since grabbing also blocks mouse events
|
|
||||||
// (they are received as extended events instead of standard events)
|
|
||||||
/*XIClearMask(xi.touch_event_mask.mask, XI_TouchOwnership);
|
|
||||||
|
|
||||||
// Grab touch devices to avoid OS gesture interference
|
|
||||||
for (int i = 0; i < xi.touch_devices.size(); ++i) {
|
|
||||||
XIGrabDevice(x11_display, xi.touch_devices[i], x11_window, CurrentTime, None, XIGrabModeAsync, XIGrabModeAsync, False, &xi.touch_event_mask);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* set the titlebar name */
|
/* set the titlebar name */
|
||||||
XStoreName(x11_display, x11_window, "Godot");
|
XStoreName(x11_display, x11_window, "Godot");
|
||||||
|
|
||||||
|
@ -2469,10 +2460,7 @@ void OS_X11::process_xevents() {
|
||||||
xi.last_relative_time = raw_event->time;
|
xi.last_relative_time = raw_event->time;
|
||||||
} break;
|
} break;
|
||||||
#ifdef TOUCH_ENABLED
|
#ifdef TOUCH_ENABLED
|
||||||
case XI_TouchBegin: // Fall-through
|
case XI_TouchBegin:
|
||||||
// Disabled hand-in-hand with the grabbing
|
|
||||||
//XIAllowTouchEvents(x11_display, event_data->deviceid, event_data->detail, x11_window, XIAcceptTouch);
|
|
||||||
|
|
||||||
case XI_TouchEnd: {
|
case XI_TouchEnd: {
|
||||||
bool is_begin = event_data->evtype == XI_TouchBegin;
|
bool is_begin = event_data->evtype == XI_TouchBegin;
|
||||||
|
|
||||||
|
|
|
@ -33,24 +33,24 @@ Adapted from corresponding SDL 2.0 code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
* Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
* Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
*
|
||||||
This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
* appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "power_x11.h"
|
#include "power_x11.h"
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
definition of invalidation: global is invalid
|
definition of invalidation: global is invalid
|
||||||
|
|
||||||
1) If a node sets a LOCAL, it produces an invalidation of everything above
|
1) If a node sets a LOCAL, it produces an invalidation of everything above
|
||||||
a) If above is invalid, don't keep invalidating upwards
|
. a) If above is invalid, don't keep invalidating upwards
|
||||||
2) If a node sets a GLOBAL, it is converted to LOCAL (and forces validation of everything pending below)
|
2) If a node sets a GLOBAL, it is converted to LOCAL (and forces validation of everything pending below)
|
||||||
|
|
||||||
drawback: setting/reading globals is useful and used very very often, and using affine inverses is slow
|
drawback: setting/reading globals is useful and used very very often, and using affine inverses is slow
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
definition of invalidation: NONE dirty, LOCAL dirty, GLOBAL dirty
|
definition of invalidation: NONE dirty, LOCAL dirty, GLOBAL dirty
|
||||||
|
|
||||||
1) If a node sets a LOCAL, it must climb the tree and set it as GLOBAL dirty
|
1) If a node sets a LOCAL, it must climb the tree and set it as GLOBAL dirty
|
||||||
a) marking GLOBALs as dirty up all the tree must be done always
|
. a) marking GLOBALs as dirty up all the tree must be done always
|
||||||
2) If a node sets a GLOBAL, it marks local as dirty, and that's all?
|
2) If a node sets a GLOBAL, it marks local as dirty, and that's all?
|
||||||
|
|
||||||
//is clearing the dirty state correct in this case?
|
//is clearing the dirty state correct in this case?
|
||||||
|
|
|
@ -102,11 +102,11 @@ void Control::_edit_set_position(const Point2 &p_position) {
|
||||||
// Unlikely to happen. TODO: enclose all _edit_ functions into TOOLS_ENABLED
|
// Unlikely to happen. TODO: enclose all _edit_ functions into TOOLS_ENABLED
|
||||||
set_position(p_position);
|
set_position(p_position);
|
||||||
#endif
|
#endif
|
||||||
};
|
}
|
||||||
|
|
||||||
Point2 Control::_edit_get_position() const {
|
Point2 Control::_edit_get_position() const {
|
||||||
return get_position();
|
return get_position();
|
||||||
};
|
}
|
||||||
|
|
||||||
void Control::_edit_set_scale(const Size2 &p_scale) {
|
void Control::_edit_set_scale(const Size2 &p_scale) {
|
||||||
set_scale(p_scale);
|
set_scale(p_scale);
|
||||||
|
@ -541,14 +541,6 @@ void Control::_notification(int p_notification) {
|
||||||
viewport->connect("size_changed", this, "_size_changed");
|
viewport->connect("size_changed", this, "_size_changed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if (data.theme.is_null() && data.parent && data.parent->data.theme_owner) {
|
|
||||||
data.theme_owner=data.parent->data.theme_owner;
|
|
||||||
notification(NOTIFICATION_THEME_CHANGED);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_CANVAS: {
|
case NOTIFICATION_EXIT_CANVAS: {
|
||||||
if (data.parent_canvas_item) {
|
if (data.parent_canvas_item) {
|
||||||
|
@ -675,10 +667,6 @@ bool Control::has_point(const Point2 &p_point) const {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*if (has_stylebox("mask")) {
|
|
||||||
Ref<StyleBox> mask = get_stylebox("mask");
|
|
||||||
return mask->test_mask(p_point,Rect2(Point2(),get_size()));
|
|
||||||
}*/
|
|
||||||
return Rect2(Point2(), get_size()).has_point(p_point);
|
return Rect2(Point2(), get_size()).has_point(p_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2565,16 +2553,6 @@ void Control::warp_mouse(const Point2 &p_to_pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Control::is_text_field() const {
|
bool Control::is_text_field() const {
|
||||||
/*
|
|
||||||
if (get_script_instance()) {
|
|
||||||
Variant v=p_point;
|
|
||||||
const Variant *p[2]={&v,&p_data};
|
|
||||||
Variant::CallError ce;
|
|
||||||
Variant ret = get_script_instance()->call("is_text_field",p,2,ce);
|
|
||||||
if (ce.error==Variant::CallError::CALL_OK)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,11 @@
|
||||||
void AudioFilterSW::set_mode(Mode p_mode) {
|
void AudioFilterSW::set_mode(Mode p_mode) {
|
||||||
mode = p_mode;
|
mode = p_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioFilterSW::set_cutoff(float p_cutoff) {
|
void AudioFilterSW::set_cutoff(float p_cutoff) {
|
||||||
cutoff = p_cutoff;
|
cutoff = p_cutoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioFilterSW::set_resonance(float p_resonance) {
|
void AudioFilterSW::set_resonance(float p_resonance) {
|
||||||
resonance = p_resonance;
|
resonance = p_resonance;
|
||||||
}
|
}
|
||||||
|
@ -178,17 +180,9 @@ void AudioFilterSW::prepare_coefficients(Coeffs *p_coeffs) {
|
||||||
p_coeffs->b2 /= a0;
|
p_coeffs->b2 /= a0;
|
||||||
p_coeffs->a1 /= 0.0 - a0;
|
p_coeffs->a1 /= 0.0 - a0;
|
||||||
p_coeffs->a2 /= 0.0 - a0;
|
p_coeffs->a2 /= 0.0 - a0;
|
||||||
|
|
||||||
//undenormalise
|
|
||||||
/* p_coeffs->b0=undenormalise(p_coeffs->b0);
|
|
||||||
p_coeffs->b1=undenormalise(p_coeffs->b1);
|
|
||||||
p_coeffs->b2=undenormalise(p_coeffs->b2);
|
|
||||||
p_coeffs->a1=undenormalise(p_coeffs->a1);
|
|
||||||
p_coeffs->a2=undenormalise(p_coeffs->a2);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioFilterSW::set_stages(int p_stages) { //adjust for multiple stages
|
void AudioFilterSW::set_stages(int p_stages) {
|
||||||
|
|
||||||
stages = p_stages;
|
stages = p_stages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,10 +152,10 @@ public:
|
||||||
|
|
||||||
//! Test limit
|
//! Test limit
|
||||||
/*!
|
/*!
|
||||||
- free means upper < lower,
|
* - free means upper < lower,
|
||||||
- locked means upper == lower
|
* - locked means upper == lower
|
||||||
- limited means upper > lower
|
* - limited means upper > lower
|
||||||
- limitIndex: first 3 are linear, next 3 are angular
|
* - limitIndex: first 3 are linear, next 3 are angular
|
||||||
*/
|
*/
|
||||||
inline bool isLimited(int limitIndex) {
|
inline bool isLimited(int limitIndex) {
|
||||||
return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
|
return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
|
||||||
|
@ -239,25 +239,15 @@ public:
|
||||||
virtual bool setup(real_t p_timestep);
|
virtual bool setup(real_t p_timestep);
|
||||||
virtual void solve(real_t p_timestep);
|
virtual void solve(real_t p_timestep);
|
||||||
|
|
||||||
//! Calcs global transform of the offsets
|
// Calcs the global transform for the joint offset for body A an B, and also calcs the angle differences between the bodies.
|
||||||
/*!
|
|
||||||
Calcs the global transform for the joint offset for body A an B, and also calcs the agle differences between the bodies.
|
|
||||||
\sa Generic6DOFJointSW.getCalculatedTransformA , Generic6DOFJointSW.getCalculatedTransformB, Generic6DOFJointSW.calculateAngleInfo
|
|
||||||
*/
|
|
||||||
void calculateTransforms();
|
void calculateTransforms();
|
||||||
|
|
||||||
//! Gets the global transform of the offset for body A
|
// Gets the global transform of the offset for body A. */
|
||||||
/*!
|
|
||||||
\sa Generic6DOFJointSW.getFrameOffsetA, Generic6DOFJointSW.getFrameOffsetB, Generic6DOFJointSW.calculateAngleInfo.
|
|
||||||
*/
|
|
||||||
const Transform &getCalculatedTransformA() const {
|
const Transform &getCalculatedTransformA() const {
|
||||||
return m_calculatedTransformA;
|
return m_calculatedTransformA;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the global transform of the offset for body B
|
// Gets the global transform of the offset for body B.
|
||||||
/*!
|
|
||||||
\sa Generic6DOFJointSW.getFrameOffsetA, Generic6DOFJointSW.getFrameOffsetB, Generic6DOFJointSW.calculateAngleInfo.
|
|
||||||
*/
|
|
||||||
const Transform &getCalculatedTransformB() const {
|
const Transform &getCalculatedTransformB() const {
|
||||||
return m_calculatedTransformB;
|
return m_calculatedTransformB;
|
||||||
}
|
}
|
||||||
|
@ -344,10 +334,10 @@ public:
|
||||||
|
|
||||||
//! Test limit
|
//! Test limit
|
||||||
/*!
|
/*!
|
||||||
- free means upper < lower,
|
* - free means upper < lower,
|
||||||
- locked means upper == lower
|
* - locked means upper == lower
|
||||||
- limited means upper > lower
|
* - limited means upper > lower
|
||||||
- limitIndex: first 3 are linear, next 3 are angular
|
* - limitIndex: first 3 are linear, next 3 are angular
|
||||||
*/
|
*/
|
||||||
bool isLimited(int limitIndex) {
|
bool isLimited(int limitIndex) {
|
||||||
if (limitIndex < 3) {
|
if (limitIndex < 3) {
|
||||||
|
|
|
@ -651,92 +651,3 @@ BroadPhase2DHashGrid::~BroadPhase2DHashGrid() {
|
||||||
|
|
||||||
memdelete_arr(hash_table);
|
memdelete_arr(hash_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3D version of voxel traversal:
|
|
||||||
|
|
||||||
public IEnumerable<Point3D> GetCellsOnRay(Ray ray, int maxDepth)
|
|
||||||
{
|
|
||||||
// Implementation is based on:
|
|
||||||
// "A Fast Voxel Traversal Algorithm for Ray Tracing"
|
|
||||||
// John Amanatides, Andrew Woo
|
|
||||||
// http://www.cse.yorku.ca/~amana/research/grid.pdf
|
|
||||||
// https://web.archive.org/web/20100616193049/http://www.devmaster.net/articles/raytracing_series/A%20faster%20voxel%20traversal%20algorithm%20for%20ray%20tracing.pdf
|
|
||||||
|
|
||||||
// NOTES:
|
|
||||||
// * This code assumes that the ray's position and direction are in 'cell coordinates', which means
|
|
||||||
// that one unit equals one cell in all directions.
|
|
||||||
// * When the ray doesn't start within the voxel grid, calculate the first position at which the
|
|
||||||
// ray could enter the grid. If it never enters the grid, there is nothing more to do here.
|
|
||||||
// * Also, it is important to test when the ray exits the voxel grid when the grid isn't infinite.
|
|
||||||
// * The Point3D structure is a simple structure having three integer fields (X, Y and Z).
|
|
||||||
|
|
||||||
// The cell in which the ray starts.
|
|
||||||
Point3D start = GetCellAt(ray.Position); // Rounds the position's X, Y and Z down to the nearest integer values.
|
|
||||||
int x = start.X;
|
|
||||||
int y = start.Y;
|
|
||||||
int z = start.Z;
|
|
||||||
|
|
||||||
// Determine which way we go.
|
|
||||||
int stepX = Math.Sign(ray.Direction.X);
|
|
||||||
int stepY = Math.Sign(ray.Direction.Y);
|
|
||||||
int stepZ = Math.Sign(ray.Direction.Z);
|
|
||||||
|
|
||||||
// Calculate cell boundaries. When the step (i.e. direction sign) is positive,
|
|
||||||
// the next boundary is AFTER our current position, meaning that we have to add 1.
|
|
||||||
// Otherwise, it is BEFORE our current position, in which case we add nothing.
|
|
||||||
Point3D cellBoundary = new Point3D(
|
|
||||||
x + (stepX > 0 ? 1 : 0),
|
|
||||||
y + (stepY > 0 ? 1 : 0),
|
|
||||||
z + (stepZ > 0 ? 1 : 0));
|
|
||||||
|
|
||||||
// NOTE: For the following calculations, the result will be Single.PositiveInfinity
|
|
||||||
// when ray.Direction.X, Y or Z equals zero, which is OK. However, when the left-hand
|
|
||||||
// value of the division also equals zero, the result is Single.NaN, which is not OK.
|
|
||||||
|
|
||||||
// Determine how far we can travel along the ray before we hit a voxel boundary.
|
|
||||||
Vector3 tMax = new Vector3(
|
|
||||||
(cellBoundary.X - ray.Position.X) / ray.Direction.X, // Boundary is a plane on the YZ axis.
|
|
||||||
(cellBoundary.Y - ray.Position.Y) / ray.Direction.Y, // Boundary is a plane on the XZ axis.
|
|
||||||
(cellBoundary.Z - ray.Position.Z) / ray.Direction.Z); // Boundary is a plane on the XY axis.
|
|
||||||
if (Single.IsNaN(tMax.X)) tMax.X = Single.PositiveInfinity;
|
|
||||||
if (Single.IsNaN(tMax.Y)) tMax.Y = Single.PositiveInfinity;
|
|
||||||
if (Single.IsNaN(tMax.Z)) tMax.Z = Single.PositiveInfinity;
|
|
||||||
|
|
||||||
// Determine how far we must travel along the ray before we have crossed a gridcell.
|
|
||||||
Vector3 tDelta = new Vector3(
|
|
||||||
stepX / ray.Direction.X, // Crossing the width of a cell.
|
|
||||||
stepY / ray.Direction.Y, // Crossing the height of a cell.
|
|
||||||
stepZ / ray.Direction.Z); // Crossing the depth of a cell.
|
|
||||||
if (Single.IsNaN(tDelta.X)) tDelta.X = Single.PositiveInfinity;
|
|
||||||
if (Single.IsNaN(tDelta.Y)) tDelta.Y = Single.PositiveInfinity;
|
|
||||||
if (Single.IsNaN(tDelta.Z)) tDelta.Z = Single.PositiveInfinity;
|
|
||||||
|
|
||||||
// For each step, determine which distance to the next voxel boundary is lowest (i.e.
|
|
||||||
// which voxel boundary is nearest) and walk that way.
|
|
||||||
for (int i = 0; i < maxDepth; i++)
|
|
||||||
{
|
|
||||||
// Return it.
|
|
||||||
yield return new Point3D(x, y, z);
|
|
||||||
|
|
||||||
// Do the next step.
|
|
||||||
if (tMax.X < tMax.Y && tMax.X < tMax.Z)
|
|
||||||
{
|
|
||||||
// tMax.X is the lowest, an YZ cell boundary plane is nearest.
|
|
||||||
x += stepX;
|
|
||||||
tMax.X += tDelta.X;
|
|
||||||
}
|
|
||||||
else if (tMax.Y < tMax.Z)
|
|
||||||
{
|
|
||||||
// tMax.Y is the lowest, an XZ cell boundary plane is nearest.
|
|
||||||
y += stepY;
|
|
||||||
tMax.Y += tDelta.Y;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// tMax.Z is the lowest, an XY cell boundary plane is nearest.
|
|
||||||
z += stepZ;
|
|
||||||
tMax.Z += tDelta.Z;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
Loading…
Reference in a new issue