mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-16 04:07:08 +12:00
upload env state to the shader
This commit is contained in:
parent
3bb1ccd4d8
commit
ee74af43ec
3 changed files with 178 additions and 26 deletions
|
@ -211,7 +211,9 @@ void RendererMTL::drawVertices(PICA::PrimType primType, std::span<const PICA::Ve
|
|||
renderCommandEncoder->setVertexBytes(vertices.data(), vertices.size_bytes(), VERTEX_BUFFER_BINDING_INDEX);
|
||||
|
||||
// Bind resources
|
||||
setupTextureEnvState(renderCommandEncoder);
|
||||
bindTexturesToSlots(renderCommandEncoder);
|
||||
renderCommandEncoder->setFragmentBytes(®s[0x48], 0x200 - 0x48, 0);
|
||||
|
||||
// TODO: respect primitive type
|
||||
renderCommandEncoder->drawPrimitives(MTL::PrimitiveTypeTriangle, NS::UInteger(0), NS::UInteger(vertices.size()));
|
||||
|
@ -245,6 +247,47 @@ MTL::Texture* RendererMTL::getTexture(Metal::Texture& tex) {
|
|||
}
|
||||
}
|
||||
|
||||
void RendererMTL::setupTextureEnvState(MTL::RenderCommandEncoder* encoder) {
|
||||
static constexpr std::array<u32, 6> ioBases = {
|
||||
PICA::InternalRegs::TexEnv0Source, PICA::InternalRegs::TexEnv1Source, PICA::InternalRegs::TexEnv2Source,
|
||||
PICA::InternalRegs::TexEnv3Source, PICA::InternalRegs::TexEnv4Source, PICA::InternalRegs::TexEnv5Source,
|
||||
};
|
||||
|
||||
struct {
|
||||
u32 textureEnvSourceRegs[6];
|
||||
u32 textureEnvOperandRegs[6];
|
||||
u32 textureEnvCombinerRegs[6];
|
||||
u32 textureEnvScaleRegs[6];
|
||||
} envState;
|
||||
u32 textureEnvColourRegs[6];
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
const u32 ioBase = ioBases[i];
|
||||
|
||||
envState.textureEnvSourceRegs[i] = regs[ioBase];
|
||||
envState.textureEnvOperandRegs[i] = regs[ioBase + 1];
|
||||
envState.textureEnvCombinerRegs[i] = regs[ioBase + 2];
|
||||
textureEnvColourRegs[i] = regs[ioBase + 3];
|
||||
envState.textureEnvScaleRegs[i] = regs[ioBase + 4];
|
||||
}
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
std::cout << "textureEnvSourceRegs[" << i << "] = " << envState.textureEnvSourceRegs[i] << std::endl;
|
||||
}
|
||||
for (int i = 0; i < 6; i++) {
|
||||
std::cout << "textureEnvOperandRegs[" << i << "] = " << envState.textureEnvOperandRegs[i] << std::endl;
|
||||
}
|
||||
for (int i = 0; i < 6; i++) {
|
||||
std::cout << "textureEnvCombinerRegs[" << i << "] = " << envState.textureEnvCombinerRegs[i] << std::endl;
|
||||
}
|
||||
for (int i = 0; i < 6; i++) {
|
||||
std::cout << "textureEnvScaleRegs[" << i << "] = " << envState.textureEnvScaleRegs[i] << std::endl;
|
||||
}
|
||||
|
||||
// TODO: upload textureEnvColourRegs to the vertex shader
|
||||
encoder->setFragmentBytes(&envState, sizeof(envState), 1);
|
||||
}
|
||||
|
||||
void RendererMTL::bindTexturesToSlots(MTL::RenderCommandEncoder* encoder) {
|
||||
static constexpr std::array<u32, 3> ioBases = {
|
||||
PICA::InternalRegs::Tex0BorderColor,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue