如何在Metal中编程获取最大纹理尺寸(宽度和高度)?使用OpenGL,我可以这样做:glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)
,但是在Metal中该怎么做呢?
如何在Metal中编程获取最大纹理尺寸(宽度和高度)?使用OpenGL,我可以这样做:glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)
,但是在Metal中该怎么做呢?
目前没有用于检索Metal设备最大纹理尺寸的API。您应该查阅Metal功能表以获取此信息,并在您的应用程序中包含它。
对于运行当前版本的iOS / tvOS / iPadOS的A9及更高型号的GPU,2D纹理的最大尺寸为16384×16384。
iOS 13中有一个新的API,可以使这个过程更加稳健(适用于iOS设备):
// If you use this you must be on iOS 13, so the code is valid for any device running that
func maxTextureDimension2(mtlDevice: MTLDevice) -> Int {
// https://developer.apple.com/documentation/metal/mtldevice/3143473-supportsfamily
let maxTexSize = mtlDevice.supportsFamily(.apple3) ? 16384 : 8192
return maxTexSize
}
int maxTexSize = 4096;
if ([mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily4_v1] || [mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily3_v1]) {
maxTexSize = 16384;
else if ([mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily2_v2] || [mtldevice supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v2]) {
maxTexSize = 8192;
} else {
maxTexSize = 4096;
}