Skip to content

Commit 2dda950

Browse files
committed
Added long double support
1 parent e24a0b4 commit 2dda950

File tree

10 files changed

+36
-19
lines changed

10 files changed

+36
-19
lines changed

include/vsg/app/ViewMatrix.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ namespace vsg
3434
/// origin value provides a means of translating the view matrix relative to the origin of any CoordinateFrame subgraphs
3535
/// to maximize the precision when moving around the CoordinateFrame subgraph. This is helpful for astronmically large
3636
/// scenes where standrd double precision is insufficient for avoiding visually significant numerical errors.
37-
dvec3 origin;
37+
ldvec3 origin;
3838

39-
virtual dmat4 transform(const vsg::dvec3& offset = {}) const = 0;
39+
virtual dmat4 transform(const vsg::ldvec3& offset = {}) const = 0;
4040

41-
virtual dmat4 inverse(const vsg::dvec3& offset = {}) const
41+
virtual dmat4 inverse(const vsg::ldvec3& offset = {}) const
4242
{
4343
return vsg::inverse(transform(offset));
4444
}
@@ -88,7 +88,7 @@ namespace vsg
8888

8989
void set(const dmat4& matrix);
9090

91-
dmat4 transform(const dvec3& offset = {}) const override;
91+
dmat4 transform(const ldvec3& offset = {}) const override;
9292

9393
void read(Input& input) override;
9494
void write(Output& output) const override;
@@ -123,7 +123,7 @@ namespace vsg
123123

124124
void set(const dmat4& matrix);
125125

126-
dmat4 transform(const dvec3& offset = {}) const override;
126+
dmat4 transform(const ldvec3& offset = {}) const override;
127127
};
128128
VSG_type_name(vsg::LookDirection);
129129

@@ -138,7 +138,7 @@ namespace vsg
138138
}
139139

140140
/// returns matrix * viewMatrix->transform()
141-
dmat4 transform(const vsg::dvec3& offset = {}) const override;
141+
dmat4 transform(const ldvec3& offset = {}) const override;
142142

143143
dmat4 matrix;
144144
ref_ptr<ViewMatrix> viewMatrix;
@@ -161,8 +161,8 @@ namespace vsg
161161
objectPath(path.begin(), path.end()) {}
162162

163163
/// returns matrix * computeTransfrom(objectPath)
164-
dmat4 transform(const vsg::dvec3& offset = {}) const override;
165-
dmat4 inverse(const vsg::dvec3& offset = {}) const override;
164+
dmat4 transform(const ldvec3& offset = {}) const override;
165+
dmat4 inverse(const ldvec3& offset = {}) const override;
166166

167167
dmat4 matrix;
168168
RefObjectPath objectPath;

include/vsg/io/AsciiInput.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ namespace vsg
8585
void read(size_t num, uint64_t* value) override { _read(num, value); }
8686
void read(size_t num, float* value) override { _read(num, value); }
8787
void read(size_t num, double* value) override { _read(num, value); }
88+
void read(size_t num, long double* value) override { _read(num, value); }
8889

8990
// read in an individual string
9091
void _read(std::string& value);

include/vsg/io/AsciiOutput.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ namespace vsg
136136
_output.precision(double_precision);
137137
_write_real(num, value);
138138
}
139+
void write(size_t num, const long double* value) override
140+
{
141+
_output.precision(long_double_precision);
142+
_write_real(num, value);
143+
}
139144

140145
void _write(const std::string& str)
141146
{
@@ -161,6 +166,7 @@ namespace vsg
161166

162167
int float_precision = 6;
163168
int double_precision = 12;
169+
int long_double_precision = 24;
164170

165171
protected:
166172
std::ostream& _output;

include/vsg/io/BinaryInput.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ namespace vsg
5555
void read(size_t num, uint64_t* value) override { _read(num, value); }
5656
void read(size_t num, float* value) override { _read(num, value); }
5757
void read(size_t num, double* value) override { _read(num, value); }
58+
void read(size_t num, long double* value) override { _read(num, value); }
5859

5960
// read in an individual string
6061
void _read(std::string& value);

include/vsg/io/BinaryOutput.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ namespace vsg
5050
void write(size_t num, const uint64_t* value) override { _write(num, value); }
5151
void write(size_t num, const float* value) override { _write(num, value); }
5252
void write(size_t num, const double* value) override { _write(num, value); }
53+
void write(size_t num, const long double* value) override { _write(num, value); }
5354

5455
void _write(const std::string& str);
5556
void _write(const std::wstring& str);

include/vsg/io/Input.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace vsg
6161
virtual void read(size_t num, uint64_t* value) = 0;
6262
virtual void read(size_t num, float* value) = 0;
6363
virtual void read(size_t num, double* value) = 0;
64+
virtual void read(size_t num, long double* value) = 0;
6465
virtual void read(size_t num, std::string* value) = 0;
6566
virtual void read(size_t num, std::wstring* value) = 0;
6667
virtual void read(size_t num, Path* value) = 0;
@@ -78,6 +79,9 @@ namespace vsg
7879
void read(size_t num, vec4* value) { read(num * value->size(), value->data()); }
7980
void read(size_t num, dvec2* value) { read(num * value->size(), value->data()); }
8081
void read(size_t num, dvec3* value) { read(num * value->size(), value->data()); }
82+
void read(size_t num, ldvec4* value) { read(num * value->size(), value->data()); }
83+
void read(size_t num, ldvec2* value) { read(num * value->size(), value->data()); }
84+
void read(size_t num, ldvec3* value) { read(num * value->size(), value->data()); }
8185
void read(size_t num, dvec4* value) { read(num * value->size(), value->data()); }
8286
void read(size_t num, bvec2* value) { read(num * value->size(), value->data()); }
8387
void read(size_t num, bvec3* value) { read(num * value->size(), value->data()); }

include/vsg/io/Output.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace vsg
6161
virtual void write(size_t num, const uint64_t* value) = 0;
6262
virtual void write(size_t num, const float* value) = 0;
6363
virtual void write(size_t num, const double* value) = 0;
64+
virtual void write(size_t num, const long double* value) = 0;
6465
virtual void write(size_t num, const std::string* value) = 0;
6566
virtual void write(size_t num, const std::wstring* value) = 0;
6667
virtual void write(size_t num, const Path* value) = 0;
@@ -79,6 +80,9 @@ namespace vsg
7980
void write(size_t num, const dvec2* value) { write(num * value->size(), value->data()); }
8081
void write(size_t num, const dvec3* value) { write(num * value->size(), value->data()); }
8182
void write(size_t num, const dvec4* value) { write(num * value->size(), value->data()); }
83+
void write(size_t num, const ldvec2* value) { write(num * value->size(), value->data()); }
84+
void write(size_t num, const ldvec3* value) { write(num * value->size(), value->data()); }
85+
void write(size_t num, const ldvec4* value) { write(num * value->size(), value->data()); }
8286
void write(size_t num, const bvec2* value) { write(num * value->size(), value->data()); }
8387
void write(size_t num, const bvec3* value) { write(num * value->size(), value->data()); }
8488
void write(size_t num, const bvec4* value) { write(num * value->size(), value->data()); }

include/vsg/nodes/CoordinateFrame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace vsg
2525
CoordinateFrame(const CoordinateFrame& rhs, const CopyOp& copyop = {});
2626

2727
std::string name;
28-
dvec3 origin;
28+
ldvec3 origin;
2929

3030
dmat4 transform(const dmat4& mv) const override;
3131

src/vsg/app/ViewMatrix.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ void LookAt::set(const dmat4& matrix)
4848
eye = matrix * dvec3(0.0, 0.0, 0.0);
4949
}
5050

51-
dmat4 LookAt::transform(const dvec3& offset) const
51+
dmat4 LookAt::transform(const ldvec3& offset) const
5252
{
53-
dvec3 delta = origin - offset;
53+
dvec3 delta = dvec3(origin - offset);
5454
return vsg::lookAt(eye + delta, center + delta, up);
5555
}
5656

@@ -60,22 +60,22 @@ void LookDirection::set(const dmat4& matrix)
6060
vsg::decompose(matrix, position, rotation, scale);
6161
}
6262

63-
dmat4 LookDirection::transform(const dvec3& offset) const
63+
dmat4 LookDirection::transform(const ldvec3& offset) const
6464
{
65-
return vsg::rotate(-rotation) * vsg::translate(offset - origin - position);
65+
return vsg::rotate(-rotation) * vsg::translate(dvec3(origin - offset) - position);
6666
}
6767

68-
dmat4 RelativeViewMatrix::transform(const dvec3& offset) const
68+
dmat4 RelativeViewMatrix::transform(const ldvec3& offset) const
6969
{
7070
return matrix * viewMatrix->transform(offset);
7171
}
7272

73-
dmat4 TrackingViewMatrix::transform(const dvec3& offset) const
73+
dmat4 TrackingViewMatrix::transform(const ldvec3& offset) const
7474
{
75-
return matrix * vsg::translate(offset - origin) * vsg::inverse(computeTransform(objectPath));
75+
return matrix * vsg::translate(dvec3(origin - offset)) * vsg::inverse(computeTransform(objectPath));
7676
}
7777

78-
dmat4 TrackingViewMatrix::inverse(const dvec3& offset) const
78+
dmat4 TrackingViewMatrix::inverse(const ldvec3& offset) const
7979
{
80-
return vsg::computeTransform(objectPath) * vsg::translate(origin - offset) * vsg::inverse(matrix);
80+
return vsg::computeTransform(objectPath) * vsg::translate(dvec3(origin - offset)) * vsg::inverse(matrix);
8181
}

src/vsg/nodes/CoordinateFrame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,5 @@ void CoordinateFrame::write(Output& output) const
5858

5959
dmat4 CoordinateFrame::transform(const dmat4& mv) const
6060
{
61-
return mv * translate(origin);
61+
return mv * translate(dvec3(origin));
6262
}

0 commit comments

Comments
 (0)