/* ======================================= 生成 DX8 图形离屏表面 ======================================= */ CR_API iGFX2_DX8S* create_dx8_bitmap ( __CR_IN__ iGFX2_DX8M* device, __CR_IN__ sD3D8_TEXR* texture, __CR_IN__ bool_t dynamic ) { iGFX2_DX8S* rett; /* 必须是 2D 贴图 */ if (texture->face != 1) return (NULL); /* 生成对象并设置图片参数 */ rett = struct_new(iGFX2_DX8S); if (rett == NULL) return (NULL); if (!image_set(&rett->__back__, NULL, (leng_t)(-1L), 0, 0, texture->info.Width, texture->info.Height, image_d3d_to_crh(texture->info.Format), FALSE, 8)) { rect_set_wh(&rett->__back__.clip_win, 0, 0, texture->info.Width, texture->info.Height); struct_cpy(&rett->__back__.position, &rett->__back__.clip_win, sRECT); } /* 返回生成的对象 */ rett->__vptr__ = &s_bitmap_vtbl; rett->m_flags = dynamic ? D3DLOCK_DISCARD : 0; rett->m_device = device; rett->m_texture = texture; return (rett); }
void image_map(image* i, vec4(*f)(vec4)) { for (int x = 0; x < i->width; x++) for (int y = 0; y < i->height; y++) { image_set(i, x, y, f(image_get(i, x, y))); } }