|
@@ -30,24 +30,27 @@ class OpenGLSprite;
|
|
|
class OpenGLBackend : public ZeroedMemoryAllocator, SpriteEncoder {
|
|
|
private:
|
|
|
static OpenGLBackend *instance; ///< Singleton instance pointer.
|
|
|
|
|
|
GLuint vid_pbo; ///< Pixel buffer object storing the memory used for the video driver to draw to.
|
|
|
GLuint vid_texture; ///< Texture handle for the video buffer texture.
|
|
|
GLuint vid_program; ///< Shader program for rendering a RGBA video buffer.
|
|
|
GLuint pal_program; ///< Shader program for rendering a paletted video buffer.
|
|
|
GLuint vao_quad; ///< Vertex array object storing the rendering state for the fullscreen quad.
|
|
|
GLuint vbo_quad; ///< Vertex buffer with a fullscreen quad.
|
|
|
GLuint pal_texture; ///< Palette lookup texture.
|
|
|
|
|
|
GLuint anim_pbo; ///< Pixel buffer object storing the memory used for the animation buffer.
|
|
|
GLuint anim_texture; ///< Texture handle for the animation buffer texture.
|
|
|
|
|
|
GLuint remap_program; ///< Shader program for blending and rendering a RGBA + remap texture.
|
|
|
GLint remap_sprite_loc; ///< Uniform location for sprite parameters.
|
|
|
GLint remap_screen_loc; ///< Uniform location for screen size;
|
|
|
GLint remap_zoom_loc; ///< Uniform location for sprite zoom;
|
|
|
GLint remap_rgb_loc; ///< Uniform location for RGB mode flag;
|
|
|
|
|
|
LRUCache<SpriteID, Sprite> cursor_cache; ///< Cache of encoded cursor sprites.
|
|
|
|
|
|
OpenGLBackend();
|
|
|
~OpenGLBackend();
|
|
|
|
|
|
const char *Init();
|
|
@@ -63,25 +66,27 @@ public:
|
|
|
}
|
|
|
static const char *Create(GetOGLProcAddressProc get_proc);
|
|
|
static void Destroy();
|
|
|
|
|
|
void UpdatePalette(const Colour *pal, uint first, uint length);
|
|
|
bool Resize(int w, int h, bool force = false);
|
|
|
void Paint();
|
|
|
|
|
|
void DrawMouseCursor();
|
|
|
void ClearCursorCache();
|
|
|
|
|
|
void *GetVideoBuffer();
|
|
|
uint8 *GetAnimBuffer();
|
|
|
void ReleaseVideoBuffer(const Rect &update_rect);
|
|
|
void ReleaseAnimBuffer(const Rect &update_rect);
|
|
|
|
|
|
/* SpriteEncoder */
|
|
|
|
|
|
bool Is32BppSupported() override { return true; }
|
|
|
uint GetSpriteAlignment() override { return 1u << (ZOOM_LVL_COUNT - 1); }
|
|
|
Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override;
|
|
|
};
|
|
|
|
|
|
|
|
|
/** Class that encapsulates a RGBA texture together with a paletted remap texture. */
|
|
|
class OpenGLSprite {
|
|
|
private:
|