История изменений
Исправление 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;
Нужный элемент извлекается и передаётся шейдеру, вадно ещё то что шейдеру нужно отдавать имена в виде строк что бы получить локацию данных в слинкованом шейдере и уже потом отдать по этому адресу значение.