mirror of
https://github.com/niellun/FastCarPlay.git
synced 2026-06-07 09:38:25 +02:00
Simplify video buffer, optimise rendering timings, debug overlay
This commit is contained in:
+61
-1
@@ -6,11 +6,14 @@
|
||||
#include "protocol/protocol_const.h"
|
||||
|
||||
Interface::Interface(SDL_Renderer *renderer)
|
||||
: Renderer(renderer), _state(0),
|
||||
: Renderer(renderer),
|
||||
_state(0),
|
||||
_debug(false),
|
||||
_textDongle(font, font_len, Settings::fontSize),
|
||||
_textInit(font, font_len, Settings::fontSize),
|
||||
_textConnect(font, font_len, Settings::fontSize),
|
||||
_textLaunch(font, font_len, Settings::fontSize),
|
||||
_textDebug(font, font_len, 15),
|
||||
_mainImage(background, background_len)
|
||||
{
|
||||
}
|
||||
@@ -19,6 +22,31 @@ Interface::~Interface()
|
||||
{
|
||||
}
|
||||
|
||||
bool Interface::render(AVFrame *frame)
|
||||
{
|
||||
if(!frame)
|
||||
return false;
|
||||
|
||||
if (_render == nullptr || frame->width != _textureWidth || frame->height != _textureHeight)
|
||||
{
|
||||
clear();
|
||||
if (!prepare(frame, Settings::width, Settings::height))
|
||||
return false;
|
||||
}
|
||||
|
||||
(this->*_render)(frame);
|
||||
SDL_RenderCopy(_renderer, _texture, &_sourceRect, nullptr);
|
||||
|
||||
if (_debug)
|
||||
{
|
||||
drawDebug();
|
||||
_debug = false;
|
||||
}
|
||||
|
||||
SDL_RenderPresent(_renderer);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Interface::drawHome(bool force, int state)
|
||||
{
|
||||
if (state == _state && !force)
|
||||
@@ -49,3 +77,35 @@ bool Interface::drawHome(bool force, int state)
|
||||
SDL_RenderPresent(_renderer);
|
||||
return true;
|
||||
}
|
||||
|
||||
void Interface::debug(const char *text)
|
||||
{
|
||||
_debugText = text ? text : "";
|
||||
_debug = true;
|
||||
}
|
||||
|
||||
void Interface::drawDebug()
|
||||
{
|
||||
if (_debugText.empty())
|
||||
return;
|
||||
|
||||
constexpr int padding = 8;
|
||||
constexpr int lineSpacing = 2;
|
||||
const SDL_Color debugColor = {255, 0, 255, 255};
|
||||
size_t lineStart = 0;
|
||||
int y = padding;
|
||||
|
||||
while (lineStart <= _debugText.size())
|
||||
{
|
||||
size_t lineEnd = _debugText.find('\n', lineStart);
|
||||
std::string line = _debugText.substr(lineStart, lineEnd - lineStart);
|
||||
if (_textDebug.prepare(_renderer, line, debugColor))
|
||||
_textDebug.draw(_renderer, padding, y);
|
||||
y += _textDebug.height + lineSpacing;
|
||||
|
||||
if (lineEnd == std::string::npos)
|
||||
break;
|
||||
|
||||
lineStart = lineEnd + 1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user