mirror of
https://github.com/libretro/parallel-gx1.git
synced 2026-11-10 17:26:25 -10:00
Texture bytes travel as a TexBytes, a pointer and a size, where they were a std::span<const u8>: TMEM and RAM runs into TextureInfo and its mip levels, and the texel decoders the software renderer samples through. Reads past the end still give zeros, now through three small readers in TextureDecoder_Common, and TexBytesSkip() steps past a level as SafeSubspan() did. LoadPNGTexture() takes a pointer and a size. Metal's bounding box, which the build does not compile, gets the Read() and Write() the other backends have. GraphicsModGroup sorted its mods with std::ranges::sort, whose <algorithm> came in through SpanUtils.h; an insertion sort by weight takes its place, keeping mods of equal weight in load order.
39 lines
1.0 KiB
C++
39 lines
1.0 KiB
C++
// Copyright 2023 Dolphin Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <string>
|
|
|
|
#include "Common/Buffer.h"
|
|
#include "Common/CommonTypes.h"
|
|
#include "VideoCommon/TextureConfig.h"
|
|
|
|
namespace VideoCommon
|
|
{
|
|
class CustomTextureData
|
|
{
|
|
public:
|
|
struct ArraySlice
|
|
{
|
|
struct Level
|
|
{
|
|
Common::UniqueBuffer<u8> data;
|
|
AbstractTextureFormat format = AbstractTextureFormat::RGBA8;
|
|
u32 width = 0;
|
|
u32 height = 0;
|
|
u32 row_length = 0;
|
|
};
|
|
std::vector<Level> m_levels;
|
|
};
|
|
std::vector<ArraySlice> m_slices;
|
|
};
|
|
|
|
bool LoadDDSTexture(CustomTextureData* texture, const std::string& filename);
|
|
bool LoadDDSTexture(CustomTextureData::ArraySlice::Level* level, const std::string& filename,
|
|
u32 mip_level);
|
|
bool LoadPNGTexture(CustomTextureData::ArraySlice::Level* level, const std::string& filename);
|
|
bool LoadPNGTexture(CustomTextureData::ArraySlice::Level* level, const u8* buffer, size_t size);
|
|
} // namespace VideoCommon
|