mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-23 05:45:51 +12:00
First Metal cleanup & formatting pass
This commit is contained in:
parent
4cc62d4870
commit
49b65242b9
17 changed files with 1084 additions and 1115 deletions
|
@ -3,56 +3,54 @@
|
|||
#include <Metal/Metal.hpp>
|
||||
|
||||
namespace Metal {
|
||||
struct RenderState {
|
||||
MTL::RenderPipelineState* renderPipelineState = nullptr;
|
||||
MTL::DepthStencilState* depthStencilState = nullptr;
|
||||
MTL::Texture* textures[3] = {nullptr};
|
||||
MTL::SamplerState* samplerStates[3] = {nullptr};
|
||||
};
|
||||
|
||||
struct RenderState {
|
||||
MTL::RenderPipelineState* renderPipelineState = nullptr;
|
||||
MTL::DepthStencilState* depthStencilState = nullptr;
|
||||
MTL::Texture* textures[3] = {nullptr};
|
||||
MTL::SamplerState* samplerStates[3] = {nullptr};
|
||||
};
|
||||
class CommandEncoder {
|
||||
public:
|
||||
void newRenderCommandEncoder(MTL::RenderCommandEncoder* rce) {
|
||||
renderCommandEncoder = rce;
|
||||
|
||||
class CommandEncoder {
|
||||
public:
|
||||
void newRenderCommandEncoder(MTL::RenderCommandEncoder* rce) {
|
||||
renderCommandEncoder = rce;
|
||||
// Reset the render state
|
||||
renderState = RenderState{};
|
||||
}
|
||||
|
||||
// Reset the render state
|
||||
renderState = RenderState{};
|
||||
}
|
||||
// Resource binding
|
||||
void setRenderPipelineState(MTL::RenderPipelineState* renderPipelineState) {
|
||||
if (renderPipelineState != renderState.renderPipelineState) {
|
||||
renderCommandEncoder->setRenderPipelineState(renderPipelineState);
|
||||
renderState.renderPipelineState = renderPipelineState;
|
||||
}
|
||||
}
|
||||
|
||||
// Resource binding
|
||||
void setRenderPipelineState(MTL::RenderPipelineState* renderPipelineState) {
|
||||
if (renderPipelineState != renderState.renderPipelineState) {
|
||||
renderCommandEncoder->setRenderPipelineState(renderPipelineState);
|
||||
renderState.renderPipelineState = renderPipelineState;
|
||||
}
|
||||
}
|
||||
void setDepthStencilState(MTL::DepthStencilState* depthStencilState) {
|
||||
if (depthStencilState != renderState.depthStencilState) {
|
||||
renderCommandEncoder->setDepthStencilState(depthStencilState);
|
||||
renderState.depthStencilState = depthStencilState;
|
||||
}
|
||||
}
|
||||
|
||||
void setDepthStencilState(MTL::DepthStencilState* depthStencilState) {
|
||||
if (depthStencilState != renderState.depthStencilState) {
|
||||
renderCommandEncoder->setDepthStencilState(depthStencilState);
|
||||
renderState.depthStencilState = depthStencilState;
|
||||
}
|
||||
}
|
||||
void setFragmentTexture(MTL::Texture* texture, u32 index) {
|
||||
if (texture != renderState.textures[index]) {
|
||||
renderCommandEncoder->setFragmentTexture(texture, index);
|
||||
renderState.textures[index] = texture;
|
||||
}
|
||||
}
|
||||
|
||||
void setFragmentTexture(MTL::Texture* texture, u32 index) {
|
||||
if (texture != renderState.textures[index]) {
|
||||
renderCommandEncoder->setFragmentTexture(texture, index);
|
||||
renderState.textures[index] = texture;
|
||||
}
|
||||
}
|
||||
void setFragmentSamplerState(MTL::SamplerState* samplerState, u32 index) {
|
||||
if (samplerState != renderState.samplerStates[index]) {
|
||||
renderCommandEncoder->setFragmentSamplerState(samplerState, index);
|
||||
renderState.samplerStates[index] = samplerState;
|
||||
}
|
||||
}
|
||||
|
||||
void setFragmentSamplerState(MTL::SamplerState* samplerState, u32 index) {
|
||||
if (samplerState != renderState.samplerStates[index]) {
|
||||
renderCommandEncoder->setFragmentSamplerState(samplerState, index);
|
||||
renderState.samplerStates[index] = samplerState;
|
||||
}
|
||||
}
|
||||
private:
|
||||
MTL::RenderCommandEncoder* renderCommandEncoder = nullptr;
|
||||
|
||||
private:
|
||||
MTL::RenderCommandEncoder* renderCommandEncoder = nullptr;
|
||||
|
||||
RenderState renderState;
|
||||
};
|
||||
|
||||
} // namespace Metal
|
||||
RenderState renderState;
|
||||
};
|
||||
} // namespace Metal
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue