static bool load_texture_sampler(texture_t tex, samplerstate_t ss) { bool success = true; if (tex->cur_sampler == ss) return true; if (tex->cur_sampler) samplerstate_release(tex->cur_sampler); tex->cur_sampler = ss; if (!ss) return true; samplerstate_addref(ss); if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MIN_FILTER, ss->min_filter)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MAG_FILTER, ss->mag_filter)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_S, ss->address_u)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_T, ss->address_v)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_R, ss->address_w)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, ss->max_anisotropy)) success = false; return success; }
void gs_samplerstate_destroy(gs_samplerstate_t samplerstate) { if (!samplerstate) return; if (samplerstate->device) for (int i = 0; i < GS_MAX_TEXTURES; i++) if (samplerstate->device->cur_samplers[i] == samplerstate) samplerstate->device->cur_samplers[i] = NULL; samplerstate_release(samplerstate); }
static bool load_texture_sampler(gs_texture_t tex, gs_samplerstate_t ss) { bool success = true; GLint min_filter; if (tex->cur_sampler == ss) return true; if (tex->cur_sampler) samplerstate_release(tex->cur_sampler); tex->cur_sampler = ss; if (!ss) return true; samplerstate_addref(ss); min_filter = ss->min_filter; if (gs_texture_is_rect(tex)) strip_mipmap_filter(&min_filter); if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MIN_FILTER, min_filter)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MAG_FILTER, ss->mag_filter)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_S, ss->address_u)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_T, ss->address_v)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_WRAP_R, ss->address_w)) success = false; if (!gl_tex_param_i(tex->gl_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, ss->max_anisotropy)) success = false; apply_swizzle(tex); return success; }
void samplerstate_destroy(samplerstate_t samplerstate) { samplerstate_release(samplerstate); }