@@ -230,7 +230,7 @@ void _gpu_create_command(gpu * gpu, enum command_types type, void * args){
230
230
assert (com );
231
231
com -> type = type ;
232
232
com -> args = args ;
233
- queue_enqueue (gpu -> command_queue , (void * ) com );
233
+ queue_produce (gpu -> command_queue , (void * ) com );
234
234
}
235
235
236
236
void gpu_set_VAO (gpu * gpu , uint64_t vao_index ){
@@ -478,108 +478,107 @@ void* render_thread_init(void * thread_args){
478
478
printf ("render thread looping\n" );
479
479
bool running = true;
480
480
while (running ){
481
- if (!queue_is_empty (gpu -> command_queue )){
482
- gpu_command * command = queue_dequeue (gpu -> command_queue );
483
- switch (command -> type )
484
- {
485
- case COMMAND_UPLOAD :
486
- {
487
- struct gpu_command_upload * args = command -> args ;
488
- _gpu_upload (gpu , args -> chunk_index , args -> c );
489
- break ;
490
- }
491
- case COMMAND_DRAW_CHUNK :
492
- {
493
- struct gpu_command_draw_chunk * args = command -> args ;
494
- _gpu_draw_chunk (gpu , args );
495
- break ;
496
- }
497
- case COMMAND_SCREEN_CLEAR :
498
- {
499
- _gpu_clear_screen (gpu );
500
- break ;
501
- }
502
- case COMMAND_DRAW_END :
503
- {
504
- glfwSwapBuffers (* th_args -> window_handle );
505
- glfwPollEvents ();
506
- pthread_mutex_unlock (& gpu -> draw_mutex );
507
- break ;
508
- }
509
- case COMMAND_DRAW_START :
510
- {
511
- pthread_mutex_lock (& gpu -> draw_mutex );
512
- break ;
513
- }
514
- case COMMAND_SHADER_INIT :
515
- {
516
- struct gpu_command_shader_init * args = command -> args ;
517
- _gpu_shader_init (gpu , args );
518
- break ;
519
- }
520
- case COMMAND_SHADER_USE :
521
- {
522
- struct gpu_command_shader_init * args = command -> args ;
523
- _gpu_shader_use (gpu , args );
524
- break ;
525
- }
526
- case COMMAND_DRAW_SKYBOX :
527
- {
528
- struct gpu_command_draw_skybox * args = command -> args ;
529
- _gpu_draw_skybox (gpu , args );
530
- break ;
531
- }
532
- case COMMAND_SHADER_SET_M4 :
533
- {
534
- struct gpu_command_shader_mat4 * args = command -> args ;
535
- _gpu_shader_set_m4 (gpu , args );
536
- break ;
537
- }
538
- case COMMAND_SHADER_SET_TRANSFORM_MAT :
539
- {
540
- struct gpu_command_shader_transform_mat * args = command -> args ;
541
- _gpu_shader_set_transform_matrices (gpu , args );
542
- break ;
543
- }
544
- case COMMAND_SHADER_SET_FLOAT :
545
- {
546
- struct gpu_command_shader_float * args = command -> args ;
547
- _gpu_shader_set_float (gpu , args );
548
- break ;
549
- }
550
- case COMMAND_SHADER_SET_FLOAT4 :
551
- {
552
- struct gpu_command_shader_vec4 * args = command -> args ;
553
- _gpu_shader_set_float4 (gpu , args );
554
- break ;
555
- }
556
- case COMMAND_SHADER_CLEANUP :
557
- {
558
- struct gpu_command_shader_init * args = command -> args ;
559
- _gpu_shader_cleanup (gpu , args );
560
- break ;
561
- }
562
- case COMMAND_SHADER_RELOAD :
563
- {
564
- _gpu_shader_reload (gpu );
565
- break ;
566
- }
567
- case COMMAND_WIREFRAME :
568
- {
569
- _gpu_cycle_wireframe (gpu );
570
- break ;
571
- }
572
- case COMMAND_CLEANUP :
573
- {
574
- running = false;
575
- break ;
576
- }
577
- default :
578
- break ;
579
- }
580
- free (command -> args );
581
- free (command );
481
+ gpu_command * command = queue_consume (gpu -> command_queue );
482
+
483
+ switch (command -> type )
484
+ {
485
+ case COMMAND_UPLOAD :
486
+ {
487
+ struct gpu_command_upload * args = command -> args ;
488
+ _gpu_upload (gpu , args -> chunk_index , args -> c );
489
+ break ;
490
+ }
491
+ case COMMAND_DRAW_CHUNK :
492
+ {
493
+ struct gpu_command_draw_chunk * args = command -> args ;
494
+ _gpu_draw_chunk (gpu , args );
495
+ break ;
496
+ }
497
+ case COMMAND_SCREEN_CLEAR :
498
+ {
499
+ _gpu_clear_screen (gpu );
500
+ break ;
501
+ }
502
+ case COMMAND_DRAW_END :
503
+ {
504
+ glfwSwapBuffers (* th_args -> window_handle );
505
+ glfwPollEvents ();
506
+ pthread_mutex_unlock (& gpu -> draw_mutex );
507
+ break ;
508
+ }
509
+ case COMMAND_DRAW_START :
510
+ {
511
+ pthread_mutex_lock (& gpu -> draw_mutex );
512
+ break ;
513
+ }
514
+ case COMMAND_SHADER_INIT :
515
+ {
516
+ struct gpu_command_shader_init * args = command -> args ;
517
+ _gpu_shader_init (gpu , args );
518
+ break ;
519
+ }
520
+ case COMMAND_SHADER_USE :
521
+ {
522
+ struct gpu_command_shader_init * args = command -> args ;
523
+ _gpu_shader_use (gpu , args );
524
+ break ;
525
+ }
526
+ case COMMAND_DRAW_SKYBOX :
527
+ {
528
+ struct gpu_command_draw_skybox * args = command -> args ;
529
+ _gpu_draw_skybox (gpu , args );
530
+ break ;
531
+ }
532
+ case COMMAND_SHADER_SET_M4 :
533
+ {
534
+ struct gpu_command_shader_mat4 * args = command -> args ;
535
+ _gpu_shader_set_m4 (gpu , args );
536
+ break ;
537
+ }
538
+ case COMMAND_SHADER_SET_TRANSFORM_MAT :
539
+ {
540
+ struct gpu_command_shader_transform_mat * args = command -> args ;
541
+ _gpu_shader_set_transform_matrices (gpu , args );
542
+ break ;
543
+ }
544
+ case COMMAND_SHADER_SET_FLOAT :
545
+ {
546
+ struct gpu_command_shader_float * args = command -> args ;
547
+ _gpu_shader_set_float (gpu , args );
548
+ break ;
549
+ }
550
+ case COMMAND_SHADER_SET_FLOAT4 :
551
+ {
552
+ struct gpu_command_shader_vec4 * args = command -> args ;
553
+ _gpu_shader_set_float4 (gpu , args );
554
+ break ;
555
+ }
556
+ case COMMAND_SHADER_CLEANUP :
557
+ {
558
+ struct gpu_command_shader_init * args = command -> args ;
559
+ _gpu_shader_cleanup (gpu , args );
560
+ break ;
561
+ }
562
+ case COMMAND_SHADER_RELOAD :
563
+ {
564
+ _gpu_shader_reload (gpu );
565
+ break ;
566
+ }
567
+ case COMMAND_WIREFRAME :
568
+ {
569
+ _gpu_cycle_wireframe (gpu );
570
+ break ;
571
+ }
572
+ case COMMAND_CLEANUP :
573
+ {
574
+ running = false;
575
+ break ;
576
+ }
577
+ default :
578
+ break ;
582
579
}
580
+ free (command -> args );
581
+ free (command );
583
582
}
584
583
585
584
return 0 ;
0 commit comments