void CShaderObject::BindStateMatrix(const char* paramName, unsigned int matrix) { // Check and validate bind status // if(!m_bIsBound) return; // Get and validate bind point // int bind_point = glGetUniformLocation(m_shaderObject, paramName); if(bind_point < 0) return; mat4 MV, P, F; mat4_load_identity(MV); mat4_load_identity(P); if(matrix & MATRIX_MODELVIEW) glGetFloatv(GL_MODELVIEW_MATRIX, MV); if(matrix & MATRIX_PROJECTION) glGetFloatv(GL_PROJECTION_MATRIX, P); mat4_mul_mat4(P, MV, F); if(matrix & MATRIX_TRANSPOSE) mat4_transpose(F); glUniformMatrix4fv(bind_point, 1, false, F); }
static void bldg_draw(const bldg_s *bldg) { // Check if in view dist int hx = (bldg->pos[0]>>18); int hz = (bldg->pos[2]>>18); hx -= hmap_visx; hz -= hmap_visz; if(hx < 0) hx = -hx; if(hz < 0) hz = -hz; if(hx > VISRANGE || hz > VISRANGE) return; mat4_load_identity(&mat_obj); mat4_translate_vec3(&mat_obj, (vec3 *)&bldg->pos); //mat4_translate_imm3(&mat_obj, 0, hmap_get(bldg->pos[0], bldg->pos[2]), 0); mesh_draw(bldg->mesh, 0); }