MTLDepthStencil.hpp
1 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 // 3 // Metal/MTLDepthStencil.hpp 4 // 5 // Copyright 2020-2024 Apple Inc. 6 // 7 // Licensed under the Apache License, Version 2.0 (the "License"); 8 // you may not use this file except in compliance with the License. 9 // You may obtain a copy of the License at 10 // 11 // http://www.apache.org/licenses/LICENSE-2.0 12 // 13 // Unless required by applicable law or agreed to in writing, software 14 // distributed under the License is distributed on an "AS IS" BASIS, 15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 // See the License for the specific language governing permissions and 17 // limitations under the License. 18 // 19 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 21 #pragma once 22 23 #include "MTLDefines.hpp" 24 #include "MTLHeaderBridge.hpp" 25 #include "MTLPrivate.hpp" 26 27 #include <Foundation/Foundation.hpp> 28 29 #include "MTLDepthStencil.hpp" 30 31 namespace MTL 32 { 33 _MTL_ENUM(NS::UInteger, CompareFunction) { 34 CompareFunctionNever = 0, 35 CompareFunctionLess = 1, 36 CompareFunctionEqual = 2, 37 CompareFunctionLessEqual = 3, 38 CompareFunctionGreater = 4, 39 CompareFunctionNotEqual = 5, 40 CompareFunctionGreaterEqual = 6, 41 CompareFunctionAlways = 7, 42 }; 43 44 _MTL_ENUM(NS::UInteger, StencilOperation) { 45 StencilOperationKeep = 0, 46 StencilOperationZero = 1, 47 StencilOperationReplace = 2, 48 StencilOperationIncrementClamp = 3, 49 StencilOperationDecrementClamp = 4, 50 StencilOperationInvert = 5, 51 StencilOperationIncrementWrap = 6, 52 StencilOperationDecrementWrap = 7, 53 }; 54 55 class StencilDescriptor : public NS::Copying<StencilDescriptor> 56 { 57 public: 58 static class StencilDescriptor* alloc(); 59 60 class StencilDescriptor* init(); 61 62 MTL::CompareFunction stencilCompareFunction() const; 63 void setStencilCompareFunction(MTL::CompareFunction stencilCompareFunction); 64 65 MTL::StencilOperation stencilFailureOperation() const; 66 void setStencilFailureOperation(MTL::StencilOperation stencilFailureOperation); 67 68 MTL::StencilOperation depthFailureOperation() const; 69 void setDepthFailureOperation(MTL::StencilOperation depthFailureOperation); 70 71 MTL::StencilOperation depthStencilPassOperation() const; 72 void setDepthStencilPassOperation(MTL::StencilOperation depthStencilPassOperation); 73 74 uint32_t readMask() const; 75 void setReadMask(uint32_t readMask); 76 77 uint32_t writeMask() const; 78 void setWriteMask(uint32_t writeMask); 79 }; 80 81 class DepthStencilDescriptor : public NS::Copying<DepthStencilDescriptor> 82 { 83 public: 84 static class DepthStencilDescriptor* alloc(); 85 86 class DepthStencilDescriptor* init(); 87 88 MTL::CompareFunction depthCompareFunction() const; 89 void setDepthCompareFunction(MTL::CompareFunction depthCompareFunction); 90 91 bool depthWriteEnabled() const; 92 void setDepthWriteEnabled(bool depthWriteEnabled); 93 94 class StencilDescriptor* frontFaceStencil() const; 95 void setFrontFaceStencil(const class StencilDescriptor* frontFaceStencil); 96 97 class StencilDescriptor* backFaceStencil() const; 98 void setBackFaceStencil(const class StencilDescriptor* backFaceStencil); 99 100 NS::String* label() const; 101 void setLabel(const NS::String* label); 102 }; 103 104 class DepthStencilState : public NS::Referencing<DepthStencilState> 105 { 106 public: 107 NS::String* label() const; 108 109 class Device* device() const; 110 }; 111 112 } 113 114 // static method: alloc 115 _MTL_INLINE MTL::StencilDescriptor* MTL::StencilDescriptor::alloc() 116 { 117 return NS::Object::alloc<MTL::StencilDescriptor>(_MTL_PRIVATE_CLS(MTLStencilDescriptor)); 118 } 119 120 // method: init 121 _MTL_INLINE MTL::StencilDescriptor* MTL::StencilDescriptor::init() 122 { 123 return NS::Object::init<MTL::StencilDescriptor>(); 124 } 125 126 // property: stencilCompareFunction 127 _MTL_INLINE MTL::CompareFunction MTL::StencilDescriptor::stencilCompareFunction() const 128 { 129 return Object::sendMessage<MTL::CompareFunction>(this, _MTL_PRIVATE_SEL(stencilCompareFunction)); 130 } 131 132 _MTL_INLINE void MTL::StencilDescriptor::setStencilCompareFunction(MTL::CompareFunction stencilCompareFunction) 133 { 134 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilCompareFunction_), stencilCompareFunction); 135 } 136 137 // property: stencilFailureOperation 138 _MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::stencilFailureOperation() const 139 { 140 return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(stencilFailureOperation)); 141 } 142 143 _MTL_INLINE void MTL::StencilDescriptor::setStencilFailureOperation(MTL::StencilOperation stencilFailureOperation) 144 { 145 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilFailureOperation_), stencilFailureOperation); 146 } 147 148 // property: depthFailureOperation 149 _MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::depthFailureOperation() const 150 { 151 return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(depthFailureOperation)); 152 } 153 154 _MTL_INLINE void MTL::StencilDescriptor::setDepthFailureOperation(MTL::StencilOperation depthFailureOperation) 155 { 156 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthFailureOperation_), depthFailureOperation); 157 } 158 159 // property: depthStencilPassOperation 160 _MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::depthStencilPassOperation() const 161 { 162 return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(depthStencilPassOperation)); 163 } 164 165 _MTL_INLINE void MTL::StencilDescriptor::setDepthStencilPassOperation(MTL::StencilOperation depthStencilPassOperation) 166 { 167 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthStencilPassOperation_), depthStencilPassOperation); 168 } 169 170 // property: readMask 171 _MTL_INLINE uint32_t MTL::StencilDescriptor::readMask() const 172 { 173 return Object::sendMessage<uint32_t>(this, _MTL_PRIVATE_SEL(readMask)); 174 } 175 176 _MTL_INLINE void MTL::StencilDescriptor::setReadMask(uint32_t readMask) 177 { 178 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setReadMask_), readMask); 179 } 180 181 // property: writeMask 182 _MTL_INLINE uint32_t MTL::StencilDescriptor::writeMask() const 183 { 184 return Object::sendMessage<uint32_t>(this, _MTL_PRIVATE_SEL(writeMask)); 185 } 186 187 _MTL_INLINE void MTL::StencilDescriptor::setWriteMask(uint32_t writeMask) 188 { 189 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setWriteMask_), writeMask); 190 } 191 192 // static method: alloc 193 _MTL_INLINE MTL::DepthStencilDescriptor* MTL::DepthStencilDescriptor::alloc() 194 { 195 return NS::Object::alloc<MTL::DepthStencilDescriptor>(_MTL_PRIVATE_CLS(MTLDepthStencilDescriptor)); 196 } 197 198 // method: init 199 _MTL_INLINE MTL::DepthStencilDescriptor* MTL::DepthStencilDescriptor::init() 200 { 201 return NS::Object::init<MTL::DepthStencilDescriptor>(); 202 } 203 204 // property: depthCompareFunction 205 _MTL_INLINE MTL::CompareFunction MTL::DepthStencilDescriptor::depthCompareFunction() const 206 { 207 return Object::sendMessage<MTL::CompareFunction>(this, _MTL_PRIVATE_SEL(depthCompareFunction)); 208 } 209 210 _MTL_INLINE void MTL::DepthStencilDescriptor::setDepthCompareFunction(MTL::CompareFunction depthCompareFunction) 211 { 212 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthCompareFunction_), depthCompareFunction); 213 } 214 215 // property: depthWriteEnabled 216 _MTL_INLINE bool MTL::DepthStencilDescriptor::depthWriteEnabled() const 217 { 218 return Object::sendMessage<bool>(this, _MTL_PRIVATE_SEL(isDepthWriteEnabled)); 219 } 220 221 _MTL_INLINE void MTL::DepthStencilDescriptor::setDepthWriteEnabled(bool depthWriteEnabled) 222 { 223 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthWriteEnabled_), depthWriteEnabled); 224 } 225 226 // property: frontFaceStencil 227 _MTL_INLINE MTL::StencilDescriptor* MTL::DepthStencilDescriptor::frontFaceStencil() const 228 { 229 return Object::sendMessage<MTL::StencilDescriptor*>(this, _MTL_PRIVATE_SEL(frontFaceStencil)); 230 } 231 232 _MTL_INLINE void MTL::DepthStencilDescriptor::setFrontFaceStencil(const MTL::StencilDescriptor* frontFaceStencil) 233 { 234 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFrontFaceStencil_), frontFaceStencil); 235 } 236 237 // property: backFaceStencil 238 _MTL_INLINE MTL::StencilDescriptor* MTL::DepthStencilDescriptor::backFaceStencil() const 239 { 240 return Object::sendMessage<MTL::StencilDescriptor*>(this, _MTL_PRIVATE_SEL(backFaceStencil)); 241 } 242 243 _MTL_INLINE void MTL::DepthStencilDescriptor::setBackFaceStencil(const MTL::StencilDescriptor* backFaceStencil) 244 { 245 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setBackFaceStencil_), backFaceStencil); 246 } 247 248 // property: label 249 _MTL_INLINE NS::String* MTL::DepthStencilDescriptor::label() const 250 { 251 return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label)); 252 } 253 254 _MTL_INLINE void MTL::DepthStencilDescriptor::setLabel(const NS::String* label) 255 { 256 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setLabel_), label); 257 } 258 259 // property: label 260 _MTL_INLINE NS::String* MTL::DepthStencilState::label() const 261 { 262 return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label)); 263 } 264 265 // property: device 266 _MTL_INLINE MTL::Device* MTL::DepthStencilState::device() const 267 { 268 return Object::sendMessage<MTL::Device*>(this, _MTL_PRIVATE_SEL(device)); 269 }