コード例 #1
0
ファイル: display.c プロジェクト: ahaggan/ArtC
void make_text(SDL_Win *win, SDL_Rect *location, TTF_Font *font, char* text, 
                 int r, int g, int b) {
    SDL_Color textcolour = {r,g,b,255};
    SDL_Surface* textsurface = TTF_RenderText_Blended(font, text, textcolour);
    SDL_Texture* texttexture = surface_to_texture(textsurface, win);
    SDL_RenderCopy(win->renderer, texttexture, NULL, location);
    SDL_DestroyTexture(texttexture);
}
コード例 #2
0
ファイル: ft_query_sdl.c プロジェクト: OncleTif/corewar
void	ft_query_corewar_texture(t_sdl *sdl, SDL_Surface *solid)
{
	solid = TTF_RenderText_Blended(sdl->font, "COREWAR GAME", BACKGROUNDCOLOR);
	sdl->solid_texture = surface_to_texture(solid, sdl->renderer);
	SDL_QueryTexture(sdl->solid_texture, NULL, NULL,
		&sdl->solid_rect.w, &sdl->solid_rect.h);
	sdl->solid_rect.x = 1420;
	sdl->solid_rect.y = 20;
}
コード例 #3
0
ファイル: tcache.c プロジェクト: wilkie/openomf
SDL_Texture* tcache_get(surface *sur,
                        screen_palette *pal,
                        char *remap_table,
                        uint8_t pal_offset) {

    if(sur == NULL || sur->w == 0 || sur->h == 0 || sur->data == NULL) {
        if(sur != NULL) {
            DEBUG("Invalid surface requested from tcache: w,h = %d,%d data = %p", sur->w, sur->h, sur->data);
        } else {
            DEBUG("Invalid surface requested from tcache: w,h = %d,%d surface = %p", sur->w, sur->h, sur);
        }
        return NULL;
    }

    // Form a key
    tcache_entry_key key;
    memset(&key, 0, sizeof(tcache_entry_key));
    key.c_pal_offset = (sur->type == SURFACE_TYPE_RGBA) ? 0 : pal_offset;
    key.c_remap_table = (sur->type == SURFACE_TYPE_RGBA) ? 0 : remap_table;
    key.c_surface = sur;
    key.w = sur->w;
    key.h = sur->h;

    // Attempt to find appropriate surface
    // If surface is cacheable and hasn't changed, just return here.
    tcache_entry_value *val = tcache_get_entry(&key);
    if(val != NULL && (val->pal_version == pal->version || sur->type == SURFACE_TYPE_RGBA) && !sur->force_refresh) {
        val->age = 0;
        cache->hits++;
        return val->tex;
    }

    // Reset refresh flag here
    sur->force_refresh = 0;

    // If there was no fitting surface tex in the cache at all,
    // then we need to create one
    if(val == NULL) {
        tcache_entry_value new_entry;
        new_entry.age = 0;
        new_entry.pal_version = pal->version;
        new_entry.tex = SDL_CreateTexture(cache->renderer,
                                          SDL_PIXELFORMAT_ABGR8888,
                                          SDL_TEXTUREACCESS_STREAMING,
                                          sur->w * cache->scale_factor,
                                          sur->h * cache->scale_factor);
        SDL_SetTextureBlendMode(new_entry.tex, SDL_BLENDMODE_BLEND);
        val = tcache_add_entry(&key, &new_entry);
    }

    // We have a texture either from the cache, or we just created one.
    // Either one, it needs to be updated. Let's do it now.
    // Also, scale surface if necessary
    if(cache->scale_factor > 1) {
        char *raw = malloc(sur->w * sur->h * 4);
        surface scaled;
        surface_create(&scaled,
                       SURFACE_TYPE_RGBA,
                       sur->w * cache->scale_factor,
                       sur->h * cache->scale_factor);

        surface_to_rgba(sur, raw, pal, remap_table, pal_offset);
        scaler_scale(cache->scaler, raw, scaled.data, sur->w, sur->h, cache->scale_factor);
        surface_to_texture(&scaled, val->tex, pal, remap_table, pal_offset);
        surface_free(&scaled);
        free(raw);
    } else {
        surface_to_texture(sur, val->tex, pal, remap_table, pal_offset);
    }

    // Set correct age and palette version
    val->age = 0;
    val->pal_version = pal->version;

    // Do some statistics stuff
    cache->misses++;
    return val->tex;
}