quakeforge/libs/video/renderer/vulkan/vkgen/vkfieldarray.r
Bill Currie a6a3d4c6b5 [vulkan] Make array and single parsing smarter
Array and single type overrides now allow the parsing of the items
themselves to be customized. This makes it easy to handle arrays and
pointers to single items while also using custom specifications, rather
than relying entirely on the custom override.
2021-01-04 15:30:27 +09:00

49 lines
1.1 KiB
R

#include <PropertyList.h>
#include "vkfieldarray.h"
#include "vkfieldtype.h"
#include "vkgen.h"
#include "vktype.h"
@implementation ArrayField
-init:(PLItem *) item struct:(Struct *)strct field:(string)fname
{
self = [super init:item struct:strct field:fname];
if (!self) {
return self;
}
PLItem *desc = [item getObjectForKey:"type"];
type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain];
value_field = [[item getObjectForKey:"values"] string];
size_field = [[item getObjectForKey:"size"] string];
return self;
}
-writeParseData
{
fprintf (output_file, "static parse_array_t parse_%s_%s_data = {\n",
struct_name, field_name);
[type writeParseData];
fprintf (output_file, "\tfield_offset (%s, %s),\n",
struct_name, value_field);
if (size_field) {
fprintf (output_file, "\tfield_offset (%s, %s),\n",
struct_name, size_field);
} else {
fprintf (output_file, "\t-1,\n");
}
fprintf (output_file, "};\n");
return self;
}
-writeField
{
fprintf (output_file, "\t{\"%s\", 0, %s, parse_%s, &parse_%s_%s_data},\n",
field_name, "QFArray", "array", struct_name, field_name);
return self;
}
@end