From 51dd8ba6aa51c0ca4d82889d8e0078a965047dfb Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 16 Mar 2023 18:51:35 +0200 Subject: [PATCH] Implement Display::SetBrightness --- Core/Video/Display.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ include/display.hpp | 2 ++ 2 files changed, 42 insertions(+) diff --git a/Core/Video/Display.cpp b/Core/Video/Display.cpp index e95d008..595c8b1 100644 --- a/Core/Video/Display.cpp +++ b/Core/Video/Display.cpp @@ -48,6 +48,7 @@ namespace Video buffer->Color = 0xFFFFFF; buffer->CursorX = 0; buffer->CursorY = 0; + buffer->Brightness = 100; this->Buffers[Index] = buffer; memset(this->Buffers[Index]->Buffer, 0, Size); this->Buffers[Index]->Checksum = 0xDEAD; @@ -56,6 +57,12 @@ namespace Video void Display::SetBuffer(int Index) { + if (this->Buffers[Index]->Brightness != 100) + this->SetBrightness(this->Buffers[Index]->Brightness, Index); + + if (this->Buffers[Index]->Brightness == 0) /* Just clear the buffer */ + memset(this->Buffers[Index]->Buffer, 0, this->Buffers[Index]->Size); + memcpy(this->framebuffer.BaseAddress, this->Buffers[Index]->Buffer, this->Buffers[Index]->Size); } @@ -79,6 +86,39 @@ namespace Video delete this->Buffers[Index], this->Buffers[Index] = nullptr; } + void Display::SetBrightness(int Value, int Index) + { + if (this->Buffers[Index] == nullptr) + return; + + if (Value > 100) + Value = 100; + else if (Value < 0) + Value = 0; + + ScreenBuffer *buffer = this->Buffers[Index]; + uint32_t *pixel = (uint32_t *)buffer->Buffer; + + for (uint32_t y = 0; y < buffer->Height; y++) + { + for (uint32_t x = 0; x < buffer->Width; x++) + { + uint32_t color = pixel[y * buffer->Width + x]; + + uint8_t r = color & 0xff; + uint8_t g = (color >> 8) & 0xff; + uint8_t b = (color >> 16) & 0xff; + + r = (r * Value) / 100; + g = (g * Value) / 100; + b = (b * Value) / 100; + + pixel[y * buffer->Width + x] = (b << 16) | (g << 8) | r; + } + } + buffer->Brightness = Value; + } + void Display::SetBufferCursor(int Index, uint32_t X, uint32_t Y) { this->Buffers[Index]->CursorX = X; diff --git a/include/display.hpp b/include/display.hpp index cd981ba..64998e8 100644 --- a/include/display.hpp +++ b/include/display.hpp @@ -83,6 +83,7 @@ namespace Video size_t Size; uint32_t Color; uint32_t CursorX, CursorY; + char Brightness; long Checksum; }; @@ -103,6 +104,7 @@ namespace Video ScreenBuffer *GetBuffer(int Index); void ClearBuffer(int Index); void DeleteBuffer(int Index); + void SetBrightness(int Value, int Index); void SetBufferCursor(int Index, uint32_t X, uint32_t Y); void GetBufferCursor(int Index, uint32_t *X, uint32_t *Y); void SetPixel(uint32_t X, uint32_t Y, uint32_t Color, int Index);