*** infobot <infobot!ibot@c-174-52-60-165.hsd1.ut.comcast.net> has quit IRC (Ping timeout: 268 seconds) | 00:16 | |
BZNotify | bzflag: allejo commented on issue #233 "Teleporter naming in world export, obj format" by ODelusion (https://git.io/JeQSu): An example to point out this problem, teleporter names are saved in... | 00:18 |
---|---|---|
BZNotify | bzflag: allejo removed needs triage label from #233 "Teleporter naming in world export, obj format" by ODelusion (https://git.io/JeQKZ) | 00:19 |
BZNotify | bzflag: allejo milestoned issue #233 by ODelusion (2.4.20 - ) | 00:19 |
BZNotify | 2.4 @ bzflag: allejo pushed 1 commit (https://git.io/JeQSh): | 01:10 |
BZNotify | 2.4 @ bzflag: allejo a12ea7: Update CHANGELOG with latest 2.4 commits (https://git.io/JeQSj) | 01:10 |
BZNotify | bzflag: allejo synchronized pull request #229 "Add bz_getSpawnPointWithin to API" (https://git.io/Je1qc) | 01:34 |
BZNotify | bzflag: allejo synchronized pull request #229 "Add bz_getSpawnPointWithin to API" (https://git.io/Je1qc) | 01:37 |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has joined #bzflag | 01:38 | |
*** I_Died_Once <I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has quit IRC (Ping timeout: 250 seconds) | 01:42 | |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has quit IRC (Remote host closed the connection) | 01:48 | |
BZNotify | bzflag: allejo edited pull request #229 "Add bz_getSpawnPointWithin to API" (https://git.io/Je1qc) | 02:23 |
BZNotify | bzflag: allejo closed pull request #229 | 02:23 |
BZNotify | 2.4 @ bzflag: allejo pushed 4 commits (https://git.io/JeQHn): | 02:23 |
BZNotify | 2.4 @ bzflag: allejo cf69c9: Add bz_getSpawnPointWithin to API (https://git.io/JeQHc) | 02:23 |
BZNotify | 2.4 @ bzflag: allejo 404b83: Add timeout to bz_getSpawnPointWithin() (https://git.io/JeQHC) | 02:23 |
BZNotify | 2.4 @ bzflag: allejo a3b53e: Add bz_getSpawnPointWithin to CHANGELOG (https://git.io/JeQHW) | 02:23 |
BZNotify | 2.4 @ bzflag: allejo 82d03e: Merge pull request #229 from allejo/feature/safe-spawn-points-plugins (https://git.io/JeQHl) | 02:23 |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has joined #bzflag | 03:07 | |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has quit IRC (Ping timeout: 240 seconds) | 03:36 | |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has joined #bzflag | 03:39 | |
*** The_Noah_ <The_Noah_!~The_Noah@47.185.193.111> has joined #bzflag | 03:58 | |
*** The_Noah <The_Noah!~The_Noah@47.185.193.111> has quit IRC (Ping timeout: 240 seconds) | 04:01 | |
*** FieldSobers <FieldSobers!~Artistics@unaffiliated/user49> has quit IRC (*.net *.split) | 04:08 | |
*** brlcad <brlcad!~sean@104.225.5.10> has quit IRC (*.net *.split) | 04:08 | |
*** joevano <joevano!~joevano@bzflag/developer/JoeVano> has quit IRC (*.net *.split) | 04:08 | |
*** blast007 <blast007!~blast007@bzflag/developer/Blast> has quit IRC (*.net *.split) | 04:08 | |
*** FieldSobers <FieldSobers!~Artistics@unaffiliated/user49> has joined #bzflag | 05:03 | |
*** WhatsUpDanger <WhatsUpDanger!ac0d4a9c@gateway/web/cgi-irc/kiwiirc.com/ip.172.13.74.156> has quit IRC (Ping timeout: 276 seconds) | 05:42 | |
*** infobot <infobot!ibot@c-174-52-60-165.hsd1.ut.comcast.net> has joined #bzflag | 06:06 | |
*** ChanServ sets mode: +v infobot | 06:06 | |
macsforme | tupone: do you have a feeling for how much of an issue it is for VBO memory having to be reallocated? | 06:45 |
macsforme | I know we had a lot of stuff that was in display lists already, so I imagine data like that would be easy to transition to a persistent VBO, whereas we also have a lot of stuff assembled on-the-fly which might not be so easy | 06:46 |
tupone | The world objects are not going to be reallocated or changed at all | 07:18 |
tupone | only for the radar but I did a shader that preserve the radar objects (color is computed in the shader) | 07:18 |
tupone | In my PR the things written in the initVBO are "statically allocated". The initVBO is only called when GL context is destroyed and recreated | 07:20 |
macsforme | okay | 07:22 |
tupone | Also the tank models will be preserved and redraw with different Matrix | 07:22 |
macsforme | so why is it necessary to keep a list of free VBOs and allocated VBOs? | 07:22 |
BZNotify | bzflag: macsforme commented on pull request #227 "Enable dithering always" by atupone (https://git.io/JeQdY): > tupone: as for the dithering in bzflag, it was disabled when draw... | 07:24 |
macsforme | meaning, what is the purpose of this: https://github.com/atupone/bzflag/blob/VBO/include/VBO_Handler.h#L51-L57 | 07:25 |
tupone | If I have only dynamic object I would not need to trace memory, maybe I could have used a simple stack approach | 07:26 |
tupone | If I have static object to draw I need to know where they are, I need to free them when I change server, where to get memory for dynamic things ... | 07:28 |
macsforme | why can't each object that needs to be drawn have its own VBO? | 07:29 |
tupone | If the object where in the "CPU" memory I could have used new and delete. | 07:29 |
tupone | Too much VBO switching is an answer | 07:29 |
tupone | dynamic memory allocation on the GPU | 07:30 |
macsforme | and why is that a problem? | 07:30 |
tupone | Saving GPU time | 07:32 |
macsforme | did you actually measure an impact? | 07:33 |
macsforme | I can understand that we don't want to change state unnecessarily, so we bind a VBO ideally once per frame, use it, then move onto the next | 07:34 |
tupone | I did not. I read https://www.khronos.org/opengl/wiki/Vertex_Specification_Best_Practices | 07:34 |
macsforme | but I doubt there is a performance loss from rebinding even 20-30 different VBOs each frame | 07:35 |
tupone | you will have about 400 VBO or more for a simple world | 07:35 |
tupone | the models for a tank are about 8 and you need to draw them for each tank | 07:36 |
tupone | you have shot | 07:36 |
macsforme | well, some things could be grouped together... for example, I could see all world geometry being together in one buffer | 07:37 |
tupone | you have the world object | 07:37 |
tupone | the menu | 07:37 |
tupone | the radar | 07:37 |
macsforme | tank pieces could all be grouped together in one buffer as well... they are the same kind of geometry | 07:37 |
tupone | when they explode they are not | 07:37 |
macsforme | I didn't mean they have to be drawn in one call... you can store them in one buffer, and then render pieces individually by using an offset and a primitive count | 07:38 |
macsforme | for example, store the tank body, then the treads, then the turret, the barrel, etc., consecutively in one buffer, and track the offsets for when we need to draw each piece | 07:41 |
tupone | The memory allocation that I did is already doing that | 07:42 |
tupone | and it is not that complex | 07:42 |
tupone | even with that approach you need to have a facility to rebuild your VBO when needed | 07:43 |
tupone | and I have created vboVTN .... but one could create its own if you want to have "your" VBOs | 07:45 |
macsforme | we were already re-building display lists when the context is re-created... so yes, we need that logic, and to extend it to everything that uses a VBO | 07:46 |
tupone | But all object to draw will use VBO in the future | 07:46 |
tupone | there will be no other way | 07:47 |
macsforme | yes | 07:47 |
tupone | Why I say you can create you own VBO? When I write to a VBO the CPU wait for it to be not in use | 07:48 |
tupone | I don't know if all the driver wait for all the VBO to be unused, or only the interested portion | 07:50 |
macsforme | writing to a VBO should generally be rare while playing | 07:51 |
macsforme | I think we'll still want to stream a few things, like the flag waving | 07:52 |
macsforme | maybe I still don't understand your design | 07:53 |
macsforme | in std::list<MemElement> alloVBOList, how many elements do you expect? | 07:54 |
tupone | One for each request. For instance for for each piece of a tank | 07:55 |
tupone | s/for/one/ | 07:55 |
macsforme | will some vboIndex within that list be shared, or each unique? | 07:56 |
tupone | all the vboIndex are unique for buffer | 07:56 |
tupone | it is going to trace, for instance, where the piece of the tank model will start | 07:57 |
macsforme | and a vboIndex is a buffer name returned by glGenBuffers(), or something else? | 07:57 |
tupone | no, only the offset from the start of the buffer | 07:58 |
macsforme | okay, so each VBO_Hander gets one VBO name from GL? | 07:58 |
tupone | yes or three | 07:59 |
tupone | glDrawArrays( | 07:59 |
tupone | GL_TRIANGLE_STRIP, | 07:59 |
tupone | vboIndex, | 07:59 |
tupone | (flagChunks + 1) * 2); | 07:59 |
tupone | this is the usage of vboIndex in a rendering call | 08:00 |
tupone | the enable Arrays will bind the correct buffer | 08:00 |
tupone | vboVT.enableArrays(); | 08:00 |
macsforme | is there only one instance of VBO_Handler per combination needed (e.g., V + N + T, V + N, etc.)? | 08:04 |
tupone | yes, I did that to save space (on the GPU) but you are free to create other if you need | 08:05 |
tupone | for instance truely permanent object, that are used a lot during drawing could use their own VBO_Handler to avoid freezing the renderloop when other are updating. Still not done in my GL2.0 porting. I have only those | 08:07 |
macsforme | yes, that is a problem inherent to this design (of putting so much vertex data together) | 08:09 |
tupone | This design allows to put things together easily, Do not force you to put all things together | 08:10 |
macsforme | so when you call the VBO_Handler constructor you tell it how much memory to reserve on the GPU? | 08:15 |
macsforme | or rather, how many elements, and then init() will calculate how much memory, and actually allocate the buffers? | 08:17 |
macsforme | okay, I think I'm starting to grasp it | 08:27 |
tupone | ok. more question later :) | 08:28 |
macsforme | I am still curious though how you calculate that a simple world will result in 400+ VBOs without this design | 08:28 |
macsforme | I will sleep on it | 08:28 |
tupone | with one vbo for rendering call | 08:29 |
*** brlcad <brlcad!~sean@104.225.5.10> has joined #bzflag | 10:05 | |
*** blast007 <blast007!~blast007@bzflag/developer/Blast> has joined #bzflag | 10:05 | |
*** joevano <joevano!~joevano@bzflag/developer/JoeVano> has joined #bzflag | 10:10 | |
*** ChanServ sets mode: +v joevano | 10:10 | |
*** Foo_man_choo <Foo_man_choo!~spldart@c-73-155-11-165.hsd1.tx.comcast.net> has quit IRC (Ping timeout: 265 seconds) | 10:33 | |
*** Foo_man_choo <Foo_man_choo!~spldart@c-73-155-11-165.hsd1.tx.comcast.net> has joined #bzflag | 10:40 | |
*** Foo_man_choo is now known as Guest94763 | 10:41 | |
*** I_Died_Once <I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has joined #bzflag | 11:03 | |
*** The_Noah_ is now known as The_Noah | 13:28 | |
*** FusionDude <FusionDude!~flash@2601:280:c200:4e39:45c9:b919:dcf9:b2ce> has quit IRC () | 14:15 | |
*** WhatsUpDanger <WhatsUpDanger!0ca73d02@gateway/web/cgi-irc/kiwiirc.com/ip.12.167.61.2> has joined #bzflag | 16:01 | |
*** _I_Died_Once <_I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has joined #bzflag | 17:17 | |
*** I_Died_Once <I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has quit IRC (Ping timeout: 245 seconds) | 17:20 | |
BZNotify | bzflag: atupone commented on pull request #227 "Enable dithering always" (https://git.io/Je7tI): Dithering is a (mostly) noop when using a 24 bits color buffer.... | 17:32 |
*** WhatsUpDanger29 <WhatsUpDanger29!0ca73d02@gateway/web/cgi-irc/kiwiirc.com/ip.12.167.61.2> has joined #bzflag | 20:39 | |
*** WhatsUpDanger <WhatsUpDanger!0ca73d02@gateway/web/cgi-irc/kiwiirc.com/ip.12.167.61.2> has quit IRC (Ping timeout: 268 seconds) | 20:41 | |
*** WhatsUpDanger29 is now known as WhatsUpDanger | 20:47 | |
BZNotify | bzflag: The-Noah opened issue #234 "Radar and control panel performance" (https://git.io/Je7OV) | 21:03 |
blast007 | The_Noah: Include what operating system and graphics card/driver you are using please. I also saw dramatic FPS differences, with an AMD RX 570 on Debian. | 21:08 |
allejo | I think that issue alone justifies us nuking the radar entirely | 21:12 |
allejo | :p | 21:12 |
tupone | I wonder what is the performance with my GL2.0 branch. Only 1 radar type, but done with shaders | 21:15 |
blast007 | tupone: I haven't tried that branch in a while | 21:15 |
tupone | No change lately in the branch, but radar color is computed directly on the shader | 21:16 |
tupone | All the world reside in a GL buffers, tanks and shot still dynamic | 21:17 |
tupone | without the shader everything change frame by frame for the color is changing depending on the height | 21:20 |
BZNotify | bzflag: atupone synchronized pull request #232 "Vertex buffers object handling" (https://git.io/Je9kl) | 21:59 |
BZNotify | bzflag: The-Noah edited issue #234 "Radar and control panel performance" (https://git.io/Je7OV) | 22:35 |
*** I_Died_Once <I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has joined #bzflag | 22:42 | |
*** _I_Died_Once <_I_Died_Once!~I_Died_On@unaffiliated/idiedonce/x-1828535> has quit IRC (Ping timeout: 245 seconds) | 22:45 | |
*** Guest94763 <Guest94763!~spldart@c-73-155-11-165.hsd1.tx.comcast.net> has quit IRC (Ping timeout: 246 seconds) | 22:47 | |
*** Zehra <Zehra!~Zehra@unaffiliated/zehra> has joined #bzflag | 23:46 |
Generated by irclog2html.py 2.17.3.dev0 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!