/**
 * @brief Test to see if we can vary the blend mode. Helper function.
 *
 * \sa
 * http://wiki.libsdl.org/moin.cgi/SDL_SetRenderDrawBlendMode
 * http://wiki.libsdl.org/moin.cgi/SDL_GetRenderDrawBlendMode
 */
static int
_hasBlendModes (void)
{
   int fail;
   int ret;
   SDL_BlendMode mode;

   fail = 0;

   ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND );
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
   if (!_isSupported(ret))
      fail = 1;
   ret = (mode != SDL_BLENDMODE_BLEND);
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD );
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
   if (!_isSupported(ret))
      fail = 1;
   ret = (mode != SDL_BLENDMODE_ADD);
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_MOD );
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
   if (!_isSupported(ret))
      fail = 1;
   ret = (mode != SDL_BLENDMODE_MOD);
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE );
   if (!_isSupported(ret))
      fail = 1;
   ret = SDL_GetRenderDrawBlendMode(renderer, &mode );
   if (!_isSupported(ret))
      fail = 1;
   ret = (mode != SDL_BLENDMODE_NONE);
   if (!_isSupported(ret))
      fail = 1;

   return !fail;
}
Example #2
0
    bool Graphics::get_use_alpha_blending() const
    {
        if(!window) throw Exception("No window or renderer available.");

        SDL_BlendMode blend_mode;
        if(SDL_GetRenderDrawBlendMode(window->get_renderer(), &blend_mode) != 0) throw SDLException();

        return (blend_mode == SDL_BLENDMODE_BLEND);
    }
Example #3
0
		int LOBJECT_METHOD(getRenderBlendMode, SDL_Renderer * renderer){
			SDL_BlendMode mode;
			if (SDL_GetRenderDrawBlendMode(renderer, &mode)==0){
				state.push_integer(mode);
				return 1;
			}else{
				return 0;
			}

		}
Example #4
0
 TemporaryOffscreenRenderMode(SDL_Renderer * master)
 {
     renderer = master;
     texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, Sys::shape.w, Sys::shape.h);
     SDL_SetRenderTarget(renderer, texture);
     SDL_SetTextureBlendMode( texture, SDL_BLENDMODE_BLEND );
     
     SDL_BlendMode temp;
     SDL_GetRenderDrawBlendMode( renderer, &temp );
     
     SDL_SetRenderDrawBlendMode( renderer, SDL_BLENDMODE_NONE );
     SDL_SetRenderDrawColor( renderer, 127, 0, 255, 0 ); // RGBs are to detect improper blending
     SDL_RenderFillRect( renderer, &shape );
     
     SDL_SetRenderDrawBlendMode( renderer, temp );
 }
Example #5
0
void SDLRenderer::drawRect(int w, int h, int x, int y, bool fill, Colorb col)
{
    static SDL_Rect rect;
    rect.w = w;
    rect.h = h;
    rect.x = x;
    rect.y = y;

    SDL_BlendMode oldMode;
    SDL_GetRenderDrawBlendMode(m_renderer, &oldMode);
    SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_BLEND);
    SDL_SetRenderDrawColor(m_renderer, (int)(col.r), (int)(col.g), (int)(col.b), (int)(col.a));
    if (fill)
        SDL_RenderFillRect(m_renderer, &rect);
    else
        SDL_RenderDrawRect(m_renderer, &rect);
    SDL_SetRenderDrawBlendMode(m_renderer, oldMode);
}
Example #6
0
void LifeForm::render(SDL_Renderer* renderer)
{
    auto world = m_world.lock();
    if (!world) {
        return;
    }
    const WorldRect viewport(world->get_viewport());

    if (!m_visited_tiles.empty()) {
        SDL_BlendMode oldMode;
        int rv = SDL_GetRenderDrawBlendMode(renderer, &oldMode);
        if (rv != 0) {
            SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "Failed to get blend mode: %s", SDL_GetError());
        }
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 30);
        SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
        const WorldRect bigger_view(geom::rect::enlarge(viewport, TILE_WIDTH));
        for (auto tile : m_visited_tiles) {
            int x, y;
            std::tie(x, y) = tile;
            const WorldRect tile_rect(x * TILE_WIDTH, y * TILE_HEIGHT,
                                      TILE_WIDTH, TILE_HEIGHT);
            if (!tile_rect.is_inside(bigger_view)) {
                continue;
            }
            SDL_Rect rect(world->to_sdl_rect(tile_rect));
            SDL_RenderFillRect(renderer, &rect);
        }
        SDL_SetRenderDrawBlendMode(renderer, oldMode);
    }

    const WorldRect body((int32_t)round(m_pos_x) - width/2,
                         (int32_t)round(m_pos_y) - width/2,
                         width, height);
    if (!body.is_inside(geom::rect::enlarge(viewport, width))) {
        return;
    }

    SDL_Rect rect(world->to_sdl_rect(body));
    SDL_SetRenderDrawColor(renderer, 255, 255, m_focused ? 0 : 255, 255);
    SDL_RenderFillRect(renderer, &rect);
}
Example #7
0
void Window::getDrawBlendMode( BlendMode& mode ) const noexcept
{
    SDL_BlendMode sdlm = sdlBlend_( mode );
    SDL_GetRenderDrawBlendMode( m_wimpl->renderer, &sdlm );
}
Example #8
0
    u8_t Renderer::getBlendMode() const {
        SDL_BlendMode blend_mode;
        SDL_GetRenderDrawBlendMode(_renderer, &blend_mode);

        return blend_mode;
    }