Welcome to the GlPortal issue tracker.

ID Due In Version Assigned To Category Task Type Severity Summary Status Progress
176 1 Henry Hirsch Engine Task Low Create meditation mini-game Assigned
Task Description

For a proof of concept I want to create a meditation mini game.

It is multiple choice text adventure. You are presented with challenging situations (queue at the supermarket, boss yelling at you) and can decide if you want to keep calm and watch your breath or get angry and follow your impulses.

The final situation is your own death.

175 1 Henry Hirsch Backend / Core Task Low Add sequences Assigned
Task Description

Add a new file format and files for sequences where screens can be used as template for a menu or a sequence of menus.

Menu items can either lead to another permutation of the screen or a new game state.


            <variable name="content">
                You are standing at the counter what do you want to do
            <variable name="option" target="game-over-screen">
                Go crazy
            <variable name="option" target="win-screen">
                Stay calm
174 Backend / Core Epic Low Segfault when quitting after playing New
Task Description

/bin/sh: line 1: 12025 Segmentation fault      (core dumped) ./glportal --datadir /home/henry/system/projects/glportal/radix/data


169 Backend / Core Task Medium Fix Memory Leaks New
Task Description


  1. ==28378== Memcheck, a memory error detector

  2. ==28378== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.

  3. ==28378== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info

  4. ==28378== Command: ./glportal --datadir /home/geert/glPortal/data

  5. ==28378==

  6. ==28378== Syscall param writev(vector[...]) points to uninitialised byte(s)

  7. ==28378==    at 0x82EEB7D: ??? (in /usr/lib/

  8. ==28378==    by 0x9635BAC: ??? (in /usr/lib/

  9. ==28378==    by 0x9635FAC: ??? (in /usr/lib/

  10. ==28378==    by 0x963602C: xcb_writev (in /usr/lib/

  11. ==28378==    by 0x881F18D: _XSend (in /usr/lib/

  12. ==28378==    by 0x881F681: _XReply (in /usr/lib/

  13. ==28378==    by 0x880A406: XInternAtom (in /usr/lib/

  14. ==28378==    by 0x5DA375F: SetWindowBordered (SDL_x11window.c:320)

  15. ==28378==    by 0x5DA375F: X11_CreateWindow (SDL_x11window.c:491)

  16. ==28378==    by 0x5D90C08: SDL_CreateWindow_REAL (SDL_video.c:1403)

  17. ==28378==    by 0x5D90879: ShouldUseTextureFramebuffer (SDL_video.c:206)

  18. ==28378==    by 0x5D90879: SDL_VideoInit_REAL (SDL_video.c:525)

  19. ==28378==    by 0x5CCBB66: SDL_InitSubSystem_REAL (SDL.c:173)

  20. ==28378==    by 0x5CCBB66: SDL_Init_REAL (SDL.c:244)

  21. ==28378==    by 0x449954: radix::Window::create(char const*) (Window.cpp:59)

  22. ==28378==  Address 0x9d09c73 is 35 bytes inside a block of size 16,384 alloc'd

  23. ==28378==    at 0x4C2CA40: calloc (in /usr/lib/valgrind/

  24. ==28378==    by 0x880F4E1: XOpenDisplay (in /usr/lib/

  25. ==28378==    by 0x5DA1E34: X11_CreateDevice (SDL_x11video.c:186)

  26. ==28378==    by 0x5D90830: SDL_VideoInit_REAL (SDL_video.c:486)

  27. ==28378==    by 0x5CCBB66: SDL_InitSubSystem_REAL (SDL.c:173)

  28. ==28378==    by 0x5CCBB66: SDL_Init_REAL (SDL.c:244)

  29. ==28378==    by 0x449954: radix::Window::create(char const*) (Window.cpp:59)

  30. ==28378==    by 0x43B018: glPortal::Game::Game() (Game.cpp:24)

  31. ==28378==    by 0x4302E8: main (Main.cpp:18)

  32. ==28378==

  33. ==28378== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s)

  34. ==28378==    at 0x6006E50: sendmsg (in /usr/lib/

  35. ==28378==    by 0x1012E5E6: ??? (in /usr/lib/

  36. ==28378==    by 0x1012A448: ??? (in /usr/lib/

  37. ==28378==    by 0x100C2B0D: ??? (in /usr/lib/

  38. ==28378==    by 0x115C8165: ??? (in /usr/lib/

  39. ==28378==    by 0x115C0903: ??? (in /usr/lib/

  40. ==28378==    by 0x115C2562: ??? (in /usr/lib/

  41. ==28378==    by 0x115C2D37: ??? (in /usr/lib/

  42. ==28378==    by 0x101178D9: ??? (in /usr/lib/

  43. ==28378==    by 0x115BEEC7: ??? (in /usr/lib/

  44. ==28378==    by 0x115BFB08: ??? (in /usr/lib/

  45. ==28378==    by 0x100C2DB5: ??? (in /usr/lib/

  46. ==28378==  Address 0xffeffed3c is on thread 1's stack

  47. ==28378==

  48. V          Window  OpenGL 3.2

  49. D  GlGwenRenderer  LoadTexture /home/geert/glPortal/data/gui/DefaultSkin.png, id 1

  50. ==28378== Conditional jump or move depends on uninitialised value(s)

  51. ==28378==    at 0x483249: SetScale (Canvas.cpp:98)

  52. ==28378==    by 0x483249: Gwen::Controls::Canvas::Canvas(Gwen::Skin::Base*) (Canvas.cpp:25)

  53. ==28378==    by 0x44B36A: make_unique<Gwen::Controls::Canvas, Gwen::Skin::TexturedBase*> (unique_ptr.h:787)

  54. ==28378==    by 0x44B36A: radix::Window::create(char const*) (Window.cpp:130)

  55. ==28378==    by 0x43B018: glPortal::Game::Game() (Game.cpp:24)

  56. ==28378==    by 0x4302E8: main (Main.cpp:18)

  57. ==28378==

  58. ==28378== Conditional jump or move depends on uninitialised value(s)

  59. ==28378==    at 0x48324B: SetScale (Canvas.cpp:98)

  60. ==28378==    by 0x48324B: Gwen::Controls::Canvas::Canvas(Gwen::Skin::Base*) (Canvas.cpp:25)

  61. ==28378==    by 0x44B36A: make_unique<Gwen::Controls::Canvas, Gwen::Skin::TexturedBase*> (unique_ptr.h:787)

  62. ==28378==    by 0x44B36A: radix::Window::create(char const*) (Window.cpp:130)

  63. ==28378==    by 0x43B018: glPortal::Game::Game() (Game.cpp:24)

  64. ==28378==    by 0x4302E8: main (Main.cpp:18)

  65. ==28378==

  66. D  GlGwenRenderer  Initialize

  67. D  GlGwenRenderer  LoadTexture /home/geert/glPortal/data/gui/DebugFont.png, id 2

  68. I    SoundManager  SDL Audio system initialized

  69. V    SoundManager  fully initialized

  70. D  MaterialLoader  concrete/wall00: load concrete/wall00.png

  71. D  MaterialLoader  concrete/wall00: load concrete/wall00xn.jpg

  72. D  MaterialLoader  concrete/wall00: load concrete/wall00xs.jpg

  73. D  MaterialLoader  metal/tiles00x3: load metal/tiles00x3.jpg

  74. D  MaterialLoader  metal/tiles00x3: load metal/tiles00x3n.jpg

  75. D  MaterialLoader  metal/tiles00x3: load metal/tiles00x3s.jpg

  76. D  MaterialLoader  door/door: load door/door00.png

  77. D  MaterialLoader  models/light-fixture: load models/light-fixture.jpg

  78. D  MaterialLoader  door/door: load door/door00.png

  79. I    XmlMapLoader  Map /home/geert/glPortal/data/maps/n1.xml loaded

  80. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.vert: vertex shader compiled

  81. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.frag: fragment shader compiled

  82. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.frag: program linked

  83. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.frag: progam validated

  84. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.vert: vertex shader compiled

  85. D    ShaderLoader  /home/geert/glPortal/data/shaders/metal.frag: fragment shader compiled

  86. D    ShaderLoader  /home/geert/glPortal/data/shaders/metal.frag: program linked

  87. D    ShaderLoader  /home/geert/glPortal/data/shaders/metal.frag: progam validated

  88. ==28378== Conditional jump or move depends on uninitialised value(s)

  89. ==28378==    at 0x4347D3: glPortal::GameRenderer::renderScene(radix::RenderContext&) (GameRenderer.cpp:75)

  90. ==28378==    by 0x434BE4: glPortal::GameRenderer::render(double, radix::Camera const&) (GameRenderer.cpp:71)

  91. ==28378==    by 0x43A2E3: glPortal::Game::render() (Game.cpp:77)

  92. ==28378==    by 0x430308: main (Main.cpp:22)

  93. ==28378==

  94. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.vert: vertex shader compiled

  95. D    ShaderLoader  /home/geert/glPortal/data/shaders/whitefill.frag: fragment shader compiled

  96. D    ShaderLoader  /home/geert/glPortal/data/shaders/whitefill.frag: program linked

  97. D    ShaderLoader  /home/geert/glPortal/data/shaders/whitefill.frag: progam validated

  98. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.vert: vertex shader compiled

  99. D    ShaderLoader  /home/geert/glPortal/data/shaders/unshaded.frag: fragment shader compiled

  100. D    ShaderLoader  /home/geert/glPortal/data/shaders/unshaded.frag: program linked

  101. D    ShaderLoader  /home/geert/glPortal/data/shaders/unshaded.frag: progam validated

  102. D    ShaderLoader  /home/geert/glPortal/data/shaders/diffuse.vert: vertex shader compiled

  103. D    ShaderLoader  /home/geert/glPortal/data/shaders/text.frag: fragment shader compiled

  104. D    ShaderLoader  /home/geert/glPortal/data/shaders/text.frag: program linked

  105. D    ShaderLoader  /home/geert/glPortal/data/shaders/text.frag: progam validated

  106. ==28378== Invalid read of size 8

  107. ==28378==    at 0x471918: operator() (PhysicsSystem.cpp:51)

  108. ==28378==    by 0x471918: std::_Function_handler<void (radix::Event const&), radix::PhysicsSystem::PhysicsSystem(radix::World&)::{lambda(radix::Event const&)#2}>::_M_invoke(std::_Any_data const&, radix::Event const&) (functional:1740)

  109. ==28378==    by 0x45DF30: operator() (functional:2136)

  110. ==28378==    by 0x45DF30: radix::EventDispatcher::dispatch(radix::Event const&) (EventDispatcher.cpp:14)

  111. ==28378==    by 0x475641: radix::Entity::clearComponents() (Entity.cpp:30)

  112. ==28378==    by 0x45A062: ~Entity (Entity.hpp:92)

  113. ==28378==    by 0x45A062: destroy<radix::Entity> (new_allocator.h:124)

  114. ==28378==    by 0x45A062: destroy<radix::Entity> (alloc_traits.h:467)

  115. ==28378==    by 0x45A062: std::__cxx11::_List_base<radix::Entity, std::allocator<radix::Entity> >::_M_clear() (list.tcc:76)

  116. ==28378==    by 0x457F26: ~_List_base (stl_list.h:442)

  117. ==28378==    by 0x457F26: ~list (stl_list.h:503)

  118. ==28378==    by 0x457F26: ~EntityManager (EntityManager.hpp:16)

  119. ==28378==    by 0x457F26: radix::World::~World() (World.cpp:105)

  120. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  121. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  122. ==28378==    by 0x43032A: main (Main.cpp:18)

  123. ==28378==  Address 0x12d7e118 is 104 bytes inside a block of size 120 free'd

  124. ==28378==    at 0x4C2C20A: operator delete(void*) (in /usr/lib/valgrind/

  125. ==28378==    by 0x457DD9: operator() (unique_ptr.h:76)

  126. ==28378==    by 0x457DD9: ~unique_ptr (unique_ptr.h:236)

  127. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System> > (stl_construct.h:93)

  128. ==28378==    by 0x457DD9: __destroy<std::unique_ptr<radix::System>*> (stl_construct.h:103)

  129. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*> (stl_construct.h:126)

  130. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*, std::unique_ptr<radix::System> > (stl_construct.h:151)

  131. ==28378==    by 0x457DD9: ~vector (stl_vector.h:426)

  132. ==28378==    by 0x457DD9: radix::World::~World() (World.cpp:105)

  133. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  134. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  135. ==28378==    by 0x43032A: main (Main.cpp:18)

  136. ==28378==  Block was alloc'd at

  137. ==28378==    at 0x4C2B1EC: operator new(unsigned long) (in /usr/lib/valgrind/

  138. ==28378==    by 0x43A79B: addSystem<radix::PhysicsSystem> (World.hpp:201)

  139. ==28378==    by 0x43A79B: glPortal::Game::init() (Game.cpp:49)

  140. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  141. ==28378==    by 0x4302E8: main (Main.cpp:18)

  142. ==28378==

  143. ==28378== Invalid read of size 8

  144. ==28378==    at 0x47192D: operator() (PhysicsSystem.cpp:52)

  145. ==28378==    by 0x47192D: std::_Function_handler<void (radix::Event const&), radix::PhysicsSystem::PhysicsSystem(radix::World&)::{lambda(radix::Event const&)#2}>::_M_invoke(std::_Any_data const&, radix::Event const&) (functional:1740)

  146. ==28378==    by 0x45DF30: operator() (functional:2136)

  147. ==28378==    by 0x45DF30: radix::EventDispatcher::dispatch(radix::Event const&) (EventDispatcher.cpp:14)

  148. ==28378==    by 0x475641: radix::Entity::clearComponents() (Entity.cpp:30)

  149. ==28378==    by 0x45A062: ~Entity (Entity.hpp:92)

  150. ==28378==    by 0x45A062: destroy<radix::Entity> (new_allocator.h:124)

  151. ==28378==    by 0x45A062: destroy<radix::Entity> (alloc_traits.h:467)

  152. ==28378==    by 0x45A062: std::__cxx11::_List_base<radix::Entity, std::allocator<radix::Entity> >::_M_clear() (list.tcc:76)

  153. ==28378==    by 0x457F26: ~_List_base (stl_list.h:442)

  154. ==28378==    by 0x457F26: ~list (stl_list.h:503)

  155. ==28378==    by 0x457F26: ~EntityManager (EntityManager.hpp:16)

  156. ==28378==    by 0x457F26: radix::World::~World() (World.cpp:105)

  157. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  158. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  159. ==28378==    by 0x43032A: main (Main.cpp:18)

  160. ==28378==  Address 0x12d7e118 is 104 bytes inside a block of size 120 free'd

  161. ==28378==    at 0x4C2C20A: operator delete(void*) (in /usr/lib/valgrind/

  162. ==28378==    by 0x457DD9: operator() (unique_ptr.h:76)

  163. ==28378==    by 0x457DD9: ~unique_ptr (unique_ptr.h:236)

  164. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System> > (stl_construct.h:93)

  165. ==28378==    by 0x457DD9: __destroy<std::unique_ptr<radix::System>*> (stl_construct.h:103)

  166. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*> (stl_construct.h:126)

  167. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*, std::unique_ptr<radix::System> > (stl_construct.h:151)

  168. ==28378==    by 0x457DD9: ~vector (stl_vector.h:426)

  169. ==28378==    by 0x457DD9: radix::World::~World() (World.cpp:105)

  170. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  171. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  172. ==28378==    by 0x43032A: main (Main.cpp:18)

  173. ==28378==  Block was alloc'd at

  174. ==28378==    at 0x4C2B1EC: operator new(unsigned long) (in /usr/lib/valgrind/

  175. ==28378==    by 0x43A79B: addSystem<radix::PhysicsSystem> (World.hpp:201)

  176. ==28378==    by 0x43A79B: glPortal::Game::init() (Game.cpp:49)

  177. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  178. ==28378==    by 0x4302E8: main (Main.cpp:18)

  179. ==28378==

  180. ==28378== Invalid read of size 8

  181. ==28378==    at 0x47194B: operator() (PhysicsSystem.cpp:48)

  182. ==28378==    by 0x47194B: std::_Function_handler<void (radix::Event const&), radix::PhysicsSystem::PhysicsSystem(radix::World&)::{lambda(radix::Event const&)#2}>::_M_invoke(std::_Any_data const&, radix::Event const&) (functional:1740)

  183. ==28378==    by 0x45DF30: operator() (functional:2136)

  184. ==28378==    by 0x45DF30: radix::EventDispatcher::dispatch(radix::Event const&) (EventDispatcher.cpp:14)

  185. ==28378==    by 0x475641: radix::Entity::clearComponents() (Entity.cpp:30)

  186. ==28378==    by 0x45A062: ~Entity (Entity.hpp:92)

  187. ==28378==    by 0x45A062: destroy<radix::Entity> (new_allocator.h:124)

  188. ==28378==    by 0x45A062: destroy<radix::Entity> (alloc_traits.h:467)

  189. ==28378==    by 0x45A062: std::__cxx11::_List_base<radix::Entity, std::allocator<radix::Entity> >::_M_clear() (list.tcc:76)

  190. ==28378==    by 0x457F26: ~_List_base (stl_list.h:442)

  191. ==28378==    by 0x457F26: ~list (stl_list.h:503)

  192. ==28378==    by 0x457F26: ~EntityManager (EntityManager.hpp:16)

  193. ==28378==    by 0x457F26: radix::World::~World() (World.cpp:105)

  194. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  195. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  196. ==28378==    by 0x43032A: main (Main.cpp:18)

  197. ==28378==  Address 0x12d7e118 is 104 bytes inside a block of size 120 free'd

  198. ==28378==    at 0x4C2C20A: operator delete(void*) (in /usr/lib/valgrind/

  199. ==28378==    by 0x457DD9: operator() (unique_ptr.h:76)

  200. ==28378==    by 0x457DD9: ~unique_ptr (unique_ptr.h:236)

  201. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System> > (stl_construct.h:93)

  202. ==28378==    by 0x457DD9: __destroy<std::unique_ptr<radix::System>*> (stl_construct.h:103)

  203. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*> (stl_construct.h:126)

  204. ==28378==    by 0x457DD9: _Destroy<std::unique_ptr<radix::System>*, std::unique_ptr<radix::System> > (stl_construct.h:151)

  205. ==28378==    by 0x457DD9: ~vector (stl_vector.h:426)

  206. ==28378==    by 0x457DD9: radix::World::~World() (World.cpp:105)

  207. ==28378==    by 0x43A285: ~BaseGame (BaseGame.hpp:15)

  208. ==28378==    by 0x43A285: glPortal::Game::~Game() (Game.hpp:16)

  209. ==28378==    by 0x43032A: main (Main.cpp:18)

  210. ==28378==  Block was alloc'd at

  211. ==28378==    at 0x4C2B1EC: operator new(unsigned long) (in /usr/lib/valgrind/

  212. ==28378==    by 0x43A79B: addSystem<radix::PhysicsSystem> (World.hpp:201)

  213. ==28378==    by 0x43A79B: glPortal::Game::init() (Game.cpp:49)

  214. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  215. ==28378==    by 0x4302E8: main (Main.cpp:18)

  216. ==28378==

  217. ==28378==

  218. ==28378== HEAP SUMMARY:

  219. ==28378==     in use at exit: 3,997,445 bytes in 696 blocks

  220. ==28378==   total heap usage: 27,612,142 allocs, 27,611,446 frees, 1,471,886,430 bytes allocated

  221. ==28378==

  222. ==28378== 16 bytes in 1 blocks are definitely lost in loss record 18 of 236

  223. ==28378==    at 0x4C2B1EC: operator new(unsigned long) (in /usr/lib/valgrind/

  224. ==28378==    by 0x472281: radix::PhysicsSystem::PhysicsSystem(radix::World&) (PhysicsSystem.cpp:24)

  225. ==28378==    by 0x43A7A9: addSystem<radix::PhysicsSystem> (World.hpp:201)

  226. ==28378==    by 0x43A7A9: glPortal::Game::init() (Game.cpp:49)

  227. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  228. ==28378==    by 0x4302E8: main (Main.cpp:18)

  229. ==28378==

  230. ==28378== 64 bytes in 1 blocks are definitely lost in loss record 159 of 236

  231. ==28378==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/

  232. ==28378==    by 0x100ECE5F: glXChooseFBConfig (in /usr/lib/

  233. ==28378==    by 0x85AF470: glXChooseFBConfig (in /usr/lib/

  234. ==28378==    by 0x5DA1462: X11_GL_CreateContext (SDL_x11opengl.c:642)

  235. ==28378==    by 0x5D8FBBF: SDL_GL_CreateContext_REAL (SDL_video.c:3145)

  236. ==28378==    by 0x449A92: radix::Window::create(char const*) (Window.cpp:108)

  237. ==28378==    by 0x43B018: glPortal::Game::Game() (Game.cpp:24)

  238. ==28378==    by 0x4302E8: main (Main.cpp:18)

  239. ==28378==

  240. ==28378== 5,166 (479 direct, 4,687 indirect) bytes in 1 blocks are definitely lost in loss record 226 of 236

  241. ==28378==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/

  242. ==28378==    by 0x6C67542: ??? (in /usr/lib/

  243. ==28378==    by 0x472224: operator new (btDiscreteDynamicsWorld.h:99)

  244. ==28378==    by 0x472224: radix::PhysicsSystem::PhysicsSystem(radix::World&) (PhysicsSystem.cpp:21)

  245. ==28378==    by 0x43A7A9: addSystem<radix::PhysicsSystem> (World.hpp:201)

  246. ==28378==    by 0x43A7A9: glPortal::Game::init() (Game.cpp:49)

  247. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  248. ==28378==    by 0x4302E8: main (Main.cpp:18)

  249. ==28378==

  250. ==28378== 37,024 (8 direct, 37,016 indirect) bytes in 1 blocks are definitely lost in loss record 233 of 236

  251. ==28378==    at 0x4C2B1EC: operator new(unsigned long) (in /usr/lib/valgrind/

  252. ==28378==    by 0x44B387: make_unique<radix::GWENInput> (unique_ptr.h:787)

  253. ==28378==    by 0x44B387: radix::Window::create(char const*) (Window.cpp:131)

  254. ==28378==    by 0x43B018: glPortal::Game::Game() (Game.cpp:24)

  255. ==28378==    by 0x4302E8: main (Main.cpp:18)

  256. ==28378==

  257. ==28378== 3,845,708 (55 direct, 3,845,653 indirect) bytes in 1 blocks are definitely lost in loss record 236 of 236

  258. ==28378==    at 0x4C2AB8D: malloc (in /usr/lib/valgrind/

  259. ==28378==    by 0x6C67542: ??? (in /usr/lib/

  260. ==28378==    by 0x69D0B2A: btDefaultCollisionConfiguration::btDefaultCollisionConfiguration(btDefaultCollisionConstructionInfo const&) (in /usr/lib/

  261. ==28378==    by 0x4721CB: radix::PhysicsSystem::PhysicsSystem(radix::World&) (PhysicsSystem.cpp:18)

  262. ==28378==    by 0x43A7A9: addSystem<radix::PhysicsSystem> (World.hpp:201)

  263. ==28378==    by 0x43A7A9: glPortal::Game::init() (Game.cpp:49)

  264. ==28378==    by 0x43B025: glPortal::Game::Game() (Game.cpp:28)

  265. ==28378==    by 0x4302E8: main (Main.cpp:18)

  266. ==28378==

  267. ==28378== LEAK SUMMARY:

  268. ==28378==    definitely lost: 622 bytes in 5 blocks

  269. ==28378==    indirectly lost: 3,887,356 bytes in 53 blocks

  270. ==28378==      possibly lost: 0 bytes in 0 blocks

  271. ==28378==    still reachable: 109,467 bytes in 638 blocks

  272. ==28378==         suppressed: 0 bytes in 0 blocks

  273. ==28378== Reachable blocks (those to which a pointer was found) are not shown.

  274. ==28378== To see them, rerun with: --leak-check=full --show-leak-kinds=all

  275. ==28378==

  276. ==28378== For counts of detected and suppressed errors, rerun with: -v

  277. ==28378== Use --track-origins=yes to see where uninitialised values come from

  278. ==28378== ERROR SUMMARY: 75134 errors from 13 contexts (suppressed: 0 from 0)

165 backlog 3D Feature Request Low Add legacy GL renderer Assigned
Task Description

Add another renderer that uses old GL for max. compatibility on old and/or simple cards.

158 Backend / Core Epic Low Validate files against xsds New
Task Description

This depends on the task to create xsds.

153 Backend / Core Epic Low entities and systemRun in Radix World.cpp accept a raw ... New
Task Description

no task description

151 Backend / Core Epic Low Auto-Updater New
Task Description

no task description

150 1 Backend / Core Simple Task Medium Find data directory New
Task Description

Check list of possible places where data can be like

  • /usr/share/glportal
  • /usr/local/share/glportal
  • ./

or we can use PREFIX variable to set prefix, we can set default to /usr/share

149 Backend / Core Epic Low Implement Lighting Maps New
Task Description

no task description

148 1 Juraj Oravec,Geert Custers Backend / Core Epic Low Fix screens on radix Assigned
Task Description

This means like the game over screen or start screen.

Compare with current master.


TODO: Add support for HTML-like containers

145 1 Henry Hirsch Backend / Core Bug Report Low Reimplement Portals on Radix New
Task Description

no task description

144 Engine Simple Task Low Add gamepad support New
Task Description

Create support for gamepads (like XBox 360 or PlayStation ones) as an alternative input method.

142 Backend / Core Feature Request Low Add uv offset to the material format New
Task Description

Also add this to the spec.

139 backlog Backend / Core Epic Low Add check gl calls before using them New
Task Description

Call fails should be documented in the same manner as shader fails are.

137 2 Backend / Core Feature Request Low Add quad support New
Task Description

Currently we can only work with obj files that have tris. When quads are used we just ignore the last coordinate leading to broken geometry.

Blender exports to obj files with quads by default.

133 backlog Backend / Core Epic Low Bones System New
Task Description

130 2 Backend / Core Epic Low Render with Blender New
Task Description

Create a renderer that can be used from blender

128 backlog Backend / Core Feature Request Low Asynchronous file I/O New
Task Description

Currently, file RWops are blocking and synchronous (just like what's provided by the C FILE* and C++ fstream). This is all fine in good for non-interactive programs and initialization-time loading. But most applications of SDL are interactive, and many are games and media players, which need to read from the harddisk while remaining interactive.

Because file RWops are blocking (take control away from the main thread), reading too much data from the hard disk on the main thread makes programs non-interactive. This leads to messy solutions like creating another thread just to load data ( "Main thread renders loading animation while background thread uploads whole level along with textures. In fact I did notice that this takes slightly longer than doing everything in main but user experience is much better with main thread still operational, showing anims and gameplay tips. ": ).

So, I request the addition of asynchronous I/O features to SDL.

POSIX non-blocking I/O is simple: pass the flag O_NONBLOCK to open(), and all calls to read/write will return without waiting for the disk (the return value will be the number of bytes written). Asynchronous file I/O was added to POSIX in 2001. Most versions of the interface do not work on sockets. See: Non-blocking I/O can be multiplexed using select() in order to reduce the number of read()/write() syscalls: With non-blocking I/O, SDL will have to maintain the total number of bytes written in order to determine when an I/O operation has completed.

Windows does not support synchronous (in order) non-blocking I/O. Instead it only supports asynchronous (out-of-order, or in Windows terms, overlapped) I/O. This is implemented by passing FILE_FLAG_OVERLAPPED to CreateFile and maintaining an OVERLAPPED structure for each I/O operation. See: There are several ways to get indications of I/O completions using asynchronous I/O. One is to associate a kernel event with the OVERLAPPED structure passed to ReadFile/WriteFile. Another is to call GetOverlappedResult. But because an application that has real use of asynchronous I/O is probably performing operations on multiple files, it would be better to reduce the number of syscalls. This means using Read/WriteFileEx and entering an alertable wait state in the main loop (a new API function, SDL_PumpIO, for other threads; and probably inside SDL_PumpEvents) to execute I/O completion handlers. See:

It is entirely possible to implement this using the existing SDL_RWops interface. But an asynchronous SDL_RWop would break old code using SDL_RWops by its nature.

Instead, I recommend an additional API just for asynchronous file ops. While this could certainly be done as a third party library, I feel that it would be a better fit for the main library, using the SDL event queue to report completed/failed async ops with a new event.

127 backlog Backend / Core Bug Report Low Comments on Radix New
Task Description

07:03 < nfries88> Also in Game::update, I believe "while (SDL_GetTicks() > nextUpdate && skipped < MAX_SKIP) {" is intended to be 
                  "while (SDL_GetTicks() < nextUpdate && skipped < MAX_SKIP) {"

08:10 < nfries88> also, he should not be comparing strings when he could be comparing identifiers or simply storing systems in an 
                  ordered list: bool PlayerSystem::runsBefore(const System &sys) {   const char *name = sys.getName();   return 
                  ::strcmp(name, "PhysicsSystem") == 0; }
08:12 < nfries88> even an optimized strcmp will take at least stringlength/sizeof(int) times as long as an integer comparison

06:58 < nfries88> ok I have to go to bed soon, but I have on last suggestion regarding radix engine, it will make it more flexible (so, 
                  for example, the ECS aspect could be used for servers). Maybe you can pass this on to Dorian?
07:00 <@uwjesq> nfries88: Yes I can.
07:02 < nfries88> reduce the control that the World class has over Systems, or possibly eliminate it entirely and just have the 
                  programmer using Radix invoke each system on command, and synchronize each system on command
07:03 < nfries88> presumably the Radix user will be implementing most or all systems himself anyway, so he can control how systems run 
                  when implementing the systems
07:04 < nfries88> this would allow, in the server case, for most systems to be implemented to run asynchronously on a worker thread 
                  that's just an asynchronous task pool
07:07 < nfries88> it also might be more proper to remove the dependency on bullet from the engine, and instead put the system 
                  implementation in the GlPortal branch. This will make the engine useful to people who have physics requirements that 
                  bullet does not meet.

07:14 < nfries88> For offline games or clients, this is probably fine, but it is making Radix::World into a black box systems 
                  controller (black boxes aren't great), and it assumes all systems should be run synchronously in worker threads (this 
                  does not work for servers)

07:18 < nfries88> it will make Radix slightly harder to use when system control is up to the user, but this gives more control to the 
                  user to maximize performance with their specific requirements.
07:19 < nfries88> I am always happy to offer advice
07:24 < nfries88> Radix could also implement a worker thread pool class for this general case.
07:24 < nfries88> (it's basically what is already done in Radix::World anyway)
07:32 < nfries88> you might also want to open a task for adding an asynchronous file I/O implementation. I'm honestly amazed at how few 
                  game engines include such a useful (and now almost universally available) feature


07:43 < nfries88> on Linux it is pretty easy with POSIX aio. I think there are several ways to do it on OS X, but POSIX aio is also 
                  available there
07:43 <@uwjesq> nfries88: On windows not so much...
07:44 < nfries88> On Windows there is either ReadFileEx/WriteFileEx or I/O Completion Ports. I/O Completion ports is better.
07:44 <@uwjesq> nfries88: To windows users we show a screen "Loading very slowly... because windows."
07:44 < nfries88> lol
07:44 < nfries88> actually if Windows were more secure, and didn't have all that UI bloat by default even on their server versions, I 
                  would only use Windows for game servers
07:45 <@uwjesq> nfries88: I know this one guy that is using windows servers. I only have ??? in my eyes when he talks about them.
07:46 < nfries88> I/O Completion Ports is much easier than the alternatives for network IO (and POSIX aio does not work for network I/O 
                  - each family of Unix-likes have their own mechanism)


125 1 Maps Simple Task Low Add 2 new maps New
Task Description

no task description

122 Backend / Core Task Low Add authors to map format New
Task Description

no task description

121 1 Henry Hirsch Backend / Core Epic Low Release Website Assigned
Task Description

- Create fake screenshot in Blender

- Community button links to section on the front page. Add links to webchat and gitter there.

120 3 Engine Task Low Add Vulkan renderer New
Task Description

no task description

119 6 SFX Task Low Add menu SFX New
Task Description
  1. Accept
  2. Select
  3. Abort
117 backlog Sound Task Low Add Fade in, Fade out and cross fade to the music syste... New
Task Description

no task description

116 backlog Sound Task Low Prevent sequence of the same walking sound New
Task Description

Currently it is possible that the same walking sound is played several rows in sequence. This has to prevented.

109 backlog Henry Hirsch Backend / Core Bug Report Low No portal cleanup after reset with middle mouse Assigned
Task Description

After the reset when you place a single portal you will still come out of the other one.

107 1 Geert Custers Backend / Core Epic Low Add Map triggers New
Task Description

  • Create generator for entity and components
  • New Entity Trigger skeleton
  • New Component GhostObject skeleton
104 Dorian Wouters 3D Task Medium Lights: use UBOs Assigned
Task Description

Use Uniform Buffer Objects to avoid re-uploading light data every frame for every shader. reports 100% support with free drivers. Proprietary drivers on Linux as well as other platforms should have it also -- it was "Approved by the ARB on February 17, 2009" and the implementation within drivers is technically simpler than Vertex Buffer Objects so it's likely implemented by now.

103 Dorian Wouters Sound Feature Request Low Use OpenAL Assigned
Task Description

SDL_mixer is great and all but doesn't provide great features relating to spatial 3D sound positioning.

Mix_SetPosition and Mix_SetDistance can do the job but involves more effort on our side, and generally isn't really fit for 3D audio.

OpenAL is as cross-platform as SDL_mixer coupled with SDL_audio, if not more efficient as it is an OpenGL-like standard allowing for different system implementations, and OpenAL Soft which is almost the only implementation used supports many sound systems, is made from the ground up for 3D games, and even provides advanced features such as EFX (reverb, absorption) or HRTF.

If needs be the audio system can be made backend-agnostic using virtual classes, so we keep SDL_mixer if necessary.

102 Backend / Core Epic Low Write Code to solve puzzles New
Task Description

Write little programs to solve puzzles.

101 Henry Hirsch,Dorian Wouters Scripting Engine Epic Low Bytecode compiler for JS New
Task Description

JavaScript should be compiled into bytecode. 

94 Engine Simple Task Low Create a hub map that connects all other maps New
Task Description

no task description

92 backlog Backend / Core Epic Low Multiplayer New
Task Description

Very simple multiplayer where players don't see each other but can influence boolean values like a trigger over the network. Minimalistic chat function.

91 backlog Backend / Core Epic Low Black Screen New
Task Description

AMD Radeon HD 7640G

The OpenGL version is 44 and there are no compile errors when compiling the shaders. I also did not find anything  using glslangValidator.

Maybe not related:

90 Backend / Core Epic Low What can we learn from zooshi New
Task Description

Check their toolchain if there are components that we can use.

89 backlog Backend / Core Epic Low Package Release New
Task Description

88 backlog Backend / Core Epic Low Dependency managment New
Task Description

I want to put some of the code into modules to keep the repo clean and simple also to encourage people to use modules in their own projects and to lower the barrier to introduce dependencies.

Or maybe git submodules like we already do for the data. Which is good since it will not introduce a new tool into our toolchain.

86 Backend / Core Epic Low Unable to load audio stops game New
Task Description

When no audio device is available the game does not start.

85 Henry Hirsch Backend / Core Epic Low Single interaction panels New
Task Description

Add single interaction panels to the game. Independent from the model.

83 backlog Henry Hirsch Backend / Core Epic Low Find performance sinks New
Task Description

You can use Valgrind with the following options

valgrind --tool=callgrind ./(Your binary)
It will generate a file called callgrind.out.x. You can then use kcachegrind tool to read this file. It will give you a graphical analysis of things with results like which lines cost how much.

82 backlog Backend / Core Epic Low Build for the web with Emscripten New
Task Description

81 backlog Backend / Core Epic Low Simulation Sickness Optimizations New
Task Description
  • Wider FOV
  • Darker Screen

78 backlog Backend / Core Epic Low Integrate mock framework New
Task Description

Start by getting rid of the FlagObserver in the unit test for the dispatcher.

77 backlog Backend / Core Epic Low Viewscreens and Mirrors New
Task Description

The renderer pretty much already knows how to render from other perspectives. We just have to generalize the part of the renderer and create objects with the properties.

76 backlog Util Simple Task Low Launcher/Updater New
Task Description

The launcher and updater app needs to be cross platform and easy to code from the start.


75 Backend / Core Feature Request Low Fizzlers appearance New
Task Description

Portal 2's fizzlers / emancipation grids have a water-caustics-looking appearance (in fact they are generated caustics textures, colored and animated in a Perlin noise octave fashion).

On this image, the upper left one is the "modern" look, and the upper right one is the  is the "old Aperture" look. Other fields colors are not part of the original game and has different purposes.

Inspired by this design, our fields can look similar but better by actually making them 2D water simulations, more popularly known as the "ripple effect", as popularized by this article. Here are a few HTML5 example implementations: 1, 2, 3, 4.

As described in the design ideas document, those fields would have their emitters stuck to the wall, either recessing or part of it. These could, on the 2D water sim, constantly create waves by setting the said simulation "pixels" to a sine function of time. Additionally, interaction from the player or any other physical object would actually make waves as the said object passes through the field. This effect should be able to be disabled and tweaked (resolution setting) in the settings, as it implies some rather heavyweight CPU-side computation and frequent CPU -> GPU texture uploads, which is limited by bus bandwidth. Use interpolation to our advantage.

However, due to the current (portal closing/portal bullet vanishing, object dissolving, player killing) and future different stacking functionality a single field can have, we must ensure the visual signals indicating those functionalities are stackable too. First off, R+G+B colors addition could do the trick. For further functions, things such as particles is an idea.

72 Backend / Core Task Low Apply C++ guidelines New
Task Description

Check these guidelines and refer to them in our contribution guide if they are good.

64 Backend / Core Epic Low Remove Code Duplication New
Task Description

63 Backend / Core Task Low Create Debian Package New
Task Description

no task description

61 hristo stamenov Backend / Core Epic Low Move functions out of Wold.cpp Assigned
Task Description

Move functions out of Wold.cpp into helper classes. Pass a trainwreck of parameters. See which patterns emerge and optimize for it.

59 backlog Engine Bug Report Low Smooth transition Portalup-for-grabs New
Task Description

58 backlog Henry Hirsch Engine Epic Low World.cpp is too damn big Assigned
Task Description

Just look at it. 400 Lines? That says it all.

57 backlog Backend / Core Task Low Add contribution instructions to repository New
Task Description

Add contribution instructions to git repository

56 Engine Task Medium Use vector fonts New
Task Description

As of early versions, the pixel fonts are good enough for the rendering we need.

However it has several issues:

  • A new font texture must be generated for each font we'll add
  • This font texture must be generated with a tool: extra code separated from glPortal's source. Plus currently it's distributed in conjunction with an EXE blob for Windows which is more than 200 Kb in size
  • This scales badly when upscaled and even when downscaled (with GL_LINEAR)
    We use Signed Distance Field text rendering.
  • Is limited to a certain number of characters
  • It can't have an arbitrary font resolution; would not be a problem if we used explictly bitmap fonts, which is however not the case

The following is proposed instead:

  • If we use a library able to render strings, use this ability
  • Else, generate font atlases on the fly, possibly reusing SDFont's code, and keeping the Signed Distance Field technique to avoid requiring many atlases (1 per font size).

Of course, the results will be cached to improve performance, and likely garbage-collected or refcounted in the first case to avoid resource exhaustion.

55 backlog Dorian Wouters Map Editor Epic Low Make in-game editor, ditch Blender-based editor and ala... New
Task Description

Blender is a wonderful 3D editing software, however it isn't the best fit editor for glPortal maps. Maintaining the editor plug-in further will be a real headache if frequent changes are being done to the map format or if we add new elements.

Having an in-game editor would allow live preview and testing, no map compilation/conversion necessity, as well as easy new element integration as we use an Entity Component System, the only base requirement being to implement some kind of reflection framework (like .NET/Java) on Components.

See mockup for an idea of how it will be done.

If done before FS #53, #48 or #15, invalidates them.

52 backlog Map Editor Feature Request Low Namespaces for maps New
Task Description

Currently the maps are all aranged in one directory. To get some structure into this I suggest that they are are put into subdirectories.

48 backlog Util Task High Port alan to C++ New
Task Description Alan needs to run on all platforms. So he can not be coded ins bash anymore.
42 2 Engine Task Low Pitch change for repeating sounds New
Task Description Pitch change for repeating sounds
41 2 Engine Epic Low Directional sound New
Task Description Sound should come from a direction.
40 backlog Backend / Core Simple Task Low Use smart pointers New
Task Description

Replace pointer usage with smart pointers.

33 backlog Henry Hirsch,Dorian Wouters Engine Feature Request Critical Add Scripting support New
Task Description

Add support for Perl, Javascript, Lua or PHP as a scripting language. Prefer languages which offer a lightweight runtime, such as Lua's VM, Duktape for JS, ...

32 Engine Task Medium Allow entities to be parented New
Task Description Currently things like the camera are weakly parented to the player by hardcoding. Proper support is required
31 backlog Engine Epic High Add an easy to use GUI system New
Task Description It needs to be easy to show overlays and draw over the gamescreen
28 backlog Backend / Core Feature Request Low Windows installer New
Task Description
23 backlog Backend / Core Feature Request Medium Implement triggers separately New
Task Description

Implement each trigger in a seperate class.

20 4 Backend / Core Feature Request Medium Add Skinable Panels New
Task Description

Add wall panels.

13 backlog Backend / Core Simple Task Medium Test and fix install target New
Task Description

Test and fix the install target. 

10 backlog Engine Feature Request High HUD hands New
Task Description

Add support for non-animated 3D HUD-Hands.

9 4 Engine Feature Request High Add current to circuits New
Task Description Visible flow of current in circuits represented by painting the live circuit in another colour. If performance is a problem, step the simulation very slowly. Add dotted semiconductors.
8 backlog Engine Bug Report Medium Grid to connect circuits New
Task Description

Draw a grid on the screen and the player has to close a circuit by painting in pixels. The circuit can trigger one or more triggers. This first version will likely have no challence except maybe have areas where the player can't draw.

At first all tasks will be to connect a cpu to the surrounding circuit like power supply.

4 backlog Henry Hirsch Backend / Core Bug Report High Add support for package.xml Assigned
Task Description

Add support for a file that defines which maps and which screens to load in what order. Refer to data/maps/test/pack.xml for an example.

Showing tasks 1 - 73 of 73 Page 1 of 1

Available keyboard shortcuts

Task List

Task Details

Add/Edit Task

TODO:complete the list
for accesskey usage different shortcuts on Windows, Mac, Linux .., currently shown for Firefox