static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) { int loc; glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; (void)data; if (!glsl || !glsl->shader->modern) { gl_ff_matrix(mat); return false; } loc = glsl->uniforms[glsl->active_idx].mvp; if (loc >= 0) { if ( (current_idx != glsl->active_idx) || (mat->data != current_mat_data_pointer[glsl->active_idx]) || (*mat->data != current_mat_data[glsl->active_idx])) { glUniformMatrix4fv(loc, 1, GL_FALSE, mat->data); current_idx = glsl->active_idx; current_mat_data_pointer[glsl->active_idx] = (float*)mat->data; current_mat_data[glsl->active_idx] = *mat->data; } } return true; }
static bool shader_null_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) { #ifdef HAVE_OPENGL #ifndef NO_GL_FF_MATRIX if (string_is_equal(video_driver_get_ident(), "gl")) gl_ff_matrix(mat); #endif #endif return false; }
static bool gl_cg_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) { cg_shader_data_t *cg_data = (cg_shader_data_t*)shader_data; if (cg_data && cg_data->prg[cg_data->active_idx].mvp) { cgGLSetMatrixParameterfc(cg_data->prg[cg_data->active_idx].mvp, mat->data); return true; } gl_ff_matrix(mat); return false; }
static bool shader_null_set_mvp(void *data, const math_matrix_4x4 *mat) { #ifdef HAVE_OPENGL #ifndef NO_GL_FF_MATRIX gl_t *gl = (gl_t*)video_driver_get_ptr(NULL); if (gl) { gl_ff_matrix(mat); } #endif #endif return false; }
static bool gl_cg_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) { cg_shader_data_t *cg = (cg_shader_data_t*)shader_data; if (!cg || !cg->prg[cg->active_idx].mvp) goto fallback; cgGLSetMatrixParameterfc(cg->prg[cg->active_idx].mvp, mat->data); return true; fallback: gl_ff_matrix(mat); return false; }
static bool gl_cg_set_mvp(void *data, const math_matrix_4x4 *mat) { driver_t *driver = driver_get_ptr(); cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; (void)data; if (cg && cg->prg[cg->active_idx].mvp) { cgGLSetMatrixParameterfc(cg->prg[cg->active_idx].mvp, mat->data); return true; } gl_ff_matrix(mat); return false; }
static bool gl_cg_set_mvp(void *data, const math_matrix_4x4 *mat) { cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; (void)data; if (cg && cg->prg[cg->active_idx].mvp) { cgGLSetMatrixParameterfc(cg->prg[cg->active_idx].mvp, mat->data); return true; } #ifndef NO_GL_FF_MATRIX gl_ff_matrix(mat); #endif return false; }
static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) { int loc; glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; (void)data; if (!glsl || !glsl->shader->modern) { gl_ff_matrix(mat); return false; } loc = glsl->gl_uniforms[glsl->glsl_active_index].mvp; if (loc >= 0) glUniformMatrix4fv(loc, 1, GL_FALSE, mat->data); return true; }