LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Там и есть указатель, имена у элементов материала выглядит так

static_object * so; //передаётся рендеру

so->renderable //меш
so->material   //материал

renderable и material это хандлеры ассетов в них указатель на структуры

so->material->ptr; // хранит материал, тоесть доступ к структуре material прямой.

Далее так, у каждого renderable есть renderable_surface тоесть 
модель одна человек а честей у него много, голова, рука, нога, у каждого renderable_surface есть свой material_entry

so->rendetable->renderable_surface[i]
so->material->ptr->material_entry[i] 

И уже в material_enry лежит массив c union`нами в которых лежат параметры

/*тут не реальный вид, а просто более наглядный*/
so->material->ptr->material_entry[i]->material_item->names[j];
so->material->ptr->material_entry[i]->material_item->types[j];
so->material->ptr->material_entry[i]->material_item->items[j];

Поиск ведётся по names возвращается это


typedef union {
  int  as_int;
  bool as_bool;
  float as_float;
  vec2 as_vec2;
  vec3 as_vec3;
  vec4 as_vec4;
  asset_hndl as_asset;
} material_item;

Нужный элемент извлекается и передаётся шейдеру, важно ещё то что шейдеру нужно отдавать имена в виде строк что бы получить локацию данных в слинкованом шейдере и уже потом отдать по этому адресу значение.

Исходная версия Deleted, :

Там и есть указатель, имена у элементов материала выглядит так

static_object * so; //передаётся рендеру

so->renderable //меш
so->material   //материал

renderable и material это хандлеры ассетов в них указатель на структуры

so->material->ptr; // хранит материал, тоесть доступ к структуре material прямой.

Далее так, у каждого renderable есть renderable_surface тоесть 
модель одна человек а честей у него много, голова, рука, нога, у каждого renderable_surface есть свой material_entry

so->rendetable->renderable_surface[i]
so->material->ptr->material_entry[i] 

И уже в material_enry лежит массив c union`нами в которых лежат параметры

/*тут не реальный вид, а просто более наглядный*/
so->material->ptr->material_entry[i]->material_item->names[j];
so->material->ptr->material_entry[i]->material_item->types[j];
so->material->ptr->material_entry[i]->material_item->items[j];

Поиск ведётся по names возвращается это


typedef union {
  int  as_int;
  bool as_bool;
  float as_float;
  vec2 as_vec2;
  vec3 as_vec3;
  vec4 as_vec4;
  asset_hndl as_asset;
} material_item;

Нужный элемент извлекается и передаётся шейдеру, вадно ещё то что шейдеру нужно отдавать имена в виде строк что бы получить локацию данных в слинкованом шейдере и уже потом отдать по этому адресу значение.