void Sprite::apply_Texture() const { static bool no_recurse = true; if(no_recurse) no_recurse = false; else throw Sprite_Containing_Sprite(); if(m_frames.empty() || m_frame < 0 || m_frame >= int(m_frames.size())) throw Frame_Out_of_Range(); try { get_Textures().apply_Texture(m_frames[size_t(m_frame)].second); } catch(Database_Entry_Not_Found &) { try { m_frames[size_t(m_frame)].second = get_Textures().get_id(m_frames[size_t(m_frame)].first); get_Textures().apply_Texture(m_frames[size_t(m_frame)].second); } catch(...) { no_recurse = true; throw; } } catch(...) { no_recurse = true; throw; } no_recurse = true; }
void set_sprite_frame( const std::string &sprite, const int &frame_number) { return get_Textures().set_current_frame( get_Textures().get_id(sprite), frame_number); }
void Video_DX9::apply_Texture(const unsigned long &id) { get_Textures().apply_Texture(id); m_textured = true; set_fvf(); }
bool Video_DX9::begin_prerender() { assert(!m_render_target && !m_render_to_surface); if(g_video_dx9_reset) { const HRESULT result = m_d3d_device->TestCooperativeLevel(); if(result == D3DERR_DEVICELOST) return false; else if(result == D3DERR_DRIVERINTERNALERROR) throw Video_Device_Failure(); if(result == D3DERR_DEVICENOTRESET) { if(FAILED(m_d3d_device->Reset(m_d3d_parameters))) throw Video_Device_Failure(); g_video_dx9_reset = false; init_context(); } } get_Textures().unlose_resources(); get_Fonts().unlose_resources(); return true; }
void decrement_sprite_frame( const std::string &sprite_name) { Texture &texture = get_Textures() [get_Textures().get_id(sprite_name)]; Sprite * const sprite = dynamic_cast<Sprite *>(&texture); if(!sprite) throw Sprite_Function_Misapplied(); const int frameno = sprite->get_current_frame(), framecap = sprite->get_num_frames(); if(frameno) sprite->set_current_frame(frameno - 1); else sprite->set_current_frame(framecap - 1); }
void Video_GL::render_all() { assert(!m_render_target); #ifdef _WINDOWS glFlush(); #else glFinish(); #endif get_Textures().unlose_resources(); get_Fonts().unlose_resources(); get_Game().prerender(); glViewport(0, 0, get_screen_width(), get_screen_height()); if(!is_zwrite_enabled()) glDepthMask(GL_TRUE); set_clear_color_impl(get_clear_color()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if(!is_zwrite_enabled()) glDepthMask(GL_FALSE); get_Game().render(); /*** Begin CPU saver ***/ #ifdef MANUAL_GL_VSYNC_DELAY Timer &tr = get_Timer(); if(get_vertical_sync()) { Time buffer_swap_start_time = tr.get_time(); const unsigned int time_allowed = 1000u/60u - 2u; const unsigned int new_time_taken = buffer_swap_start_time.get_ticks_since(m_buffer_swap_end_time); m_time_taken = (1.0f - m_weight_new) * m_time_taken + m_weight_new * new_time_taken; if(m_time_taken < time_allowed) SDL_Delay(static_cast<unsigned int>(time_allowed - m_time_taken)); } #endif /// Swap the buffers <-- NOT part of the CPU saver, but the reason it is "needed" #if SDL_VERSION_ATLEAST(1,3,0) SDL_GL_SwapWindow(get_window()); #else SDL_GL_SwapBuffers(); #endif #ifdef MANUAL_GL_VSYNC_DELAY m_buffer_swap_end_time = tr.get_time(); #endif }
void Video_DX9::render_all() { assert(!m_render_target); static bool reset = false; if(reset) { const HRESULT result = m_d3d_device->TestCooperativeLevel(); if(result == D3DERR_DEVICELOST) return; else if(result == D3DERR_DRIVERINTERNALERROR) throw Video_Device_Failure(); if(result == D3DERR_DEVICENOTRESET) { if(FAILED(m_d3d_device->Reset(&m_d3d_parameters))) throw Video_Device_Failure(); reset = false; init_context(); } } get_Textures().unlose_resources(); get_Fonts().unlose_resources(); HRESULT result = m_d3d_device->Present(0, 0, 0, 0); if(result == S_OK) { D3DVIEWPORT9 vp = {0, 0, DWORD(get_screen_width()), DWORD(get_screen_height()), 0, 1}; m_d3d_device->SetViewport(&vp); m_d3d_device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(get_clear_color().r_ub(), get_clear_color().g_ub(), get_clear_color().b_ub()), 1.0f, 0); m_d3d_device->BeginScene(); get_Game().render(); m_d3d_device->EndScene(); } else if(result == D3DERR_DEVICELOST) { reset = true; return; } else if(result == D3DERR_DEVICEREMOVED) { throw Video_Device_Failure(); } }
void Sprite::insert_frame(const String &name, const int &at_this_index) { insert_frame(name, get_Textures().get_id(name), at_this_index); }
void Sprite::append_frame(const String &name) { append_frame(name, get_Textures().get_id(name)); }
int sprite_num_frames( const std::string &sprite) { return get_Textures().get_num_frames( get_Textures().get_id(sprite)); }
bool is_sprite( const std::string &sprite) { return get_Textures().is_sprite( get_Textures().get_id(sprite)); }