/** * @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; }
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); }
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; } }
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 ); }
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); }
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); }
void Window::getDrawBlendMode( BlendMode& mode ) const noexcept { SDL_BlendMode sdlm = sdlBlend_( mode ); SDL_GetRenderDrawBlendMode( m_wimpl->renderer, &sdlm ); }
u8_t Renderer::getBlendMode() const { SDL_BlendMode blend_mode; SDL_GetRenderDrawBlendMode(_renderer, &blend_mode); return blend_mode; }