mirror of https://github.com/OpenRCT2/OpenRCT2.git
do not shift viewport pixels on OpenGL
This commit is contained in:
parent
a8fed0c4b8
commit
932dec75d0
|
@ -23,6 +23,16 @@
|
|||
struct rct_drawpixelinfo;
|
||||
interface IDrawingContext;
|
||||
|
||||
enum DRAWING_ENGINE_FLAGS
|
||||
{
|
||||
DEF_NONE = 0,
|
||||
|
||||
/**
|
||||
* Whether or not the engine will only draw changed blocks of the screen each frame.
|
||||
*/
|
||||
DEF_DIRTY_OPTIMISATIONS = 1 << 0,
|
||||
};
|
||||
|
||||
interface IDrawingEngine
|
||||
{
|
||||
virtual ~IDrawingEngine() { }
|
||||
|
@ -36,6 +46,8 @@ interface IDrawingEngine
|
|||
virtual sint32 Screenshot() abstract;
|
||||
|
||||
virtual IDrawingContext * GetDrawingContext(rct_drawpixelinfo * dpi) abstract;
|
||||
|
||||
virtual DRAWING_ENGINE_FLAGS GetFlags() abstract;
|
||||
};
|
||||
|
||||
namespace DrawingEngineFactory
|
||||
|
|
|
@ -66,6 +66,16 @@ extern "C"
|
|||
_drawingEngine = nullptr;
|
||||
}
|
||||
|
||||
bool drawing_engine_has_dirty_optimisations()
|
||||
{
|
||||
bool result = false;
|
||||
if (_drawingEngine != nullptr)
|
||||
{
|
||||
result = (_drawingEngine->GetFlags() & DEF_DIRTY_OPTIMISATIONS);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void gfx_set_dirty_blocks(sint16 left, sint16 top, sint16 right, sint16 bottom)
|
||||
{
|
||||
if (_drawingEngine != nullptr)
|
||||
|
|
|
@ -27,6 +27,8 @@ void drawing_engine_set_palette(SDL_Color * colours);
|
|||
void drawing_engine_draw();
|
||||
void drawing_engine_dispose();
|
||||
|
||||
bool drawing_engine_has_dirty_optimisations();
|
||||
|
||||
#ifdef _cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -202,6 +202,11 @@ public:
|
|||
return _drawingContext;
|
||||
}
|
||||
|
||||
DRAWING_ENGINE_FLAGS GetFlags() override
|
||||
{
|
||||
return DEF_NONE;
|
||||
}
|
||||
|
||||
rct_drawpixelinfo * GetDPI()
|
||||
{
|
||||
return &_bitsDPI;
|
||||
|
|
|
@ -327,6 +327,11 @@ public:
|
|||
return _drawingContext;
|
||||
}
|
||||
|
||||
DRAWING_ENGINE_FLAGS GetFlags() override
|
||||
{
|
||||
return DEF_DIRTY_OPTIMISATIONS;
|
||||
}
|
||||
|
||||
rct_drawpixelinfo * GetDPI()
|
||||
{
|
||||
return &_bitsDPI;
|
||||
|
|
|
@ -395,7 +395,8 @@ void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_6E7F34(rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff){
|
||||
void viewport_shift_pixels(rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
|
||||
{
|
||||
rct_window* orignal_w = w;
|
||||
int left = 0, right = 0, top = 0, bottom = 0;
|
||||
|
||||
|
@ -430,7 +431,8 @@ void sub_6E7F34(rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_d
|
|||
sub_6E7FF3(w, viewport, x_diff, y_diff);
|
||||
}
|
||||
|
||||
void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
||||
void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
||||
{
|
||||
uint8 zoom = (1 << viewport->zoom);
|
||||
|
||||
// Note: do not do the subtraction and then divide!
|
||||
|
@ -497,7 +499,9 @@ void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
|||
return;
|
||||
}
|
||||
|
||||
sub_6E7F34(w, viewport, x_diff, y_diff);
|
||||
if (drawing_engine_has_dirty_optimisations()) {
|
||||
viewport_shift_pixels(w, viewport, x_diff, y_diff);
|
||||
}
|
||||
|
||||
memcpy(viewport, &view_copy, sizeof(rct_viewport));
|
||||
}
|
||||
|
@ -625,7 +629,7 @@ void viewport_update_position(rct_window *window)
|
|||
y += viewport->view_y;
|
||||
}
|
||||
|
||||
sub_6E7DE1(x, y, window, viewport);
|
||||
viewport_move(x, y, window, viewport);
|
||||
}
|
||||
|
||||
void viewport_update_sprite_follow(rct_window *window)
|
||||
|
@ -641,7 +645,7 @@ void viewport_update_sprite_follow(rct_window *window)
|
|||
int center_x, center_y;
|
||||
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, ¢er_x, ¢er_y, window->viewport);
|
||||
|
||||
sub_6E7DE1(center_x, center_y, window, window->viewport);
|
||||
viewport_move(center_x, center_y, window, window->viewport);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue