Upgrade to Unreal Engine 4.22 and clang 7
This commit is contained in:
parent
e52f6c7853
commit
32d9715ef8
|
@ -13,9 +13,10 @@ matrix:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-xenial-7
|
||||||
packages:
|
packages:
|
||||||
- g++-7 # we need this one for the libstdc++.
|
- g++-7 # we need this one for the libstdc++.
|
||||||
- clang-6.0
|
- clang-7
|
||||||
- ninja-build
|
- ninja-build
|
||||||
- python
|
- python
|
||||||
- python-pip
|
- python-pip
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
## Latest
|
## Latest
|
||||||
|
|
||||||
|
* Upgraded to Unreal Engine 4.22
|
||||||
* Recorder fixes:
|
* Recorder fixes:
|
||||||
- Actors at start of playback could interpolate positions from its current position instead than the recorded position, making some fast sliding effect during 1 frame.
|
- Actors at start of playback could interpolate positions from its current position instead than the recorded position, making some fast sliding effect during 1 frame.
|
||||||
- Camera following in playback was not working if a new map was needed to load.
|
- Camera following in playback was not working if a new map was needed to load.
|
||||||
|
|
|
@ -11,7 +11,7 @@ process.
|
||||||
|
|
||||||
![modules](img/modules.png)
|
![modules](img/modules.png)
|
||||||
|
|
||||||
In Linux, we compile CARLA and all the dependencies with clang-6.0 and C++14
|
In Linux, we compile CARLA and all the dependencies with clang-7.0 and C++14
|
||||||
standard. We however link against different runtime C++ libraries depending on
|
standard. We however link against different runtime C++ libraries depending on
|
||||||
where the code going to be used, since all the code that is going to be linked
|
where the code going to be used, since all the code that is going to be linked
|
||||||
with Unreal Engine needs to be compiled using `libc++`.
|
with Unreal Engine needs to be compiled using `libc++`.
|
||||||
|
@ -26,7 +26,7 @@ make setup
|
||||||
|
|
||||||
Get and compile dependencies
|
Get and compile dependencies
|
||||||
|
|
||||||
* llvm-6.0 (libc++ and libc++abi)
|
* llvm-7.1 (libc++ and libc++abi)
|
||||||
* rpclib-2.2.1 (twice, with libstdc++ and libc++)
|
* rpclib-2.2.1 (twice, with libstdc++ and libc++)
|
||||||
* boost-1.69 (headers only)
|
* boost-1.69 (headers only)
|
||||||
* googletest-1.8.0 (with libc++)
|
* googletest-1.8.0 (with libc++)
|
||||||
|
@ -53,8 +53,8 @@ Two configurations:
|
||||||
|
|
||||||
#### CarlaUE4 and Carla plugin
|
#### CarlaUE4 and Carla plugin
|
||||||
|
|
||||||
Both compiled at the same step with Unreal Engine 4.21 build tool. They require
|
Both compiled at the same step with Unreal Engine build tool. They require the
|
||||||
the `UE4_ROOT` environment variable set.
|
`UE4_ROOT` environment variable set.
|
||||||
|
|
||||||
Command
|
Command
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ C++
|
||||||
* Comments should not exceed 80 columns, code may exceed this limit a bit in
|
* Comments should not exceed 80 columns, code may exceed this limit a bit in
|
||||||
rare occasions if it results in clearer code.
|
rare occasions if it results in clearer code.
|
||||||
* Compilation should not give any error or warning
|
* Compilation should not give any error or warning
|
||||||
(`clang++-6.0 -Wall -Wextra -std=C++14 -Wno-missing-braces`).
|
(`clang++-7 -Wall -Wextra -std=C++14 -Wno-missing-braces`).
|
||||||
* The use of `throw` is forbidden, use `carla::throw_exception` instead.
|
* The use of `throw` is forbidden, use `carla::throw_exception` instead.
|
||||||
* Unreal C++ code (CarlaUE4 and Carla plugin) follow the
|
* Unreal C++ code (CarlaUE4 and Carla plugin) follow the
|
||||||
[Unreal Engine's Coding Standard][ue4link] with the exception of using
|
[Unreal Engine's Coding Standard][ue4link] with the exception of using
|
||||||
|
|
|
@ -7,8 +7,10 @@ Install the build tools and dependencies
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||||
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
|
||||||
|
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main"
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install build-essential clang-6.0 lld-6.0 g++-7 cmake ninja-build python python-pip python-dev python3-dev python3-pip libpng16-dev libtiff5-dev libjpeg-dev tzdata sed curl wget unzip autoconf libtool
|
sudo apt-get install build-essential clang-7 lld-7 g++-7 cmake ninja-build python python-pip python-dev python3-dev python3-pip libpng16-dev libtiff5-dev libjpeg-dev tzdata sed curl wget unzip autoconf libtool
|
||||||
pip2 install --user setuptools
|
pip2 install --user setuptools
|
||||||
pip3 install --user setuptools
|
pip3 install --user setuptools
|
||||||
```
|
```
|
||||||
|
@ -20,8 +22,8 @@ change your default clang version to compile Unreal Engine and the CARLA
|
||||||
dependencies
|
dependencies
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-6.0/bin/clang++ 102
|
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-7/bin/clang++ 170
|
||||||
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-6.0/bin/clang 102
|
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-7/bin/clang 170
|
||||||
```
|
```
|
||||||
|
|
||||||
Build Unreal Engine
|
Build Unreal Engine
|
||||||
|
@ -32,13 +34,13 @@ Build Unreal Engine
|
||||||
need to add your GitHub username when you sign up at
|
need to add your GitHub username when you sign up at
|
||||||
[www.unrealengine.com](https://www.unrealengine.com).
|
[www.unrealengine.com](https://www.unrealengine.com).
|
||||||
|
|
||||||
Download and compile Unreal Engine 4.21. Here we will assume you install it at
|
Download and compile Unreal Engine 4.22. Here we will assume you install it at
|
||||||
`~/UnrealEngine_4.21", but you can install it anywhere, just replace the path
|
`~/UnrealEngine_4.22", but you can install it anywhere, just replace the path
|
||||||
where necessary.
|
where necessary.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone --depth=1 -b 4.21 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.21
|
git clone --depth=1 -b 4.22 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.22
|
||||||
cd ~/UnrealEngine_4.21
|
cd ~/UnrealEngine_4.22
|
||||||
./Setup.sh && ./GenerateProjectFiles.sh && make
|
./Setup.sh && ./GenerateProjectFiles.sh && make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@ For CARLA to find your Unreal Engine's installation folder you need to set the
|
||||||
following environment variable
|
following environment variable
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
export UE4_ROOT=~/UnrealEngine_4.21
|
export UE4_ROOT=~/UnrealEngine_4.22
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also add this variable to your `~/.bashrc` or `~/.profile`.
|
You can also add this variable to your `~/.bashrc` or `~/.profile`.
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
Also:
|
Also:
|
||||||
|
|
||||||
- [Unreal Engine](https://www.unrealengine.com/download) (v4.21.x)
|
- [Unreal Engine](https://www.unrealengine.com/download) (v4.22.x)
|
||||||
- [Visual Studio](https://www.visualstudio.com/downloads/) (2017)
|
- [Visual Studio](https://www.visualstudio.com/downloads/) (2017)
|
||||||
|
|
||||||
<h3>Environment Setup</h3>
|
<h3>Environment Setup</h3>
|
||||||
|
|
|
@ -4,8 +4,8 @@ BINDIR=$(CURDIR)/bin
|
||||||
INSTALLDIR=$(CURDIR)/libcarla-install
|
INSTALLDIR=$(CURDIR)/libcarla-install
|
||||||
TOOLCHAIN=$(CURDIR)/ToolChain.cmake
|
TOOLCHAIN=$(CURDIR)/ToolChain.cmake
|
||||||
|
|
||||||
CC=/usr/bin/clang-6.0
|
CC=/usr/bin/clang-7
|
||||||
CXX=/usr/bin/clang++-6.0
|
CXX=/usr/bin/clang++-7
|
||||||
CXXFLAGS=-std=c++14 -pthread -fPIC -O3 -DNDEBUG -Werror -Wall -Wextra
|
CXXFLAGS=-std=c++14 -pthread -fPIC -O3 -DNDEBUG -Werror -Wall -Wextra
|
||||||
|
|
||||||
define log
|
define log
|
||||||
|
|
|
@ -24,8 +24,8 @@ want
|
||||||
|
|
||||||
```cmake
|
```cmake
|
||||||
# Example ToolChain.cmake
|
# Example ToolChain.cmake
|
||||||
set(CMAKE_C_COMPILER /usr/bin/clang-6.0)
|
set(CMAKE_C_COMPILER /usr/bin/clang-7)
|
||||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++-6.0)
|
set(CMAKE_CXX_COMPILER /usr/bin/clang++-7)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE)
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ pipeline {
|
||||||
agent any
|
agent any
|
||||||
|
|
||||||
environment {
|
environment {
|
||||||
UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.21'
|
UE4_ROOT = '/var/lib/jenkins/UnrealEngine_4.22'
|
||||||
}
|
}
|
||||||
|
|
||||||
options {
|
options {
|
||||||
|
|
|
@ -257,23 +257,23 @@ namespace road {
|
||||||
RELEASE_ASSERT(waypoint.lane_id >= lanes.begin()->first);
|
RELEASE_ASSERT(waypoint.lane_id >= lanes.begin()->first);
|
||||||
RELEASE_ASSERT(waypoint.lane_id <= lanes.rbegin()->first);
|
RELEASE_ASSERT(waypoint.lane_id <= lanes.rbegin()->first);
|
||||||
|
|
||||||
double lane_width = 0;
|
float lane_width = 0.0f;
|
||||||
double lane_tangent = 0;
|
float lane_tangent = 0.0f;
|
||||||
if (waypoint.lane_id < 0) {
|
if (waypoint.lane_id < 0) {
|
||||||
// right lane
|
// right lane
|
||||||
const auto side_lanes = MakeListView(
|
const auto side_lanes = MakeListView(
|
||||||
std::make_reverse_iterator(lanes.lower_bound(0)), lanes.rend());
|
std::make_reverse_iterator(lanes.lower_bound(0)), lanes.rend());
|
||||||
const auto computed_width =
|
const auto computed_width =
|
||||||
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
|
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
|
||||||
lane_width = computed_width.first;
|
lane_width = static_cast<float>(computed_width.first);
|
||||||
lane_tangent = computed_width.second;
|
lane_tangent = static_cast<float>(computed_width.second);
|
||||||
} else {
|
} else {
|
||||||
// left lane
|
// left lane
|
||||||
const auto side_lanes = MakeListView(lanes.lower_bound(1), lanes.end());
|
const auto side_lanes = MakeListView(lanes.lower_bound(1), lanes.end());
|
||||||
const auto computed_width =
|
const auto computed_width =
|
||||||
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
|
ComputeTotalLaneWidth(side_lanes, waypoint.s, waypoint.lane_id);
|
||||||
lane_width = computed_width.first;
|
lane_width = static_cast<float>(computed_width.first);
|
||||||
lane_tangent = computed_width.second;
|
lane_tangent = static_cast<float>(computed_width.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get a directed point in s and apply the computed lateral offet
|
// get a directed point in s and apply the computed lateral offet
|
||||||
|
@ -281,7 +281,7 @@ namespace road {
|
||||||
|
|
||||||
// compute the tangent of the laneOffset
|
// compute the tangent of the laneOffset
|
||||||
const auto lane_offset_info = road.GetInfo<RoadInfoLaneOffset>(waypoint.s);
|
const auto lane_offset_info = road.GetInfo<RoadInfoLaneOffset>(waypoint.s);
|
||||||
const auto lane_offset_tangent = lane_offset_info->GetPolynomial().Tangent(waypoint.s);
|
const auto lane_offset_tangent = static_cast<float>(lane_offset_info->GetPolynomial().Tangent(waypoint.s));
|
||||||
|
|
||||||
lane_tangent -= lane_offset_tangent;
|
lane_tangent -= lane_offset_tangent;
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@ namespace road {
|
||||||
const auto geometry = _info.GetInfo<element::RoadInfoGeometry>(clamped_s);
|
const auto geometry = _info.GetInfo<element::RoadInfoGeometry>(clamped_s);
|
||||||
|
|
||||||
const auto lane_offset = _info.GetInfo<element::RoadInfoLaneOffset>(clamped_s);
|
const auto lane_offset = _info.GetInfo<element::RoadInfoLaneOffset>(clamped_s);
|
||||||
const auto offset = lane_offset->GetPolynomial().Evaluate(clamped_s);
|
const auto offset = static_cast<float>(lane_offset->GetPolynomial().Evaluate(clamped_s));
|
||||||
|
|
||||||
// Apply road's lane offset record
|
// Apply road's lane offset record
|
||||||
element::DirectedPoint p = geometry->GetGeometry().PosFromDist(clamped_s - geometry->GetDistance());
|
element::DirectedPoint p = geometry->GetGeometry().PosFromDist(clamped_s - geometry->GetDistance());
|
||||||
|
@ -244,7 +244,7 @@ namespace road {
|
||||||
DirectedPoint current_dp = dp_lane_zero;
|
DirectedPoint current_dp = dp_lane_zero;
|
||||||
for (const auto &lane : right_lanes) {
|
for (const auto &lane : right_lanes) {
|
||||||
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
|
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
|
||||||
const auto half_width = lane_width_info->GetPolynomial().Evaluate(s) * 0.5;
|
const auto half_width = static_cast<float>(lane_width_info->GetPolynomial().Evaluate(s)) * 0.5f;
|
||||||
|
|
||||||
current_dp.ApplyLateralOffset(half_width);
|
current_dp.ApplyLateralOffset(half_width);
|
||||||
const auto current_dist = geom::Math::Distance(current_dp.location, loc);
|
const auto current_dist = geom::Math::Distance(current_dp.location, loc);
|
||||||
|
@ -267,7 +267,7 @@ namespace road {
|
||||||
current_dp = dp_lane_zero;
|
current_dp = dp_lane_zero;
|
||||||
for (const auto &lane : left_lanes) {
|
for (const auto &lane : left_lanes) {
|
||||||
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
|
const auto lane_width_info = lane.second->GetInfo<RoadInfoLaneWidth>(s);
|
||||||
const auto half_width = -lane_width_info->GetPolynomial().Evaluate(s) * 0.5;
|
const auto half_width = -static_cast<float>(lane_width_info->GetPolynomial().Evaluate(s)) * 0.5f;
|
||||||
|
|
||||||
current_dp.ApplyLateralOffset(half_width);
|
current_dp.ApplyLateralOffset(half_width);
|
||||||
const auto current_dist = geom::Math::Distance(current_dp.location, loc);
|
const auto current_dist = geom::Math::Distance(current_dp.location, loc);
|
||||||
|
|
|
@ -41,10 +41,10 @@ namespace element {
|
||||||
double tangent = 0.0; // [radians]
|
double tangent = 0.0; // [radians]
|
||||||
double pitch = 0.0; // [radians]
|
double pitch = 0.0; // [radians]
|
||||||
|
|
||||||
void ApplyLateralOffset(double lateral_offset) {
|
void ApplyLateralOffset(float lateral_offset) {
|
||||||
/// @todo Z axis??
|
/// @todo Z axis??
|
||||||
auto normal_x = std::sin(tangent);
|
auto normal_x = std::sin(static_cast<float>(tangent));
|
||||||
auto normal_y = -std::cos(tangent);
|
auto normal_y = -std::cos(static_cast<float>(tangent));
|
||||||
location.x += lateral_offset * normal_x;
|
location.x += lateral_offset * normal_x;
|
||||||
location.y += lateral_offset * normal_y;
|
location.y += lateral_offset * normal_y;
|
||||||
}
|
}
|
||||||
|
@ -117,11 +117,11 @@ namespace element {
|
||||||
: Geometry(GeometryType::LINE, start_offset, length, heading, start_pos) {}
|
: Geometry(GeometryType::LINE, start_offset, length, heading, start_pos) {}
|
||||||
|
|
||||||
DirectedPoint PosFromDist(double dist) const override {
|
DirectedPoint PosFromDist(double dist) const override {
|
||||||
dist = geom::Math::Clamp(dist, 0.0, _length);
|
|
||||||
DEBUG_ASSERT(_length > 0.0);
|
DEBUG_ASSERT(_length > 0.0);
|
||||||
|
dist = geom::Math::Clamp(dist, 0.0, _length);
|
||||||
DirectedPoint p(_start_position, _heading);
|
DirectedPoint p(_start_position, _heading);
|
||||||
p.location.x += dist * std::cos(p.tangent);
|
p.location.x += static_cast<float>(dist * std::cos(p.tangent));
|
||||||
p.location.y += dist * std::sin(p.tangent);
|
p.location.y += static_cast<float>(dist * std::sin(p.tangent));
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,11 +159,11 @@ namespace element {
|
||||||
const double radius = 1.0 / _curvature;
|
const double radius = 1.0 / _curvature;
|
||||||
constexpr double pi_half = geom::Math::Pi<double>() / 2.0;
|
constexpr double pi_half = geom::Math::Pi<double>() / 2.0;
|
||||||
DirectedPoint p(_start_position, _heading);
|
DirectedPoint p(_start_position, _heading);
|
||||||
p.location.x += radius * std::cos(p.tangent + pi_half);
|
p.location.x += static_cast<float>(radius * std::cos(p.tangent + pi_half));
|
||||||
p.location.y += radius * std::sin(p.tangent + pi_half);
|
p.location.y += static_cast<float>(radius * std::sin(p.tangent + pi_half));
|
||||||
p.tangent += dist * _curvature;
|
p.tangent += dist * _curvature;
|
||||||
p.location.x -= radius * std::cos(p.tangent + pi_half);
|
p.location.x -= static_cast<float>(radius * std::cos(p.tangent + pi_half));
|
||||||
p.location.y -= radius * std::sin(p.tangent + pi_half);
|
p.location.y -= static_cast<float>(radius * std::sin(p.tangent + pi_half));
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,8 +228,8 @@ namespace element {
|
||||||
DirectedPoint p(_start_position, _heading);
|
DirectedPoint p(_start_position, _heading);
|
||||||
const double cos_a = std::cos(p.tangent);
|
const double cos_a = std::cos(p.tangent);
|
||||||
const double sin_a = std::sin(p.tangent);
|
const double sin_a = std::sin(p.tangent);
|
||||||
p.location.x += C * cos_a - S * sin_a;
|
p.location.x += static_cast<float>(C * cos_a - S * sin_a);
|
||||||
p.location.y += S * cos_a + C * sin_a;
|
p.location.y += static_cast<float>(S * cos_a + C * sin_a);
|
||||||
p.tangent += length * length;
|
p.tangent += length * length;
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
|
|
|
@ -40,7 +40,7 @@ def get_libcarla_extensions():
|
||||||
os.path.join(pwd, 'dependencies/lib', pylib)]
|
os.path.join(pwd, 'dependencies/lib', pylib)]
|
||||||
extra_compile_args = [
|
extra_compile_args = [
|
||||||
'-isystem', 'dependencies/include/system', '-fPIC', '-std=c++14',
|
'-isystem', 'dependencies/include/system', '-fPIC', '-std=c++14',
|
||||||
'-Werror', '-Wall', '-Wextra', '-Wpedantic',
|
'-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wno-self-assign-overloaded',
|
||||||
'-Wdeprecated', '-Wno-shadow', '-Wuninitialized', '-Wunreachable-code',
|
'-Wdeprecated', '-Wno-shadow', '-Wuninitialized', '-Wunreachable-code',
|
||||||
'-Wpessimizing-move', '-Wold-style-cast', '-Wnull-dereference',
|
'-Wpessimizing-move', '-Wold-style-cast', '-Wnull-dereference',
|
||||||
'-Wduplicate-enum', '-Wnon-virtual-dtor', '-Wheader-hygiene',
|
'-Wduplicate-enum', '-Wnon-virtual-dtor', '-Wheader-hygiene',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"FileVersion": 3,
|
"FileVersion": 3,
|
||||||
"EngineAssociation": "4.21",
|
"EngineAssociation": "4.22",
|
||||||
"Category": "",
|
"Category": "",
|
||||||
"Description": "",
|
"Description": "",
|
||||||
"Modules": [
|
"Modules": [
|
||||||
|
|
|
@ -85,35 +85,24 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor)
|
||||||
{
|
{
|
||||||
check(Sensor.CaptureRenderTarget != nullptr);
|
check(Sensor.CaptureRenderTarget != nullptr);
|
||||||
|
|
||||||
// First we create the message header (needs to be created in the
|
// Enqueue a command in the render-thread that will write the image buffer to
|
||||||
// game-thread).
|
// the data stream. The stream is created in the capture thus executed in the
|
||||||
auto AsyncStream = Sensor.GetDataStream(Sensor);
|
// game-thread.
|
||||||
|
ENQUEUE_RENDER_COMMAND(FWritePixels_SendPixelsInRenderThread)
|
||||||
// We need a shared ptr here because UE4 macros do not move the arguments -_-
|
(
|
||||||
auto StreamPtr = std::make_shared<decltype(AsyncStream)>(std::move(AsyncStream));
|
[&Sensor, Stream=Sensor.GetDataStream(Sensor)](auto &InRHICmdList) mutable
|
||||||
|
|
||||||
// Then we enqueue commands in the render-thread that will write the image
|
|
||||||
// buffer to the data stream.
|
|
||||||
|
|
||||||
auto WriteAndSend = [&Sensor, Stream=std::move(StreamPtr)](auto &InRHICmdList) mutable
|
|
||||||
{
|
|
||||||
/// @todo Can we make sure the sensor is not going to be destroyed?
|
|
||||||
if (!Sensor.IsPendingKill())
|
|
||||||
{
|
{
|
||||||
auto Buffer = Stream->PopBufferFromPool();
|
/// @todo Can we make sure the sensor is not going to be destroyed?
|
||||||
WritePixelsToBuffer(
|
if (!Sensor.IsPendingKill())
|
||||||
*Sensor.CaptureRenderTarget,
|
{
|
||||||
Buffer,
|
auto Buffer = Stream.PopBufferFromPool();
|
||||||
carla::sensor::SensorRegistry::get<TSensor *>::type::header_offset,
|
WritePixelsToBuffer(
|
||||||
InRHICmdList);
|
*Sensor.CaptureRenderTarget,
|
||||||
Stream->Send(Sensor, std::move(Buffer));
|
Buffer,
|
||||||
|
carla::sensor::SensorRegistry::get<TSensor *>::type::header_offset,
|
||||||
|
InRHICmdList);
|
||||||
|
Stream.Send(Sensor, std::move(Buffer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
);
|
||||||
|
|
||||||
ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER(
|
|
||||||
FWritePixels_SendPixelsInRenderThread,
|
|
||||||
std::function<void(FRHICommandListImmediate &)>, WriteAndSendFunction, std::move(WriteAndSend),
|
|
||||||
{
|
|
||||||
WriteAndSendFunction(RHICmdList);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,6 @@ enum class EVehicleInputPriority : uint8
|
||||||
|
|
||||||
inline static bool operator<=(EVehicleInputPriority Lhs, EVehicleInputPriority Rhs)
|
inline static bool operator<=(EVehicleInputPriority Lhs, EVehicleInputPriority Rhs)
|
||||||
{
|
{
|
||||||
constexpr auto Cast = [](auto e) { return static_cast<typename std::underlying_type<decltype(e)>::type>(e); };
|
auto Cast = [](auto e) { return static_cast<typename std::underlying_type<decltype(e)>::type>(e); };
|
||||||
return Cast(Lhs) <= Cast(Rhs);
|
return Cast(Lhs) <= Cast(Rhs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,9 +97,9 @@ AWheeledVehicleAIController::~AWheeledVehicleAIController() {}
|
||||||
// -- APlayerController --------------------------------------------------------
|
// -- APlayerController --------------------------------------------------------
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
void AWheeledVehicleAIController::Possess(APawn *aPawn)
|
void AWheeledVehicleAIController::OnPossess(APawn *aPawn)
|
||||||
{
|
{
|
||||||
Super::Possess(aPawn);
|
Super::OnPossess(aPawn);
|
||||||
|
|
||||||
if (IsPossessingAVehicle())
|
if (IsPossessingAVehicle())
|
||||||
{
|
{
|
||||||
|
@ -119,9 +119,9 @@ void AWheeledVehicleAIController::Possess(APawn *aPawn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AWheeledVehicleAIController::UnPossess()
|
void AWheeledVehicleAIController::OnUnPossess()
|
||||||
{
|
{
|
||||||
Super::UnPossess();
|
Super::OnUnPossess();
|
||||||
|
|
||||||
Vehicle = nullptr;
|
Vehicle = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,9 +44,9 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void Possess(APawn *aPawn) override;
|
void OnPossess(APawn *aPawn) override;
|
||||||
|
|
||||||
void UnPossess() override;
|
void OnUnPossess() override;
|
||||||
|
|
||||||
void Tick(float DeltaTime) override;
|
void Tick(float DeltaTime) override;
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@ AWalkerController::AWalkerController(const FObjectInitializer& ObjectInitializer
|
||||||
PrimaryActorTick.bCanEverTick = true;
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AWalkerController::Possess(APawn *InPawn)
|
void AWalkerController::OnPossess(APawn *InPawn)
|
||||||
{
|
{
|
||||||
Super::Possess(InPawn);
|
Super::OnPossess(InPawn);
|
||||||
|
|
||||||
auto *Character = Cast<ACharacter>(InPawn);
|
auto *Character = Cast<ACharacter>(InPawn);
|
||||||
if (Character == nullptr)
|
if (Character == nullptr)
|
||||||
|
|
|
@ -22,7 +22,7 @@ public:
|
||||||
|
|
||||||
AWalkerController(const FObjectInitializer& ObjectInitializer);
|
AWalkerController(const FObjectInitializer& ObjectInitializer);
|
||||||
|
|
||||||
void Possess(APawn *InPawn) override;
|
void OnPossess(APawn *InPawn) override;
|
||||||
|
|
||||||
void Tick(float DeltaSeconds) override;
|
void Tick(float DeltaSeconds) override;
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
source $(dirname "$0")/Environment.sh
|
source $(dirname "$0")/Environment.sh
|
||||||
|
|
||||||
export CC=clang-6.0
|
export CC=clang-7
|
||||||
export CXX=clang++-6.0
|
export CXX=clang++-7
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# -- Parse arguments -----------------------------------------------------------
|
# -- Parse arguments -----------------------------------------------------------
|
||||||
|
|
|
@ -24,7 +24,7 @@ set DO_COPY_FILES=true
|
||||||
set DO_TARBALL=true
|
set DO_TARBALL=true
|
||||||
set DO_CLEAN=false
|
set DO_CLEAN=false
|
||||||
|
|
||||||
set UE_VERSION=4.21
|
set UE_VERSION=4.22
|
||||||
|
|
||||||
:arg-parse
|
:arg-parse
|
||||||
if not "%1"=="" (
|
if not "%1"=="" (
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
# -- Set up environment --------------------------------------------------------
|
# -- Set up environment --------------------------------------------------------
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
command -v /usr/bin/clang++-6.0 >/dev/null 2>&1 || {
|
command -v /usr/bin/clang++-7 >/dev/null 2>&1 || {
|
||||||
echo >&2 "clang 6.0 is required, but it's not installed.";
|
echo >&2 "clang 7 is required, but it's not installed.";
|
||||||
echo >&2 "make sure you build Unreal Engine with clang 6.0 too.";
|
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
export CC=/usr/bin/clang-6.0
|
CXX_TAG=c7
|
||||||
export CXX=/usr/bin/clang++-6.0
|
export CC=/usr/bin/clang-7
|
||||||
|
export CXX=/usr/bin/clang++-7
|
||||||
|
|
||||||
source $(dirname "$0")/Environment.sh
|
source $(dirname "$0")/Environment.sh
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ pushd ${CARLA_BUILD_FOLDER} >/dev/null
|
||||||
# -- Get and compile libc++ ----------------------------------------------------
|
# -- Get and compile libc++ ----------------------------------------------------
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
LLVM_BASENAME=llvm-6.0-ex
|
LLVM_BASENAME=llvm-7.0
|
||||||
|
|
||||||
LLVM_INCLUDE=${PWD}/${LLVM_BASENAME}-install/include/c++/v1
|
LLVM_INCLUDE=${PWD}/${LLVM_BASENAME}-install/include/c++/v1
|
||||||
LLVM_LIBPATH=${PWD}/${LLVM_BASENAME}-install/lib
|
LLVM_LIBPATH=${PWD}/${LLVM_BASENAME}-install/lib
|
||||||
|
@ -34,9 +34,9 @@ else
|
||||||
|
|
||||||
log "Retrieving libc++."
|
log "Retrieving libc++."
|
||||||
|
|
||||||
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/llvm.git ${LLVM_BASENAME}-source
|
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/llvm.git ${LLVM_BASENAME}-source
|
||||||
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/libcxx.git ${LLVM_BASENAME}-source/projects/libcxx
|
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/libcxx.git ${LLVM_BASENAME}-source/projects/libcxx
|
||||||
git clone --depth=1 -b release_60 https://github.com/llvm-mirror/libcxxabi.git ${LLVM_BASENAME}-source/projects/libcxxabi
|
git clone --depth=1 -b release_70 https://github.com/llvm-mirror/libcxxabi.git ${LLVM_BASENAME}-source/projects/libcxxabi
|
||||||
|
|
||||||
log "Compiling libc++."
|
log "Compiling libc++."
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ unset LLVM_BASENAME
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
BOOST_VERSION=1.69.0
|
BOOST_VERSION=1.69.0
|
||||||
BOOST_BASENAME="boost-${BOOST_VERSION}"
|
BOOST_BASENAME="boost-${BOOST_VERSION}-${CXX_TAG}"
|
||||||
|
|
||||||
BOOST_INCLUDE=${PWD}/${BOOST_BASENAME}-install/include
|
BOOST_INCLUDE=${PWD}/${BOOST_BASENAME}-install/include
|
||||||
BOOST_LIBPATH=${PWD}/${BOOST_BASENAME}-install/lib
|
BOOST_LIBPATH=${PWD}/${BOOST_BASENAME}-install/lib
|
||||||
|
@ -81,16 +81,19 @@ else
|
||||||
|
|
||||||
rm -Rf ${BOOST_BASENAME}-source
|
rm -Rf ${BOOST_BASENAME}-source
|
||||||
|
|
||||||
|
BOOST_PACKAGE_BASENAME=boost_${BOOST_VERSION//./_}
|
||||||
|
|
||||||
log "Retrieving boost."
|
log "Retrieving boost."
|
||||||
wget "https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION//./_}.tar.gz"
|
wget "https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/${BOOST_PACKAGE_BASENAME}.tar.gz"
|
||||||
log "Extracting boost."
|
|
||||||
tar -xzf ${BOOST_BASENAME//[-.]/_}.tar.gz
|
log "Extracting boost for Python 2."
|
||||||
|
tar -xzf ${BOOST_PACKAGE_BASENAME}.tar.gz
|
||||||
mkdir -p ${BOOST_BASENAME}-install/include
|
mkdir -p ${BOOST_BASENAME}-install/include
|
||||||
mv ${BOOST_BASENAME//[-.]/_} ${BOOST_BASENAME}-source
|
mv ${BOOST_PACKAGE_BASENAME} ${BOOST_BASENAME}-source
|
||||||
|
|
||||||
pushd ${BOOST_BASENAME}-source >/dev/null
|
pushd ${BOOST_BASENAME}-source >/dev/null
|
||||||
|
|
||||||
BOOST_TOOLSET="clang-6.0"
|
BOOST_TOOLSET="clang-7.1"
|
||||||
BOOST_CFLAGS="-fPIC -std=c++14 -DBOOST_ERROR_CODE_HEADER_ONLY"
|
BOOST_CFLAGS="-fPIC -std=c++14 -DBOOST_ERROR_CODE_HEADER_ONLY"
|
||||||
|
|
||||||
py2="/usr/bin/env python2"
|
py2="/usr/bin/env python2"
|
||||||
|
@ -102,8 +105,7 @@ else
|
||||||
--with-libraries=python,filesystem \
|
--with-libraries=python,filesystem \
|
||||||
--with-python=${py2} --with-python-root=${py2_root}
|
--with-python=${py2} --with-python-root=${py2_root}
|
||||||
|
|
||||||
if ${TRAVIS}
|
if ${TRAVIS} ; then
|
||||||
then
|
|
||||||
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > ${HOME}/user-config.jam
|
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > ${HOME}/user-config.jam
|
||||||
else
|
else
|
||||||
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > project-config.jam
|
echo "using python : ${pyv} : ${py2_root}/bin/python2 ;" > project-config.jam
|
||||||
|
@ -116,9 +118,12 @@ else
|
||||||
# Get rid of python2 build artifacts completely & do a clean build for python3
|
# Get rid of python2 build artifacts completely & do a clean build for python3
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
rm -Rf ${BOOST_BASENAME}-source
|
rm -Rf ${BOOST_BASENAME}-source
|
||||||
tar -xzf ${BOOST_BASENAME//[-.]/_}.tar.gz
|
|
||||||
|
log "Extracting boost for Python 3."
|
||||||
|
tar -xzf ${BOOST_PACKAGE_BASENAME}.tar.gz
|
||||||
mkdir -p ${BOOST_BASENAME}-install/include
|
mkdir -p ${BOOST_BASENAME}-install/include
|
||||||
mv ${BOOST_BASENAME//[-.]/_} ${BOOST_BASENAME}-source
|
mv ${BOOST_PACKAGE_BASENAME} ${BOOST_BASENAME}-source
|
||||||
|
|
||||||
pushd ${BOOST_BASENAME}-source >/dev/null
|
pushd ${BOOST_BASENAME}-source >/dev/null
|
||||||
|
|
||||||
py3="/usr/bin/env python3"
|
py3="/usr/bin/env python3"
|
||||||
|
@ -130,8 +135,7 @@ else
|
||||||
--with-libraries=python \
|
--with-libraries=python \
|
||||||
--with-python=${py3} --with-python-root=${py3_root}
|
--with-python=${py3} --with-python-root=${py3_root}
|
||||||
|
|
||||||
if ${TRAVIS}
|
if ${TRAVIS} ; then
|
||||||
then
|
|
||||||
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > ${HOME}/user-config.jam
|
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > ${HOME}/user-config.jam
|
||||||
else
|
else
|
||||||
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > project-config.jam
|
echo "using python : ${pyv} : ${py3_root}/bin/python3 ;" > project-config.jam
|
||||||
|
@ -143,7 +147,7 @@ else
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
rm -Rf ${BOOST_BASENAME}-source
|
rm -Rf ${BOOST_BASENAME}-source
|
||||||
rm ${BOOST_BASENAME//[-.]/_}.tar.gz
|
rm ${BOOST_PACKAGE_BASENAME}.tar.gz
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -154,7 +158,7 @@ unset BOOST_BASENAME
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
RPCLIB_PATCH=v2.2.1_c1
|
RPCLIB_PATCH=v2.2.1_c1
|
||||||
RPCLIB_BASENAME=rpclib-${RPCLIB_PATCH}
|
RPCLIB_BASENAME=rpclib-${RPCLIB_PATCH}-${CXX_TAG}
|
||||||
|
|
||||||
RPCLIB_LIBCXX_INCLUDE=${PWD}/${RPCLIB_BASENAME}-libcxx-install/include
|
RPCLIB_LIBCXX_INCLUDE=${PWD}/${RPCLIB_BASENAME}-libcxx-install/include
|
||||||
RPCLIB_LIBCXX_LIBPATH=${PWD}/${RPCLIB_BASENAME}-libcxx-install/lib
|
RPCLIB_LIBCXX_LIBPATH=${PWD}/${RPCLIB_BASENAME}-libcxx-install/lib
|
||||||
|
@ -221,7 +225,8 @@ unset RPCLIB_BASENAME
|
||||||
# -- Get GTest and compile it with libc++ --------------------------------------
|
# -- Get GTest and compile it with libc++ --------------------------------------
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
GTEST_BASENAME=googletest-1.8.0-ex
|
GTEST_VERSION=1.8.0
|
||||||
|
GTEST_BASENAME=gtest-${GTEST_VERSION}-${CXX_TAG}
|
||||||
|
|
||||||
GTEST_LIBCXX_INCLUDE=${PWD}/${GTEST_BASENAME}-libcxx-install/include
|
GTEST_LIBCXX_INCLUDE=${PWD}/${GTEST_BASENAME}-libcxx-install/include
|
||||||
GTEST_LIBCXX_LIBPATH=${PWD}/${GTEST_BASENAME}-libcxx-install/lib
|
GTEST_LIBCXX_LIBPATH=${PWD}/${GTEST_BASENAME}-libcxx-install/lib
|
||||||
|
@ -238,7 +243,7 @@ else
|
||||||
|
|
||||||
log "Retrieving Google Test."
|
log "Retrieving Google Test."
|
||||||
|
|
||||||
git clone --depth=1 -b release-1.8.0 https://github.com/google/googletest.git ${GTEST_BASENAME}-source
|
git clone --depth=1 -b release-${GTEST_VERSION} https://github.com/google/googletest.git ${GTEST_BASENAME}-source
|
||||||
|
|
||||||
log "Building Google Test with libc++."
|
log "Building Google Test with libc++."
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,14 @@ launch: LibCarla
|
||||||
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --launch
|
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --launch
|
||||||
|
|
||||||
package: PythonAPI
|
package: PythonAPI
|
||||||
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --ue-version 4.21
|
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --ue-version 4.22
|
||||||
|
|
||||||
docs:
|
docs:
|
||||||
@doxygen
|
@doxygen
|
||||||
@echo "Documentation index at ./Doxygen/html/index.html"
|
@echo "Documentation index at ./Doxygen/html/index.html"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --clean --ue-version 4.21
|
@"${CARLA_BUILD_TOOLS_FOLDER}/Package.bat" --clean --ue-version 4.22
|
||||||
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --clean
|
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildCarlaUE4.bat" --clean
|
||||||
|
|
||||||
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildPythonAPI.bat" --clean
|
@"${CARLA_BUILD_TOOLS_FOLDER}/BuildPythonAPI.bat" --clean
|
||||||
|
|
Loading…
Reference in New Issue