Compare commits

...

9 commits

113 changed files with 733 additions and 60 deletions

50
docs/README.md Normal file
View file

@ -0,0 +1,50 @@
# Todo
Here some ideas for improving this tiny engine:
## Rendering
- [ ] replace the OpenGL renderer with a Vulkan backend
- [ ] add animatable sprites (access to UV mapping and tiling)
- [ ] add a SDF based renderer (parametric tiles and font rendering)
## Game Support
- [ ] audio!
- [ ] some minimal animation system with tweening with different f-curves
## System Level
- [ ] add a `Asset` handler to load cache and manage assets
- [ ] introspection of file system if we load assset
## Design
- [ ] replace some of the 'unkown source' assets
## Build / Dev Support
- [ ] add a test rig either with Snitch or Catch2
- [ ] write some reasonable testcases
- [ ] add CPU and GPU benchmarks to address various issues
# Issues
```sh
Performance counter stats for 'bin/paradiso_pong':
555,35 msec task-clock:u # 0,042 CPUs utilized
0 context-switches:u # 0,000 /sec
0 cpu-migrations:u # 0,000 /sec
4.072 page-faults:u # 7,332 K/sec
319.484.735 cycles:u # 0,575 GHz
358.165.995 instructions:u # 1,12 insn per cycle
86.037.942 branches:u # 154,926 M/sec
2.469.068 branch-misses:u # 2,87% of all branches
13,092775373 seconds time elapsed
0,311565000 seconds user
0,247491000 seconds sys
```
above run with `perf stat bin/paradiso_pong` shows some really bad performance issues.

View file

@ -1,7 +1,7 @@
/**
* paradiso - Paradigmen der Softwareentwicklung
*
* (c) Copyright 2023 Hartmut Seichter
* (c) Copyright 2023-2024 Hartmut Seichter
*
*/
@ -16,7 +16,6 @@
#include <unordered_map>
#include <iomanip>
#include <iostream>
struct PongStage {
@ -86,7 +85,7 @@ struct PongPaddle {
velocity_horizontal *= whoopiness;
sprite.pivot.x() += velocity_horizontal;
std::clamp(sprite.pivot.x(), -0.5f, 0.5f);
sprite.pivot.x() = std::clamp(sprite.pivot.x(), -0.5f, 0.5f);
// update shader uniforms
shader.set_uniform("pivot", sprite.pivot);
@ -151,7 +150,7 @@ struct PongBall {
void draw(const paradiso::Shader& shader) {
std::clamp(sprite.pivot.x(), -0.5f, 0.5f);
sprite.pivot.x() = std::clamp(sprite.pivot.x(), -0.5f, 0.5f);
// update shader uniforms
shader.set_uniform("pivot", sprite.pivot);
@ -166,6 +165,9 @@ struct PongBall {
paradiso::Renderer renderer{};
constexpr void push(const auto& impulse) noexcept { velocity += impulse; }
constexpr void whoop(const auto& whoopiness) noexcept { velocity *= whoopiness; }
};
auto main() -> int {
@ -234,6 +236,19 @@ auto main() -> int {
ball.sprite.pivot.x() = 0.0f;
ball.sprite.pivot.y() = 0.9f;
}
// speed adjust
if (w.keyboard_input().top().key == 'N') {
std::cout << "Speed Up!\n";
ball.push(paradiso::Vector2<float>::make(0.f,0.01f));
} else if (w.keyboard_input().top().key == 'M') {
ball.push(paradiso::Vector2<float>::make(0.f,-0.01f));
std::cout << "Speed Lower!\n";
}
}
ball.interact(stage);
@ -251,4 +266,4 @@ auto main() -> int {
};
return 0;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -0,0 +1,14 @@
<TextureAtlas imagePath="sheet.png">
<SubTexture name="planeBlue1.png" x="0" y="73" width="88" height="73"/>
<SubTexture name="planeBlue2.png" x="0" y="0" width="88" height="73"/>
<SubTexture name="planeBlue3.png" x="0" y="365" width="88" height="73"/>
<SubTexture name="planeGreen1.png" x="88" y="219" width="88" height="73"/>
<SubTexture name="planeGreen2.png" x="88" y="146" width="88" height="73"/>
<SubTexture name="planeGreen3.png" x="88" y="73" width="88" height="73"/>
<SubTexture name="planeRed1.png" x="88" y="0" width="88" height="73"/>
<SubTexture name="planeRed2.png" x="0" y="438" width="88" height="73"/>
<SubTexture name="planeRed3.png" x="88" y="292" width="88" height="73"/>
<SubTexture name="planeYellow1.png" x="0" y="292" width="88" height="73"/>
<SubTexture name="planeYellow2.png" x="0" y="219" width="88" height="73"/>
<SubTexture name="planeYellow3.png" x="0" y="146" width="88" height="73"/>
</TextureAtlas>

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

View file

@ -0,0 +1,81 @@
<TextureAtlas imagePath="sheet.png">
<SubTexture name="UIbg.png" x="0" y="986" width="264" height="264"/>
<SubTexture name="background.png" x="0" y="355" width="800" height="480"/>
<SubTexture name="buttonLarge.png" x="0" y="1250" width="196" height="70"/>
<SubTexture name="buttonSmall.png" x="0" y="1320" width="136" height="80"/>
<SubTexture name="groundDirt.png" x="0" y="0" width="808" height="71"/>
<SubTexture name="groundGrass.png" x="0" y="142" width="808" height="71"/>
<SubTexture name="groundIce.png" x="0" y="71" width="808" height="71"/>
<SubTexture name="groundRock.png" x="0" y="284" width="808" height="71"/>
<SubTexture name="groundSnow.png" x="0" y="213" width="808" height="71"/>
<SubTexture name="letterA.png" x="412" y="835" width="61" height="64"/>
<SubTexture name="letterB.png" x="487" y="1537" width="50" height="66"/>
<SubTexture name="letterC.png" x="460" y="977" width="52" height="66"/>
<SubTexture name="letterD.png" x="432" y="1613" width="54" height="66"/>
<SubTexture name="letterE.png" x="511" y="1965" width="45" height="64"/>
<SubTexture name="letterF.png" x="512" y="963" width="44" height="64"/>
<SubTexture name="letterG.png" x="460" y="1107" width="52" height="66"/>
<SubTexture name="letterH.png" x="473" y="835" width="51" height="64"/>
<SubTexture name="letterI.png" x="524" y="835" width="22" height="64"/>
<SubTexture name="letterJ.png" x="512" y="1027" width="42" height="66"/>
<SubTexture name="letterK.png" x="432" y="1821" width="53" height="64"/>
<SubTexture name="letterL.png" x="512" y="899" width="44" height="64"/>
<SubTexture name="letterM.png" x="392" y="1967" width="66" height="64"/>
<SubTexture name="letterN.png" x="432" y="1679" width="53" height="64"/>
<SubTexture name="letterO.png" x="418" y="1284" width="60" height="66"/>
<SubTexture name="letterP.png" x="489" y="1427" width="48" height="65"/>
<SubTexture name="letterQ.png" x="418" y="1205" width="60" height="79"/>
<SubTexture name="letterR.png" x="478" y="1249" width="51" height="65"/>
<SubTexture name="letterS.png" x="511" y="1899" width="46" height="66"/>
<SubTexture name="letterT.png" x="460" y="1043" width="52" height="64"/>
<SubTexture name="letterU.png" x="485" y="1757" width="51" height="66"/>
<SubTexture name="letterV.png" x="400" y="913" width="61" height="64"/>
<SubTexture name="letterW.png" x="136" y="1320" width="76" height="64"/>
<SubTexture name="letterX.png" x="418" y="1409" width="58" height="64"/>
<SubTexture name="letterY.png" x="432" y="1473" width="57" height="64"/>
<SubTexture name="letterZ.png" x="486" y="1613" width="50" height="64"/>
<SubTexture name="medalBronze.png" x="0" y="1400" width="114" height="119"/>
<SubTexture name="medalGold.png" x="0" y="1519" width="114" height="119"/>
<SubTexture name="medalSilver.png" x="0" y="1638" width="114" height="119"/>
<SubTexture name="number0.png" x="432" y="1743" width="53" height="78"/>
<SubTexture name="number1.png" x="512" y="1093" width="37" height="76"/>
<SubTexture name="number2.png" x="477" y="1350" width="51" height="77"/>
<SubTexture name="number3.png" x="485" y="1679" width="51" height="78"/>
<SubTexture name="number4.png" x="432" y="1537" width="55" height="76"/>
<SubTexture name="number5.png" x="485" y="1823" width="50" height="76"/>
<SubTexture name="number6.png" x="432" y="1885" width="53" height="77"/>
<SubTexture name="number7.png" x="478" y="1173" width="51" height="76"/>
<SubTexture name="number8.png" x="461" y="899" width="51" height="78"/>
<SubTexture name="number9.png" x="458" y="1962" width="53" height="77"/>
<SubTexture name="planeBlue1.png" x="330" y="1371" width="88" height="73"/>
<SubTexture name="planeBlue2.png" x="372" y="1132" width="88" height="73"/>
<SubTexture name="planeBlue3.png" x="222" y="1562" width="88" height="73"/>
<SubTexture name="planeGreen1.png" x="114" y="1639" width="88" height="73"/>
<SubTexture name="planeGreen2.png" x="216" y="1951" width="88" height="73"/>
<SubTexture name="planeGreen3.png" x="222" y="1489" width="88" height="73"/>
<SubTexture name="planeRed1.png" x="216" y="1878" width="88" height="73"/>
<SubTexture name="planeRed2.png" x="372" y="1059" width="88" height="73"/>
<SubTexture name="planeRed3.png" x="372" y="986" width="88" height="73"/>
<SubTexture name="planeYellow1.png" x="304" y="1967" width="88" height="73"/>
<SubTexture name="planeYellow2.png" x="330" y="1298" width="88" height="73"/>
<SubTexture name="planeYellow3.png" x="330" y="1225" width="88" height="73"/>
<SubTexture name="puffLarge.png" x="114" y="1712" width="42" height="35"/>
<SubTexture name="puffSmall.png" x="196" y="1250" width="25" height="21"/>
<SubTexture name="rock.png" x="114" y="1400" width="108" height="239"/>
<SubTexture name="rockDown.png" x="324" y="1489" width="108" height="239"/>
<SubTexture name="rockGrass.png" x="0" y="1757" width="108" height="239"/>
<SubTexture name="rockGrassDown.png" x="264" y="986" width="108" height="239"/>
<SubTexture name="rockIce.png" x="216" y="1639" width="108" height="239"/>
<SubTexture name="rockIceDown.png" x="222" y="1250" width="108" height="239"/>
<SubTexture name="rockSnow.png" x="324" y="1728" width="108" height="239"/>
<SubTexture name="rockSnowDown.png" x="108" y="1757" width="108" height="239"/>
<SubTexture name="starBronze.png" x="170" y="1996" width="39" height="37"/>
<SubTexture name="starGold.png" x="369" y="1444" width="39" height="37"/>
<SubTexture name="starSilver.png" x="330" y="1444" width="39" height="37"/>
<SubTexture name="tap.png" x="156" y="1712" width="40" height="40"/>
<SubTexture name="tapLeft.png" x="0" y="1996" width="85" height="42"/>
<SubTexture name="tapRight.png" x="85" y="1996" width="85" height="42"/>
<SubTexture name="tapTick.png" x="418" y="1350" width="59" height="59"/>
<SubTexture name="textGameOver.png" x="0" y="835" width="412" height="78"/>
<SubTexture name="textGetReady.png" x="0" y="913" width="400" height="73"/>
</TextureAtlas>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

View file

@ -0,0 +1,14 @@
###############################################################################
Tappy Plane by Kenney Vleugels (www.kenney.nl)
------------------------------
License (CC0)
http://creativecommons.org/publicdomain/zero/1.0/
You may use these graphics in personal and commercial projects.
Credit (Kenney or www.kenney.nl) would be nice but is not mandatory.
###############################################################################

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View file

@ -1,14 +1,10 @@
/**
* paradiso - Paradigmen der Softwareentwicklung
*
* (c) Copyright 2023 Hartmut Seichter, Robin Rottstädt, brxxh (Hannes Brothuhn)
* (c) Copyright 2023-2024 Hartmut Seichter, Robin Rottstädt, brxxh (Hannes Brothuhn)
*
*/
#include <bits/iterator_concepts.h>
#include <cstdio>
#include <cstdlib>
#include <ostream>
#include <paradiso/bitmap.hpp>
#include <paradiso/bitmap_io.hpp>
#include <paradiso/context.hpp>
@ -20,14 +16,7 @@
#include <paradiso/window.hpp>
#include <chrono>
#include <iomanip>
#include <iostream>
#include <thread>
#include <unordered_map>
#include <cstdlib>
#include <ctime>
// #include "lib/image_loader.hpp"
const int frame_rate = 60;
bool game_over = false;
@ -115,7 +104,7 @@ struct Pipe {
.scale = {paradiso::Vector2<float>::make(((500.0f - (500.0f - 52.0f)) / 500.0f) * 2.25f, ((700.0f - (700.0f - 320.0f)) / 700.0f) * 2.25f)}};
paused = true;
}
void update() {
@ -163,7 +152,7 @@ struct Pipe {
shader.set_uniform("pivot", pipe_bottom.pivot);
shader.set_uniform("scale", pipe_bottom.scale);
renderer1.draw(pipe_bottom, shader);
shader.set_uniform("pivot", pipe_top.pivot);
shader.set_uniform("scale", pipe_top.scale);
shader.set_uniform("rotation", pipe_top.rotation);
@ -302,12 +291,12 @@ struct QuickWings {
if (game_over == true) {
paused = true;
}
// Stop game
if (paused) {
return;
}
else {
else {
// Apply gravity
velocity += gravity;
@ -406,7 +395,7 @@ struct Message {
messageSprite.pivot.y() = pos;
}
}
void on_keyboard(const paradiso::Window::KeyboardInputStack& input) {
if (input.size()) {
start = true;
@ -517,7 +506,7 @@ auto main() -> int {
grass.draw(shader);
message.draw(shader);
if (game_over == true) {
if (game_over == true) {
gameover.draw(shader);
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -59,4 +59,4 @@ struct AABB final {
} // namespace paradiso
#endif
#endif

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -106,4 +106,4 @@ struct Bitmap final {
};
} // namespace paradiso
#endif
#endif

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -53,4 +53,4 @@ struct BitmapIO {
} // namespace paradiso
#endif
#endif

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -71,4 +71,4 @@ struct Rectangle final {
};
} // namespace paradiso
#endif
#endif

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -41,4 +41,4 @@
#endif
#endif

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 Hartmut Seichter
* Copyright 2023-2024 Hartmut Seichter
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -32,7 +32,7 @@ namespace paradiso {
template <std::size_t R, std::size_t C, typename Scalar, bool RowMajor = false>
struct Matrix : MatrixBase<Scalar, Matrix<R, C, Scalar>> {
Scalar data[R * C]{};
Scalar data[R * C]{};
static constexpr std::size_t rows{R};
static constexpr std::size_t cols{C};

Some files were not shown because too many files have changed in this diff Show more