Advertisement
Tkap1

Untitled

Oct 4th, 2022
898
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. func void sorted_pass(s_m4 projection)
  2. {
  3.     m_timed_function();
  4.  
  5.     qsort(rendering->sorted_elements.elements, rendering->sorted_elements.count, sizeof(*rendering->sorted_elements.elements), qsort_sorted_elements);
  6.  
  7.     u32 last_vao = c_max_u32;
  8.     int last_shader = -1;
  9.     int last_texture = -1;
  10.  
  11.     for(int i = 0; i < rendering->sorted_elements.count; i++)
  12.     {
  13.         s_sorted_element* element = arr_get(&rendering->sorted_elements, i);
  14.         s_mesh* mesh = &rendering->meshes[element->mesh];
  15.  
  16.         if(at_least(1, element->instances) > mesh->data_vbo.max_elements)
  17.         {
  18.             mesh->data_vbo.set_max_elements(at_least(1, element->instances));
  19.             last_vao = mesh->vao;
  20.         }
  21.         else if(last_vao != mesh->vao)
  22.         {
  23.             last_vao = mesh->vao;
  24.             glBindVertexArray(mesh->vao);
  25.             mesh->data_vbo.bind();
  26.         }
  27.         if(last_shader != element->shader)
  28.         {
  29.             last_shader = element->shader;
  30.             rendering->shaders[element->shader].use();
  31.             rendering->shaders[element->shader].set_matrix("projection", projection);
  32.  
  33.  
  34.             if(g_shader_data[element->shader].noise64_index >= 0)
  35.             {
  36.                 assert(g_shader_data[element->shader].noise64_index < 4);
  37.  
  38.                 glActiveTexture(GL_TEXTURE0 + g_shader_data[element->shader].noise64_index);
  39.                 glBindTexture(GL_TEXTURE_2D, rendering->textures[e_texture_noise64].id);
  40.             }
  41.  
  42.             else if(g_shader_data[element->shader].noise256_index >= 0)
  43.             {
  44.                 assert(g_shader_data[element->shader].noise256_index < 4);
  45.  
  46.                 glActiveTexture(GL_TEXTURE0 + g_shader_data[element->shader].noise256_index);
  47.                 glBindTexture(GL_TEXTURE_2D, rendering->textures[e_texture_noise256].id);
  48.             }
  49.  
  50.             if(g_shader_data[element->shader].send_time)
  51.             {
  52.                 rendering->shaders[element->shader].set_float("time", total_time);
  53.             }
  54.  
  55.             else if(g_shader_data[element->shader].send_real_time)
  56.             {
  57.                 rendering->shaders[element->shader].set_float("time", real_total_time);
  58.             }
  59.         }
  60.  
  61.         if(last_texture != element->texture)
  62.         {
  63.             last_texture = element->texture;
  64.             glActiveTexture(GL_TEXTURE0);
  65.             glBindTexture(GL_TEXTURE_2D, rendering->textures[element->texture].id);
  66.         }
  67.  
  68.         glBufferSubData(
  69.             GL_ARRAY_BUFFER,
  70.             0,
  71.             mesh->data_vbo.stride * at_least(1, element->instances),
  72.             (float*)element->data
  73.         );
  74.  
  75.         if(element->clip_rect.w > 0)
  76.         {
  77.             glEnable(GL_SCISSOR_TEST);
  78.             float y = c_world_size.y - (element->clip_rect.y + element->clip_rect.h);
  79.             glScissor((int)element->clip_rect.x, (int)y, (int)element->clip_rect.w, (int)element->clip_rect.h);
  80.         }
  81.  
  82.         if(element->instances > 1)
  83.         {
  84.             glDrawArraysInstanced(mesh->draw_type, 0, mesh->vertices_count, element->instances);
  85.         }
  86.         else
  87.         {
  88.             glDrawArrays(mesh->draw_type, 0, mesh->vertices_count);
  89.         }
  90.  
  91.         if(element->clip_rect.w > 0)
  92.         {
  93.             glDisable(GL_SCISSOR_TEST);
  94.         }
  95.     }
  96.     rendering->sorted_elements.count = 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement