
Currently, Kernel::Graphics::FramebufferConsole is written assuming that the underlying framebuffer memory exists in physically contiguous memory. There are a bunch of framebuffer devices that would need to use the components of FramebufferConsole (in particular access to the kernel bitmap font rendering logic). To reduce code duplication, framebuffer console has been split into two parts, the abstract GenericFramebufferConsole class which does the rendering, and the ContiguousFramebufferConsole class which contains all logic related to managing the underling vm object. Also, a new flush method has been added to the class, to support devices that require an extra flush step to render.
30 lines
869 B
C++
30 lines
869 B
C++
/*
|
|
* Copyright (c) 2021, Sahan Fernando <sahan.h.fernando@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/Graphics/Console/GenericFramebufferConsole.h>
|
|
|
|
namespace Kernel::Graphics {
|
|
|
|
class ContiguousFramebufferConsole final : public GenericFramebufferConsole {
|
|
public:
|
|
static NonnullRefPtr<ContiguousFramebufferConsole> initialize(PhysicalAddress, size_t width, size_t height, size_t pitch);
|
|
|
|
virtual void set_resolution(size_t width, size_t height, size_t pitch) override;
|
|
virtual void flush() override { }
|
|
|
|
private:
|
|
virtual u8* framebuffer_data() override
|
|
{
|
|
return m_framebuffer_region->vaddr().as_ptr();
|
|
}
|
|
OwnPtr<Region> m_framebuffer_region;
|
|
ContiguousFramebufferConsole(PhysicalAddress, size_t width, size_t height, size_t pitch);
|
|
PhysicalAddress m_framebuffer_address;
|
|
};
|
|
|
|
}
|