Hi !
Featured games (85)
games approved by the League of Dukes
Games in Showcase (636)
Games in Android Showcase (178)
games submitted by our members
Games in WIP (687)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Prepper and handler thread rendering.  (Read 449 times)
0 Members and 1 Guest are viewing this topic.
Offline lcass
« Posted 2013-11-30 18:46:29 »

I had an idea not long ago, whilst watching a lowely tv show. I sat at my desk and pondered a thought , a solution to a problem I sought.   ok poems over.

I sat down and was thinking of methods of optimising code on modern multicore computers specifically for rendering large amounts of objects such as that in an enaconadodecahedron . The idea I came up with was to create two threads , the first being the main game thread and the second being a "Handler" thread.

What would happen is the prepper thread would run through all render tasks that had to be performed and write them to an array that the Handler thread read. When the prepper had started it would tell the Handler to begin reading the array. When the prepper thread had finished it would wait for the Handler to complete its task or for further optimisation check how far the handler is and designate some tasks to the prepper thread. Of course this would require lots of careful coding to make sure both threads were in sync at the end and that the handler did skip infront of the prepper and not render stuff.
Offline ClickerMonkey

JGO Coder

Medals: 20

Game Engineer

« Reply #1 - Posted 2013-12-02 13:34:36 »

(If I understand this correctly) this is something I do for my current game I'm working on.

I have a thread that's responsible for building a ByteBuffer for a chunk. That thread is responsible for determining face visibility, how lighting affects the faces, etc. Once the ByteBuffer is ready to be loaded to the VBO it's put on a queue which the main rendering thread reads every iteration.

So essentially my code is organized like this.

Main Thread
1. Rebuild chunks? Place on queue for Build Thread
2. Any built chunks? Take ByteBuffer and update appropriate VBO

Build Thread
1. Wait for chunk to build
2. Build chunk to ByteBuffers
3. Place ByteBuffers on queue for Main Thread

This only works nicely because the building part is done in such a way that it doesn't modify any game state information... AND if a chunk is being built while it's modified the building process for that chunk is restarted. For every block I do a simple check to see whether the chunk has changed since I started (just a simple volatile boolean flag).

Pages: [1]
  ignore  |  Print  
You cannot reply to this message, because it is very, very old.

Dwinin (72 views)
2015-11-07 13:29:08

Rems19 (81 views)
2015-10-31 01:36:56

Rems19 (78 views)
2015-10-31 01:32:37

williamwoles (107 views)
2015-10-23 10:42:59

williamwoles (93 views)
2015-10-23 10:42:45

Jervac_ (110 views)
2015-10-18 23:29:12

DarkCart (135 views)
2015-10-16 00:58:11

KaiHH (117 views)
2015-10-11 14:10:14

KaiHH (157 views)
2015-10-11 13:26:18

BurntPizza (172 views)
2015-10-08 03:11:46
Rendering resources
by Roquen
2015-11-13 14:37:59

Rendering resources
by Roquen
2015-11-13 14:36:58

Math: Resources
by Roquen
2015-10-22 07:46:10

Networking Resources
by Roquen
2015-10-16 07:12:30

Rendering resources
by Roquen
2015-10-15 07:40:48

Math: Inequality properties
by Roquen
2015-10-01 13:30:46

Math: Inequality properties
by Roquen
2015-09-30 16:06:05

HotSpot Options
by Roquen
2015-08-29 11:33:11 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!