mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
hwr2: use palette manager in twodee
This commit is contained in:
parent
e875c8e20d
commit
0a9e9bbbae
3 changed files with 8 additions and 27 deletions
|
|
@ -58,7 +58,6 @@ struct Atlas
|
||||||
struct srb2::hwr2::TwodeePassData
|
struct srb2::hwr2::TwodeePassData
|
||||||
{
|
{
|
||||||
Handle<Texture> default_tex;
|
Handle<Texture> default_tex;
|
||||||
Handle<Texture> palette_tex;
|
|
||||||
Handle<Texture> default_colormap_tex;
|
Handle<Texture> default_colormap_tex;
|
||||||
std::vector<Atlas> patch_atlases;
|
std::vector<Atlas> patch_atlases;
|
||||||
std::unordered_map<const patch_t*, size_t> patch_lookup;
|
std::unordered_map<const patch_t*, size_t> patch_lookup;
|
||||||
|
|
@ -482,10 +481,6 @@ void TwodeePass::prepass(Rhi& rhi)
|
||||||
data_->default_tex = rhi.create_texture({TextureFormat::kLuminanceAlpha, 2, 1});
|
data_->default_tex = rhi.create_texture({TextureFormat::kLuminanceAlpha, 2, 1});
|
||||||
data_->upload_default_tex = true;
|
data_->upload_default_tex = true;
|
||||||
}
|
}
|
||||||
if (!data_->palette_tex)
|
|
||||||
{
|
|
||||||
data_->palette_tex = rhi.create_texture({TextureFormat::kRGBA, 256, 1});
|
|
||||||
}
|
|
||||||
if (!data_->default_colormap_tex)
|
if (!data_->default_colormap_tex)
|
||||||
{
|
{
|
||||||
data_->default_colormap_tex = rhi.create_texture({TextureFormat::kLuminance, 256, 1});
|
data_->default_colormap_tex = rhi.create_texture({TextureFormat::kLuminance, 256, 1});
|
||||||
|
|
@ -772,24 +767,6 @@ void TwodeePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
||||||
data_->upload_default_tex = false;
|
data_->upload_default_tex = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
// TODO share palette tex with software pass
|
|
||||||
// Unfortunately, pMasterPalette must be swizzled to get a linear layout.
|
|
||||||
// Maybe some adjustments to palette storage can make this a straight upload.
|
|
||||||
std::array<byteColor_t, 256> palette_32;
|
|
||||||
for (size_t i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
palette_32[i] = pMasterPalette[i].s;
|
|
||||||
}
|
|
||||||
rhi.update_texture(
|
|
||||||
ctx,
|
|
||||||
data_->palette_tex,
|
|
||||||
{0, 0, 256, 1},
|
|
||||||
rhi::PixelFormat::kRGBA8,
|
|
||||||
tcb::as_bytes(tcb::span(palette_32))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto colormap : data_->colormaps_to_upload)
|
for (auto colormap : data_->colormaps_to_upload)
|
||||||
{
|
{
|
||||||
rhi.update_texture(
|
rhi.update_texture(
|
||||||
|
|
@ -821,6 +798,8 @@ void TwodeePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
||||||
}
|
}
|
||||||
data_->patches_to_upload.clear();
|
data_->patches_to_upload.clear();
|
||||||
|
|
||||||
|
Handle<Texture> palette_tex = palette_manager_->palette();
|
||||||
|
|
||||||
// Update the buffers for each list
|
// Update the buffers for each list
|
||||||
auto ctx_list_itr = ctx_->begin();
|
auto ctx_list_itr = ctx_->begin();
|
||||||
for (size_t i = 0; i < cmd_lists_.size() && ctx_list_itr != ctx_->end(); i++)
|
for (size_t i = 0; i < cmd_lists_.size() && ctx_list_itr != ctx_->end(); i++)
|
||||||
|
|
@ -843,14 +822,14 @@ void TwodeePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
||||||
{
|
{
|
||||||
Atlas& atlas = data_->patch_atlases[atlas_index];
|
Atlas& atlas = data_->patch_atlases[atlas_index];
|
||||||
tx[0] = {SamplerName::kSampler0, atlas.tex};
|
tx[0] = {SamplerName::kSampler0, atlas.tex};
|
||||||
tx[1] = {SamplerName::kSampler1, data_->palette_tex};
|
tx[1] = {SamplerName::kSampler1, palette_tex};
|
||||||
},
|
},
|
||||||
[&](const MergedTwodeeCommandFlatTexture& tex)
|
[&](const MergedTwodeeCommandFlatTexture& tex)
|
||||||
{
|
{
|
||||||
Handle<Texture> th = flat_manager_->find_indexed(tex.lump);
|
Handle<Texture> th = flat_manager_->find_indexed(tex.lump);
|
||||||
SRB2_ASSERT(th != kNullHandle);
|
SRB2_ASSERT(th != kNullHandle);
|
||||||
tx[0] = {SamplerName::kSampler0, th};
|
tx[0] = {SamplerName::kSampler0, th};
|
||||||
tx[1] = {SamplerName::kSampler1, data_->palette_tex};
|
tx[1] = {SamplerName::kSampler1, palette_tex};
|
||||||
}};
|
}};
|
||||||
if (mcmd.texture)
|
if (mcmd.texture)
|
||||||
{
|
{
|
||||||
|
|
@ -859,7 +838,7 @@ void TwodeePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tx[0] = {SamplerName::kSampler0, data_->default_tex};
|
tx[0] = {SamplerName::kSampler0, data_->default_tex};
|
||||||
tx[1] = {SamplerName::kSampler1, data_->palette_tex};
|
tx[1] = {SamplerName::kSampler1, palette_tex};
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t* colormap = mcmd.colormap;
|
const uint8_t* colormap = mcmd.colormap;
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ struct TwodeePass final : public Pass
|
||||||
std::variant<rhi::Handle<rhi::Texture>, rhi::Handle<rhi::Renderbuffer>> out_color_;
|
std::variant<rhi::Handle<rhi::Texture>, rhi::Handle<rhi::Renderbuffer>> out_color_;
|
||||||
|
|
||||||
std::shared_ptr<TwodeePassData> data_;
|
std::shared_ptr<TwodeePassData> data_;
|
||||||
|
std::shared_ptr<MainPaletteManager> palette_manager_;
|
||||||
std::shared_ptr<FlatTextureManager> flat_manager_;
|
std::shared_ptr<FlatTextureManager> flat_manager_;
|
||||||
rhi::Handle<rhi::UniformSet> us_1;
|
rhi::Handle<rhi::UniformSet> us_1;
|
||||||
rhi::Handle<rhi::UniformSet> us_2;
|
rhi::Handle<rhi::UniformSet> us_2;
|
||||||
|
|
|
||||||
|
|
@ -158,9 +158,10 @@ static std::shared_ptr<PassManager> build_pass_manager()
|
||||||
|
|
||||||
manager->insert(
|
manager->insert(
|
||||||
"2d_prepare",
|
"2d_prepare",
|
||||||
[twodee, framebuffer_manager](PassManager& mgr, Rhi&)
|
[twodee, framebuffer_manager, palette_manager](PassManager& mgr, Rhi&)
|
||||||
{
|
{
|
||||||
twodee->output_ = framebuffer_manager->current_main_color();
|
twodee->output_ = framebuffer_manager->current_main_color();
|
||||||
|
twodee->palette_manager_ = palette_manager;
|
||||||
twodee->output_width_ = vid.width;
|
twodee->output_width_ = vid.width;
|
||||||
twodee->output_height_ = vid.height;
|
twodee->output_height_ = vid.height;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue