Filter out invalid resolutions
FossilOrigin-Name: 11acc939c48a80c696dca18a61b7a4501ab45ba9775ed002e17b708756298cfb
This commit is contained in:
parent
3902165c96
commit
ccef3f6323
1 changed files with 19 additions and 14 deletions
|
@ -108,15 +108,14 @@ refreshEnumToFloat(GrScreenRefresh_t refresh)
|
|||
self = [super init];
|
||||
|
||||
@try {
|
||||
long long deviceIndex = [[options objectForKey:
|
||||
O3DRendererDeviceIndex] longLongValue];
|
||||
FxI32 numDevices;
|
||||
|
||||
grGlideInit();
|
||||
|
||||
FxI32 numDevices;
|
||||
if (!grGet(GR_NUM_BOARDS, sizeof(numDevices), &numDevices))
|
||||
@throw [OFInitializationFailedException exception];
|
||||
|
||||
long long deviceIndex = [[options objectForKey:
|
||||
O3DRendererDeviceIndex] longLongValue];
|
||||
if (deviceIndex > numDevices)
|
||||
@throw [OFInvalidArgumentException exception];
|
||||
|
||||
|
@ -140,7 +139,6 @@ refreshEnumToFloat(GrScreenRefresh_t refresh)
|
|||
availableResolutions
|
||||
{
|
||||
OFMutableSet *ret = [OFMutableSet set];
|
||||
GrResolution *resolutions;
|
||||
GrResolution query = {
|
||||
.resolution = GR_QUERY_ANY,
|
||||
.refresh = GR_QUERY_ANY,
|
||||
|
@ -149,23 +147,30 @@ refreshEnumToFloat(GrScreenRefresh_t refresh)
|
|||
};
|
||||
size_t size = grQueryResolutions(&query, NULL);
|
||||
|
||||
resolutions = OFAllocMemory(1, size);
|
||||
GrResolution *resolutions = OFAllocMemory(1, size);
|
||||
@try {
|
||||
void *pool;
|
||||
size = grQueryResolutions(&query, resolutions);
|
||||
|
||||
pool = objc_autoreleasePoolPush();
|
||||
|
||||
void *pool = objc_autoreleasePoolPush();
|
||||
for (size_t i = 0; i < size / sizeof(*resolutions); i++) {
|
||||
OFValue *resolution = [OFValue valueWithSize:
|
||||
resolutionToSize(resolutions[i].resolution)];
|
||||
OFNumber *refresh = [OFNumber numberWithFloat:
|
||||
refreshEnumToFloat(resolutions[i].refresh)];
|
||||
OFSize resolutionSize =
|
||||
resolutionToSize(resolutions[i].resolution);
|
||||
float refreshFloat =
|
||||
refreshEnumToFloat(resolutions[i].refresh);
|
||||
|
||||
if (resolutionSize.width == 0 ||
|
||||
resolutionSize.height == 0)
|
||||
continue;
|
||||
if (refreshFloat == 0)
|
||||
continue;
|
||||
|
||||
OFValue *resolution =
|
||||
[OFValue valueWithSize: resolutionSize];
|
||||
OFNumber *refresh =
|
||||
[OFNumber numberWithFloat: refreshFloat];
|
||||
[ret addObject: [OFPair pairWithFirstObject: resolution
|
||||
secondObject: refresh]];
|
||||
}
|
||||
|
||||
objc_autoreleasePoolPop(pool);
|
||||
} @finally {
|
||||
OFFreeMemory(resolutions);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue