EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *d) { DXGI_OUTDUPL_FRAME_INFO info; ComPtr<ID3D11Texture2D> tex; ComPtr<IDXGIResource> res; HRESULT hr; hr = d->duplicator->AcquireNextFrame(0, &info, res.Assign()); if (hr == DXGI_ERROR_ACCESS_LOST) { return false; } else if (hr == DXGI_ERROR_WAIT_TIMEOUT) { return true; } else if (FAILED(hr)) { blog(LOG_ERROR, "gs_duplicator_update_frame: Failed to update " "frame (%08lX)", hr); return true; } hr = res->QueryInterface(__uuidof(ID3D11Texture2D), (void**)tex.Assign()); if (FAILED(hr)) { blog(LOG_ERROR, "gs_duplicator_update_frame: Failed to query " "ID3D11Texture2D (%08lX)", hr); d->duplicator->ReleaseFrame(); return true; } copy_texture(d, tex); d->duplicator->ReleaseFrame(); return true; }
int brush_texture_set_nr(Brush *brush, int nr) { ID *idtest, *id=NULL; id= (ID *)brush->mtex.tex; idtest= (ID*)BLI_findlink(&G.main->tex, nr-1); if(idtest==NULL) { /* new tex */ if(id) idtest= (ID *)copy_texture((Tex *)id); else idtest= (ID *)add_texture("Tex"); idtest->us--; } if(idtest!=id) { brush_texture_delete(brush); brush->mtex.tex= (Tex*)idtest; id_us_plus(idtest); return 1; } return 0; }
int id_copy(ID *id, ID **newid, int test) { if(!test) *newid= NULL; /* conventions: * - make shallow copy, only this ID block * - id.us of the new ID is set to 1 */ switch(GS(id->name)) { case ID_SCE: return 0; /* can't be copied from here */ case ID_LI: return 0; /* can't be copied from here */ case ID_OB: if(!test) *newid= (ID*)copy_object((Object*)id); return 1; case ID_ME: if(!test) *newid= (ID*)copy_mesh((Mesh*)id); return 1; case ID_CU: if(!test) *newid= (ID*)copy_curve((Curve*)id); return 1; case ID_MB: if(!test) *newid= (ID*)copy_mball((MetaBall*)id); return 1; case ID_MA: if(!test) *newid= (ID*)copy_material((Material*)id); return 1; case ID_TE: if(!test) *newid= (ID*)copy_texture((Tex*)id); return 1; case ID_IM: if(!test) *newid= (ID*)copy_image((Image*)id); return 1; case ID_LT: if(!test) *newid= (ID*)copy_lattice((Lattice*)id); return 1; case ID_LA: if(!test) *newid= (ID*)copy_lamp((Lamp*)id); return 1; case ID_SPK: if(!test) *newid= (ID*)copy_speaker((Speaker*)id); return 1; case ID_CA: if(!test) *newid= (ID*)copy_camera((Camera*)id); return 1; case ID_IP: return 0; /* deprecated */ case ID_KE: if(!test) *newid= (ID*)copy_key((Key*)id); return 1; case ID_WO: if(!test) *newid= (ID*)copy_world((World*)id); return 1; case ID_SCR: return 0; /* can't be copied from here */ case ID_VF: return 0; /* not implemented */ case ID_TXT: if(!test) *newid= (ID*)copy_text((Text*)id); return 1; case ID_SCRIPT: return 0; /* deprecated */ case ID_SO: return 0; /* not implemented */ case ID_GR: if(!test) *newid= (ID*)copy_group((Group*)id); return 1; case ID_AR: if(!test) *newid= (ID*)copy_armature((bArmature*)id); return 1; case ID_AC: if(!test) *newid= (ID*)copy_action((bAction*)id); return 1; case ID_NT: if(!test) *newid= (ID*)ntreeCopyTree((bNodeTree*)id); return 1; case ID_BR: if(!test) *newid= (ID*)copy_brush((Brush*)id); return 1; case ID_PA: if(!test) *newid= (ID*)psys_copy_settings((ParticleSettings*)id); return 1; case ID_WM: return 0; /* can't be copied from here */ case ID_GD: return 0; /* not implemented */ } return 0; }
void make_local_texture(Tex *tex) { Main *bmain= G.main; Tex *texn; Material *ma; World *wrld; Lamp *la; Brush *br; ParticleSettings *pa; int a, local=0, lib=0; /* - only lib users: do nothing * - only local users: set flag * - mixed: make copy */ if(tex->id.lib==NULL) return; /* special case: ima always local immediately */ if(tex->ima) { tex->ima->id.lib= NULL; tex->ima->id.flag= LIB_LOCAL; new_id(&bmain->image, (ID *)tex->ima, NULL); } if(tex->id.us==1) { tex->id.lib= NULL; tex->id.flag= LIB_LOCAL; new_id(&bmain->tex, (ID *)tex, NULL); return; } ma= bmain->mat.first; while(ma) { for(a=0; a<MAX_MTEX; a++) { if(ma->mtex[a] && ma->mtex[a]->tex==tex) { if(ma->id.lib) lib= 1; else local= 1; } } ma= ma->id.next; } la= bmain->lamp.first; while(la) { for(a=0; a<MAX_MTEX; a++) { if(la->mtex[a] && la->mtex[a]->tex==tex) { if(la->id.lib) lib= 1; else local= 1; } } la= la->id.next; } wrld= bmain->world.first; while(wrld) { for(a=0; a<MAX_MTEX; a++) { if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) { if(wrld->id.lib) lib= 1; else local= 1; } } wrld= wrld->id.next; } br= bmain->brush.first; while(br) { if(br->mtex.tex==tex) { if(br->id.lib) lib= 1; else local= 1; } br= br->id.next; } pa= bmain->particle.first; while(pa) { for(a=0; a<MAX_MTEX; a++) { if(pa->mtex[a] && pa->mtex[a]->tex==tex) { if(pa->id.lib) lib= 1; else local= 1; } } pa= pa->id.next; } if(local && lib==0) { tex->id.lib= NULL; tex->id.flag= LIB_LOCAL; new_id(&bmain->tex, (ID *)tex, NULL); } else if(local && lib) { texn= copy_texture(tex); texn->id.us= 0; ma= bmain->mat.first; while(ma) { for(a=0; a<MAX_MTEX; a++) { if(ma->mtex[a] && ma->mtex[a]->tex==tex) { if(ma->id.lib==NULL) { ma->mtex[a]->tex= texn; texn->id.us++; tex->id.us--; } } } ma= ma->id.next; } la= bmain->lamp.first; while(la) { for(a=0; a<MAX_MTEX; a++) { if(la->mtex[a] && la->mtex[a]->tex==tex) { if(la->id.lib==NULL) { la->mtex[a]->tex= texn; texn->id.us++; tex->id.us--; } } } la= la->id.next; } wrld= bmain->world.first; while(wrld) { for(a=0; a<MAX_MTEX; a++) { if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) { if(wrld->id.lib==NULL) { wrld->mtex[a]->tex= texn; texn->id.us++; tex->id.us--; } } } wrld= wrld->id.next; } br= bmain->brush.first; while(br) { if(br->mtex.tex==tex) { if(br->id.lib==NULL) { br->mtex.tex= texn; texn->id.us++; tex->id.us--; } } br= br->id.next; } pa= bmain->particle.first; while(pa) { for(a=0; a<MAX_MTEX; a++) { if(pa->mtex[a] && pa->mtex[a]->tex==tex) { if(pa->id.lib==NULL) { pa->mtex[a]->tex= texn; texn->id.us++; tex->id.us--; } } } pa= pa->id.next; } } }