From 608f81e6c2220fe2dc01c8c903ccc3706243dcd3 Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sat, 8 May 2021 22:18:34 +0200 Subject: [PATCH] LibGL: Add depth buffer class --- Userland/Libraries/LibGL/CMakeLists.txt | 1 + Userland/Libraries/LibGL/DepthBuffer.cpp | 36 ++++++++++++++++++++++++ Userland/Libraries/LibGL/DepthBuffer.h | 27 ++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 Userland/Libraries/LibGL/DepthBuffer.cpp create mode 100644 Userland/Libraries/LibGL/DepthBuffer.h diff --git a/Userland/Libraries/LibGL/CMakeLists.txt b/Userland/Libraries/LibGL/CMakeLists.txt index 0c77e123c0..637658c73d 100644 --- a/Userland/Libraries/LibGL/CMakeLists.txt +++ b/Userland/Libraries/LibGL/CMakeLists.txt @@ -7,6 +7,7 @@ set(SOURCES GLVert.cpp SoftwareGLContext.cpp SoftwareRasterizer.cpp + DepthBuffer.cpp ) serenity_lib(LibGL gl) diff --git a/Userland/Libraries/LibGL/DepthBuffer.cpp b/Userland/Libraries/LibGL/DepthBuffer.cpp new file mode 100644 index 0000000000..431b043354 --- /dev/null +++ b/Userland/Libraries/LibGL/DepthBuffer.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021, Stephan Unverwerth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "DepthBuffer.h" + +namespace GL { + +DepthBuffer::DepthBuffer(Gfx::IntSize const& size) + : m_size(size) + , m_data(new float[size.width() * size.height()]) +{ +} + +DepthBuffer::~DepthBuffer() +{ + delete[] m_data; +} + +float* DepthBuffer::scanline(int y) +{ + VERIFY(y >= 0 && y < m_size.height()); + return &m_data[y * m_size.width()]; +} + +void DepthBuffer::clear(float depth) +{ + int num_entries = m_size.width() * m_size.height(); + for (int i = 0; i < num_entries; ++i) { + m_data[i] = depth; + } +} + +} diff --git a/Userland/Libraries/LibGL/DepthBuffer.h b/Userland/Libraries/LibGL/DepthBuffer.h new file mode 100644 index 0000000000..7f78d19248 --- /dev/null +++ b/Userland/Libraries/LibGL/DepthBuffer.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021, Stephan Unverwerth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace GL { + +class DepthBuffer final { +public: + DepthBuffer(Gfx::IntSize const&); + ~DepthBuffer(); + + float* scanline(int y); + + void clear(float depth); + +private: + Gfx::IntSize m_size; + float* m_data { nullptr }; +}; + +}