- #include "renderer_impl.h" 
- #include "include/harness/trace.h" 
- #include <stddef.h> 
-   
- // Provides a harness-specific implementation of the Brender br_renderer* interface 
-   
- extern void* BrResAllocate(void* vparent, br_size_t size, br_uint_8 res_class); 
- extern void BrMatrix34Mul(br_matrix34* A, br_matrix34* B, br_matrix34* C); 
-   
- struct state_all default_state = { 
-     NULL, 
-     { { { BR_VECTOR3(1, 0, 0), /* model_to_view */ 
-           BR_VECTOR3(0, 1, 0), 
-           BR_VECTOR3(0, 0, 1), 
-           BR_VECTOR3(0, 0, 0) } }, 
-   
-         { { BR_VECTOR4(1, 0, 0, 0), /* view_to_screen */ 
-             BR_VECTOR4(0, 1, 0, 0), 
-             BR_VECTOR4(0, 0, 1, 0), 
-             BR_VECTOR4(0, 0, 0, 1) } }, 
-   
-         { { BR_VECTOR3(1, 0, 0), /* view_to_environment */ 
-             BR_VECTOR3(0, 1, 0), 
-             BR_VECTOR3(0, 0, 1), 
-             BR_VECTOR3(0, 0, 0) } }, 
-         0, 
-         0 }, 
- }; 
-   
- static struct br_renderer_dispatch dispatch_table; 
-   
- br_error StateCopy(struct state_all* dest, struct state_all* src, br_uint_32 copy_mask, void* res) { 
-     if (copy_mask & BR_STATE_MATRIX) { 
-         dest->matrix = src->matrix; 
-     } 
-     return 0; 
- } 
-   
- br_error modelMulF(struct br_renderer* r, br_matrix34_f* m) { 
-     harness_br_renderer* self = (harness_br_renderer*)r; 
-     br_matrix34 om = self->state.matrix.model_to_view; 
-   
-     BrMatrix34Mul(&self->state.matrix.model_to_view, (br_matrix34*)m, &om); 
-   
-     // TouchModelToView(self); 
-     return 0; 
- } 
-   
- br_error statePush(struct br_renderer* r, br_uint_32 mask) { 
-     harness_br_renderer* self = (harness_br_renderer*)r; 
-     struct state_all* sp; 
-   
-     if (self->stack_top >= MAX_STATE_STACK) { 
-         LOG_PANIC("state stack overflow!"); 
-     } 
-   
-     sp = self->state_stack + self->stack_top; 
-     self->stack_top++; 
-     return StateCopy(sp, &self->state, mask, self); 
- } 
-   
- br_error statePop(struct br_renderer* r, br_uint_32 mask) { 
-     harness_br_renderer* self = (harness_br_renderer*)r; 
-     br_error result; 
-     struct state_all* sp; 
-   
-     if (self->stack_top <= 0) { 
-         LOG_PANIC("state stack underflow!"); 
-     } 
-   
-     self->stack_top--; 
-     sp = self->state_stack + self->stack_top; 
-     result = StateCopy(&self->state, sp, mask, self); 
-     return result; 
- } 
-   
- br_error stateDefault(struct br_renderer* r, br_uint_32 mask) { 
-     harness_br_renderer* self = (harness_br_renderer*)r; 
-     return StateCopy(&self->state, self->default_state, mask, self); 
- } 
-   
- harness_br_renderer* NewHarnessBrRenderer(void) { 
-   
-     harness_br_renderer* self; 
-   
-     self = BrResAllocate(NULL, sizeof(*self), BR_MEMORY_OBJECT); 
-   
-     if (self == NULL) { 
-         return NULL; 
-     } 
-   
-     dispatch_table._modelMulF = &modelMulF; 
-     dispatch_table._statePush = &statePush; 
-     dispatch_table._statePop = &statePop; 
-   
-     self->default_state = &default_state; 
-     stateDefault((br_renderer*)self, BR_STATE_ALL); 
-   
-     self->dispatch = &dispatch_table; 
-     self->identifier = "harness_renderer_state"; 
-     return self; 
-     // self->device = device; 
-     // self->renderer_facility = facility; 
- } 
-