static texture_info * texture_update(sdl_window_info *window, const render_primitive *prim) { sdl_info *sdl = (sdl_info *) window->dxdata; quad_setup_data setup; texture_info *texture; compute_setup(sdl, prim, &setup, prim->flags); texture = texture_find(sdl, prim, &setup); // if we didn't find one, create a new texture if (texture == NULL && prim->texture.base != NULL) { texture = texture_create(window, &prim->texture, &setup, prim->flags); } if (texture != NULL) { if (prim->texture.base != NULL && texture->texinfo.seqid != prim->texture.seqid) { texture->texinfo.seqid = prim->texture.seqid; // if we found it, but with a different seqid, copy the data texture_set_data(sdl, texture, &prim->texture, prim->flags); } } return texture; }
int dispatch_remreq_buffer_set_data(struct client_list_entry* client, struct remreq_buffer_set_data* message) { struct client_buffer* target = MAP_DEREF(uint32_t, struct client_buffer*, buffermap, &client->screen->buffers, message->buffer); if(target->remote_texture_layout_may_differ) return texture_set_data(client, message, target); else return buffer_set_data(client, message, target); }
RID VisualServer::texture_create_from_image(const Image& p_image,uint32_t p_flags) { RID texture = texture_create(); texture_allocate(texture,p_image.get_width(), p_image.get_height(), p_image.get_format(), p_flags); //if it has mipmaps, use, else generate ERR_FAIL_COND_V(!texture.is_valid(),texture); texture_set_data(texture, p_image ); return texture; }
texture_t *texture_new_from_buf(const uint8_t *data, int w, int h, int bpp, int flags) { texture_t *tex; tex = calloc(1, sizeof(*tex)); tex->tex_w = next_pow2(w); tex->tex_h = next_pow2(h); tex->w = w; tex->h = h; tex->flags = TF_HAS_TEX | flags; tex->format = (int[]){0, 0, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA}[bpp]; texture_create_empty(tex); texture_set_data(tex, data, w, h, bpp); tex->ref = 1; return tex; }
RID VisualServer::get_white_texture() { if (white_texture.is_valid()) return white_texture; DVector<uint8_t> wt; wt.resize(16*3); { DVector<uint8_t>::Write w =wt.write(); for(int i=0;i<16*3;i++) w[i]=255; } Image white(4,4,0,Image::FORMAT_RGB,wt); white_texture=texture_create(); texture_allocate(white_texture,4,4,Image::FORMAT_RGB); texture_set_data(white_texture,white); return white_texture; }
texture_t *texture_new_image(const char *path) { texture_t *tex; uint8_t *img; int w, h, bpp = 0; img = img_read(path, &w, &h, &bpp); tex = calloc(1, sizeof(*tex)); tex->path = strdup(path); tex->tex_w = next_pow2(w); tex->tex_h = next_pow2(h); tex->w = w; tex->h = h; tex->flags = TF_HAS_TEX; tex->format = (int[]){0, 0, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA}[bpp]; texture_create_empty(tex); texture_set_data(tex, img, w, h, bpp); free(img); tex->ref = 1; LL_APPEND(g_textures, tex); return tex; }
texture_t *texture_new_image(const char *path, int flags) { texture_t *tex; uint8_t *img; int w, h, bpp = 0; img = img_read(path, &w, &h, &bpp); if (!img) { LOG_W("Cannot open image '%s'", path); return NULL; } tex = calloc(1, sizeof(*tex)); tex->path = strdup(path); tex->tex_w = next_pow2(w); tex->tex_h = next_pow2(h); tex->w = w; tex->h = h; tex->flags = TF_HAS_TEX | flags; tex->format = (int[]){0, 0, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA}[bpp]; texture_create_empty(tex); texture_set_data(tex, img, w, h, bpp); free(img); tex->ref = 1; return tex; }