void lazyInitialize() { if (!initialized) { kmMat4 identity; //Temporary identity matrix //Initialize all 3 stacks //modelview_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack)); km_mat4_stack_initialize(&modelview_matrix_stack); //projection_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack)); km_mat4_stack_initialize(&projection_matrix_stack); //texture_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack)); km_mat4_stack_initialize(&texture_matrix_stack); current_stack = &modelview_matrix_stack; initialized = 1; kmMat4Identity(&identity); //Make sure that each stack has the identity matrix km_mat4_stack_push(&modelview_matrix_stack, &identity); km_mat4_stack_push(&projection_matrix_stack, &identity); km_mat4_stack_push(&texture_matrix_stack, &identity); } }
km_mat4_stack_context *lazyInitializeCurrentContext() { km_mat4_stack_context *current_context = (km_mat4_stack_context *)pthread_getspecific(current_context_key); assert(current_context != NULL && "No context set"); if (current_context && !current_context->initialized) { kmMat4 identity; /*Temporary identity matrix*/ /*Initialize all 3 stacks*/ /*modelview_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack));*/ km_mat4_stack_initialize(¤t_context->modelview_matrix_stack); /*projection_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack));*/ km_mat4_stack_initialize(¤t_context->projection_matrix_stack); /*texture_matrix_stack = (km_mat4_stack*) malloc(sizeof(km_mat4_stack));*/ km_mat4_stack_initialize(¤t_context->texture_matrix_stack); current_context->current_stack = ¤t_context->modelview_matrix_stack; current_context->initialized = 1; kmMat4Identity(&identity); /*Make sure that each stack has the identity matrix*/ km_mat4_stack_push(¤t_context->modelview_matrix_stack, &identity); km_mat4_stack_push(¤t_context->projection_matrix_stack, &identity); km_mat4_stack_push(¤t_context->texture_matrix_stack, &identity); } return current_context; }