inline void gs_shader::UpdateParam(vector<uint8_t> &constData, gs_shader_param ¶m, bool &upload) { if (param.type != GS_SHADER_PARAM_TEXTURE) { if (!param.curValue.size()) throw "Not all shader parameters were set"; /* padding in case the constant needs to start at a new * register */ if (param.pos > constData.size()) { uint8_t zero = 0; constData.insert(constData.end(), param.pos - constData.size(), zero); } constData.insert(constData.end(), param.curValue.begin(), param.curValue.end()); if (param.changed) { upload = true; param.changed = false; } } else if (param.curValue.size() == sizeof(gs_texture_t*)) { gs_texture_t *tex; memcpy(&tex, param.curValue.data(), sizeof(gs_texture_t*)); device_load_texture(device, tex, param.textureID); } }
void shader_update_textures(struct gs_shader *shader) { size_t i; for (i = 0; i < shader->params.num; i++) { struct shader_param *param = shader->params.array+i; if (param->type == SHADER_PARAM_TEXTURE) device_load_texture(shader->device, param->texture, param->texture_id); } }