brender-1997/pentprim/infogen.pl
2022-05-03 14:31:40 -07:00

1145 lines
25 KiB
Perl

# Converts primtive info file (*.ifg) into an array initialiser
#
# infogen <input-file>
#
# Read each primitive line
#
%global_properties = ();
foreach (@ARGV) {
/^\s*(.*)(=.*)?\s*/;
if(/^\s*(.*)=(.*)/) {
$global_properties{$1} = $2;
} elsif(/^\s*(.*)/) {
$global_properties{$1} = "TRUE";
}
}
while (<STDIN>) {
# Ignore comments
#
next if(/^#/);
if(/^\s*\[(.*)\]/) {
$props = $1;
# Common properties
#
# Go through each property
#
%common_properties = %global_properties;
foreach (split(",",$props)) {
/^\s*(.*)(=.*)?\s*/;
if(/^\s*(.*)=(.*)/) {
$common_properties{$1} = $2;
} elsif(/^\s*(.*)/) {
$common_properties{$1} = "TRUE";
}
}
} elsif(/^\s*(\w+\:)?\s*(\w+)\s*=\s*\[(.*)\]/) {
# print "[$1] [$2] [$3] [$4]\n";
# Remember image and renderer name
#
$image = $1;
$render = $2;
$props = $3;
$image =~ s/^\s*(.*)\s*:/\1/;
# Set default state
#
&set_default;
# Go through each property
#
%properties = %common_properties;
foreach (split(",",$props)) {
/^\s*(.*)(=.*)?\s*/;
if(/^\s*(.*)=(.*)/) {
$properties{$1} = $2;
} elsif(/^\s*(.*)/) {
$properties{$1} = "TRUE";
}
}
# This rather nasty way of doing things ensures that the subroutines are called
# in a defiend order, irrespective of the input order
#
&property_mmx($properties{"mmx"}) if $properties{"mmx"};
&property_point if $properties{"point"};
&property_line if $properties{"line"};
&property_triangle if $properties{"triangle"};
&property_quad if $properties{"quad"};
&property_sprite if $properties{"sprite"};
&property_index8 if $properties{"index8"};
&property_rgb555 if $properties{"rgb555"};
&property_rgb565 if $properties{"rgb565"};
&property_rgb888 if $properties{"rgb888"};
&property_rgbx888 if $properties{"rgbx888"};
&property_z_buffered if $properties{"z_buffered"};
&property_interpolated_intensity if $properties{"interpolated_intensity"};
&property_range_zero if $properties{"range_zero"};
&property_constant_intensity if $properties{"constant_intensity"};
&property_interpolated_colour if $properties{"interpolated_colour"};
&property_constant_colour if $properties{"constant_colour"};
&property_interpolated_alpha if $properties{"interpolated_alpha"};
&property_constant_alpha if $properties{"constant_alpha"};
&property_linear_depth if $properties{"linear_depth"};
&property_no_depth_write if $properties{"no_depth_write"};
&property_duplicate if $properties{"duplicate"};
&property_shade_table if $properties{"shade_table"};
&property_texture if $properties{"texture"};
&property_texture8x8 if $properties{"texture8x8"};
&property_texture16x16 if $properties{"texture16x16"};
&property_texture32x32 if $properties{"texture32x32"};
&property_texture64x64 if $properties{"texture64x64"};
&property_texture128x128 if $properties{"texture128x128"};
&property_texture256x256 if $properties{"texture256x256"};
&property_texture512x512 if $properties{"texture512x512"};
&property_texture1024x1024 if $properties{"texture1024x1024"};
&property_texture_index8 if $properties{"texture_index8"};
&property_texture_index8_palette if $properties{"texture_index8_palette"};
&property_texture_rgb555 if $properties{"texture_rgb555"};
&property_texture_rgb565 if $properties{"texture_rgb565"};
&property_texture_rgbx888 if $properties{"texture_rgbx888"};
&property_texture_power2 if $properties{"texture_power2"};
&property_texture_stride_positive if $properties{"texture_stride_positive"};
&property_texture_no_skip if $properties{"texture_no_skip"};
&property_unscaled_texture_coords if $properties{"unscaled_texture_coords"};
&property_perspective if $properties{"perspective"};
&property_perspective_subdivide if $properties{"perspective_subdivide"};
&property_dithered if $properties{"dithered"};
&property_colour7bit if $properties{"colour7bit"};
&property_dithered_map if $properties{"dithered_map"};
&property_colour_index if $properties{"colour_index"};
&property_colour_rgb if $properties{"colour_rgb"};
&property_rgb_shade if $properties{"rgb_shade"};
&property_decal if $properties{"decal"};
&property_bump if $properties{"bump"};
&property_blend_table if $properties{"blend_table"};
&property_blendrgb if $properties{"blendrgb"};
&property_screendoor if $properties{"screendoor"};
&property_fog if $properties{"fog"};
&property_float_components if $properties{"float_components"};
&property_integer_components if $properties{"integer_components"};
&property_fixed_components if $properties{"fixed_components"};
&property_float_homogeneous_coords if $properties{"float_homogeneous_coords"};
&property_float_coords if $properties{"float_coords"};
&property_float_depth if $properties{"float_depth"};
&property_float_colour if $properties{"float_colour"};
&property_float_texture_coords if $properties{"float_texture_coords"};
&property_float_intensity if $properties{"float_intensity"};
&property_float_alpha if $properties{"float_alpha"};
&property_float_linear_depth if $properties{"float_linear_depth"};
&property_integer_homogeneous_coords if $properties{"integer_homogeneous_coords"};
&property_integer_coords if $properties{"integer_coords"};
&property_integer_depth if $properties{"integer_depth"};
&property_integer_colour if $properties{"integer_colour"};
&property_integer_texture_coords if $properties{"integer_texture_coords"};
&property_integer_intensity if $properties{"integer_intensity"};
&property_integer_alpha if $properties{"integer_alpha"};
&property_integer_linear_depth if $properties{"integer_linear_depth"};
&property_fixed_homogeneous_coords if $properties{"fixed_homogeneous_coords"};
&property_fixed_coords if $properties{"fixed_coords"};
&property_fixed_depth if $properties{"fixed_depth"};
&property_fixed_colour if $properties{"fixed_colour"};
&property_fixed_texture_coords if $properties{"fixed_texture_coords"};
&property_fixed_intensity if $properties{"fixed_intensity"};
&property_fixed_alpha if $properties{"fixed_alpha"};
&property_fixed_linear_depth if $properties{"fixed_linear_depth"};
&property_generic_setup($properties{"generic_setup"}) if $properties{"generic_setup"};
&property_pixel_stride($properties{"pixel_stride"}) if $properties{"pixel_stride"};
&property_parameter_struct($properties{"parameter_struct"}) if $properties{"parameter_struct"};
&property_area_test($properties{"area_test"}) if $properties{"area_test"};
# Print out entry
#
&print_entry;
# Print externs ?
#
# &print_externs;
}
}
sub set_default {
$identifier = "";
$type = "BR_PRIMT_UNKNOWN";
$autoloader = "RenderAutoloadThunk";
@flags = ();
@prim_flags = ();
@constant_components = ();
@vertex_components = ();
@convert_mask_f = ();
@convert_mask_x = ();
@convert_mask_i = ();
@use_buffers = ();
@match_flags_set = ();
@match_flags_clear = ();
@flags_mask = ();
@flags_cmp = ();
@range_flags = ();
$colour_type = "PMT_NONE";
$depth_type = "PMT_NONE";
$texture_type = "PMT_NONE";
$shade_type = "PMT_NONE";
$blend_type = "PMT_NONE";
$bump_type = "PMT_NONE";
$lighting_type = "PMT_NONE";
$screendoor_type = "PMT_NONE";
$fog_type = "PMT_NONE";
$input_colour_type = "0";
$colour_row_size = 0;
$depth_row_size = 0;
$texture_width = 0;
$texture_height = 0;
$decal_flag = "FALSE";
$colour_base = "BR_SCALAR(0),BR_SCALAR(0),BR_SCALAR(0)";
$colour_scale = "BR_SCALAR(0),BR_SCALAR(0),BR_SCALAR(0)";
$alpha_base = "BR_SCALAR(0)";
$alpha_scale = "BR_SCALAR(0)";
%integer_component = ();
%float_component = ();
$generic_setup = "";
$pixel_stride = 0;
$param_size = "0";
$area_limit = "0.0f";
$param_struct = "";
}
sub print_entry {
# Strip trailing comma from name
#
$identifier =~ s/, $//;
# Split components by type
#
foreach $component (@constant_components, @vertex_components) {
if ($integer_component{$component}) {
push(@convert_mask_i,($component));
} elsif ($float_component{$component}) {
push(@convert_mask_f,($component));
} else {
push(@convert_mask_x,($component));
}
}
@flags_mask = (@match_flags_set, @match_flags_clear);
@flags_cmp = (@match_flags_set);
# Convert flag arrays to strings
#
$prim_flags_string = "0";
$prim_flags_string = "BR_PRIMF_" . join("|BR_PRIMF_",@prim_flags) if(@prim_flags);
$constant_components_string = "0";
$constant_components_string = "CM_" . join("|CM_",@constant_components) if(@constant_components);
$vertex_components_string = "0";
$vertex_components_string = "CM_" . join("|CM_",@vertex_components) if(@vertex_components);
$convert_mask_f_string = "0";
$convert_mask_f_string = "(1<<C_" . join(")|(1<<C_",@convert_mask_f) . ")" if(@convert_mask_f);
$convert_mask_x_string = "0";
$convert_mask_x_string = "(1<<C_" . join(")|(1<<C_",@convert_mask_x) . ")" if(@convert_mask_x);
$convert_mask_i_string = "0";
$convert_mask_i_string = "(1<<C_" . join(")|(1<<C_",@convert_mask_i) . ")" if(@convert_mask_i);
$constant_slots_string = "0";
$constant_slots_string = "(1<<C_" . join(")|(1<<C_",@constant_components) . ")" if(@constant_components);
$use_buffers_string = "0";
$use_buffers_string = "BUFFER_" . join("_MASK|BUFFER_",@use_buffers) ."_MASK" if(@use_buffers);
$flags_mask_string = "0";
$flags_mask_string = "PRIMF_" . join("|PRIMF_",@flags_mask) if(@flags_mask);
$flags_cmp_string = "0";
$flags_cmp_string = "PRIMF_" . join("|PRIMF_",@flags_cmp) if(@flags_cmp);
$range_flags_string = "0";
$range_flags_string = "RF_" . join("|RF_",@range_flags) if(@range_flags);
if($image) {
$image = "\"$properties{image_prefix}$image$properties{image_suffix}\"";
if($generic_setup){
$image_entry = "$render";
}else{
$image_entry = "\"_$render\"";
}
$entry = $autoloader;
} else {
$image = "NULL";
$image_entry = "NULL";
$entry = $render;
}
print <<END;
{
{
/* Render function
*/
#if AUTOLOAD
(brp_render_fn *)$entry, NULL,
#else
(brp_render_fn *)$render, NULL,
#endif
"$identifier", NULL,
BRT_$type, $prim_flags_string,
/* components - constant and per vertex
*/
$constant_components_string,
$vertex_components_string,
/* Component slots as - float, fixed or integer
*/
$convert_mask_f_string,
$convert_mask_x_string,
$convert_mask_i_string,
/* Constant slots
*/
$constant_slots_string,
},
/* Offset and scale for R,G,B,A
*/
{$colour_base,$alpha_base},
{$colour_scale,$alpha_scale},
/* range flags
*/
$range_flags_string,
/* Work buffer
*/
&work,
/* Masks
*/
$flags_mask_string,
$flags_cmp_string,
/* Texture, depth and shade type
*/
$depth_type,
$texture_type,
$shade_type,
$blend_type,
$screendoor_type,
$lighting_type,
$bump_type,
$fog_type,
/* Colour & Depth row size
*/
$colour_row_size,$depth_row_size,
/* Texture size
*/
$texture_width,$texture_height,
/* Input colour type
*/
$input_colour_type,
/* Autoload info
*/
#if AUTOLOAD
$image,(void *)$image_entry,
#else
NULL,NULL,
#endif
END
print <<END if($generic_setup);
/* Generic setup info.
*/
{
$area_limit,
$param_size,
$pixel_stride,
$generic_setup,
#if AUTOLOAD
(void *)\"_$rasterise_rl_l\",
(void *)\"_$rasterise_lr_l\",
(void *)\"_$rasterise_rl_s\",
(void *)\"_$rasterise_lr_s\",
#else
$rasterise_rl_l,
$rasterise_lr_l,
$rasterise_rl_s,
$rasterise_lr_s,
#endif
}
END
print "},\n";
}
sub print_externs
{
# Generate some externs
#
if($generic_setup) {
print "void BR_ASM_CALL $generic_setup(void);\n";
print "void BR_ASM_CALL $rasterise_lr_l(void);\n";
print "void BR_ASM_CALL $rasterise_rl_l(void);\n";
print "void BR_ASM_CALL $rasterise_lr_s(void);\n" if($rasterise_lr_l ne $rasterise_lr_s);
print "void BR_ASM_CALL $rasterise_rl_s(void);\n" if($rasterise_rl_l ne $rasterise_rl_s);
} else {
print "void BR_ASM_CALL $render(brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2);\n";
}
}
# Routines for each property
#
sub property_range_zero
{
push(@match_flags_set,("RANGE_ZERO"));
}
sub property_index8
{
$identifier .= "Indexed, ";
$colour_type = "BR_PMT_INDEX_8";
}
sub property_rgb555
{
$identifier .= "RGB 555, ";
$colour_type = "BR_PMT_RGB_555";
}
sub property_rgb565
{
$identifier .= "RGB 565, ";
$colour_type = "BR_PMT_RGB_565";
}
sub property_rgb888
{
$identifier .= "RGB 888, ";
$colour_type = "BR_PMT_RGB_888";
}
sub property_rgbx888
{
$identifier .= "RGBX 888, ";
$colour_type = "BR_PMT_RGBX_888";
}
sub property_z_buffered
{
$identifier .= "Z Buffered, ";
$depth_type = "BR_PMT_DEPTH_16";
push(@vertex_components,("SZ"));
push(@use_buffers,("DEPTH"));
}
sub property_shade_table
{
if($properties{"constant_intensity"} || $properties{"interpolated_intensity"}) {
push(@use_buffers,("SHADE"));
$shade_type = $colour_type;
}
}
# Texture mapped
#
sub shared_texture
{
push(@vertex_components,("U","V"));
push(@use_buffers,("TEXTURE"));
if($properties{"constant_intensity"} || $properties{"interpolated_intensity"}) {
push(@use_buffers,("SHADE"));
$shade_type = $colour_type;
}
if($properties{"constant_intensity"} || $properties{"interpolated_intensity"} ||
$properties{"constant_colour"} || $properties{"interpolated_colour"}) {
push(@match_flags_set,("MODULATE"));
}
$texture_type = $colour_type;
}
sub property_texture
{
$identifier .= "Textured, ";
$texture_width = 0;
$texture_height = 0;
&shared_texture;
}
sub property_texture8x8
{
$identifier .= "Textured 8x8, ";
$texture_width = 8;
$texture_height = 8;
&shared_texture;
}
sub property_texture16x16
{
$identifier .= "Textured 16x16, ";
$texture_width = 16;
$texture_height = 16;
&shared_texture;
}
sub property_texture32x32
{
$identifier .= "Textured 32x32, ";
$texture_width = 32;
$texture_height = 32;
&shared_texture;
}
sub property_texture64x64
{
$identifier .= "Textured 64x64, ";
$texture_width = 64;
$texture_height = 64;
&shared_texture;
}
sub property_texture128x128
{
$identifier .= "Textured 128x128, ";
$texture_width = 128;
$texture_height = 128;
&shared_texture;
}
sub property_texture256x256
{
$identifier .= "Textured 256x256, ";
$texture_width = 256;
$texture_height = 256;
&shared_texture;
}
sub property_texture512x512
{
$identifier .= "Textured 512x512, ";
$texture_width = 512;
$texture_height = 512;
&shared_texture;
}
sub property_texture1024x1024
{
$identifier .= "Textured 1024x1024, ";
$texture_width = 1024;
$texture_height = 1024;
&shared_texture;
}
# Extra properties for texture mapping
#
sub property_texture_index8
{
$texture_type = "BR_PMT_INDEX_8";
}
sub property_texture_index8_palette
{
$texture_type = "BR_PMT_INDEX_8";
push(@match_flags_set,("PALETTE"));
}
sub property_texture_rgb555
{
$texture_type = "BR_PMT_RGB_555";
}
sub property_texture_rgb565
{
$texture_type = "BR_PMT_RGB_565";
}
sub property_texture_rgbx888
{
$texture_type = "BR_PMT_RGBX_888";
}
sub property_unscaled_texture_coords
{
$identifier .= "Unscaled_texture_coords, ";
push(@range_flags,("UNSCALED_TEXTURE_COORDS"));
}
sub property_texture_power2
{
push(@match_flags_set,("POWER2"));
}
sub property_texture_stride_positive
{
push(@match_flags_set,("STRIDE_POSITIVE"));
}
sub property_texture_no_skip
{
push(@match_flags_set,("NO_SKIP"));
}
sub property_decal
{
$identifier .= "Decal, ";
push(@match_flags_set,("DECAL"));
push(@range_flags,("DECAL"));
}
sub property_blend
{
$identifier .= "Blended, ";
if($properties{"constant_alpha"} || $properties{"interpolated_alpha"}) {
$blend_type = $colour_type;
}
push(@prim_flags,("BLENDED"));
}
sub property_blendrgb
{
$identifier .= "RGB blended, ";
push(@match_flags_set,("BLEND"));
push(@prim_flags,("BLENDED"));
}
sub property_screendoor
{
$identifier .= "Screendoor, ";
push(@match_flags_set,("BLEND"));
push(@prim_flags,("BLENDED"));
}
sub property_perspective
{
$identifier .= "Perspective Correct, ";
push(@vertex_components,("W"));
push(@match_flags_set,("PERSPECTIVE"));
}
sub property_perspective_subdivide
{
$identifier .= "Perspective Correct, ";
push(@match_flags_set,("PERSPECTIVE"));
push(@prim_flags,("SUBDIVIDE"));
push(@range_flags,("NEED_SUBDIVIDE"));
}
sub property_dithered_map
{
$identifier .= "Dithered Map, ";
push(@match_flags_set,("DITHER_MAP"));
}
sub property_dithered
{
$identifier .= "Dithered, ";
push(@match_flags_set,("DITHER_COLOUR"));
}
sub property_colour7bit
{
}
sub property_interpolated_intensity
{
$identifier .= "Interpolated Intensity, ";
push(@vertex_components,("I"));
push(@match_flags_set,("SMOOTH"));
}
sub property_constant_intensity
{
$identifier .= "Constant Intensity, ";
push(@constant_components,("I"));
push(@match_flags_clear,("SMOOTH"));
}
sub property_interpolated_colour
{
$identifier .= "Interpolated Colour, ";
push(@vertex_components,("R","G","B"));
push(@match_flags_set,("SMOOTH"));
$colour_base = "BR_SCALAR(1),BR_SCALAR(1),BR_SCALAR(1)";
$colour_scale = "BR_SCALAR(254),BR_SCALAR(254),BR_SCALAR(254)" if(!$properties{"dithered"} && !$properties{"colour7bit"});
$colour_scale = "BR_SCALAR(126),BR_SCALAR(126),BR_SCALAR(126)" if(!$properties{"dithered"} && $properties{"colour7bit"});
$colour_scale = "BR_SCALAR(247),BR_SCALAR(251),BR_SCALAR(247)" if( $properties{"dithered"} && !$properties{"colour7bit"});
$colour_scale = "BR_SCALAR(123),BR_SCALAR(125),BR_SCALAR(123)" if( $properties{"dithered"} && $properties{"colour7bit"});
}
sub property_constant_colour
{
$identifier .= "Constant Colour, ";
push(@constant_components,("R","G","B"));
push(@match_flags_clear,("SMOOTH"));
$colour_base = "BR_SCALAR(1),BR_SCALAR(1),BR_SCALAR(1)";
$colour_scale = "BR_SCALAR(254),BR_SCALAR(254),BR_SCALAR(254)" if(!$properties{"dithered"} && !$properties{"colour7bit"});
$colour_scale = "BR_SCALAR(126),BR_SCALAR(126),BR_SCALAR(126)" if(!$properties{"dithered"} && $properties{"colour7bit"});
$colour_scale = "BR_SCALAR(247),BR_SCALAR(251),BR_SCALAR(247)" if( $properties{"dithered"} && !$properties{"colour7bit"});
$colour_scale = "BR_SCALAR(123),BR_SCALAR(125),BR_SCALAR(123)" if( $properties{"dithered"} && $properties{"colour7bit"});
}
sub property_interpolated_alpha
{
push(@vertex_components,("A"));
$alpha_base = "BR_SCALAR(0)";
$alpha_scale = "BR_SCALAR(1)";
}
sub property_constant_alpha
{
push(@constant_components,("A"));
$alpha_base = "BR_SCALAR(0)";
$alpha_scale = "BR_SCALAR(1)";
}
sub property_linear_depth
{
push(@vertex_components,("SW"));
}
sub property_no_depth_write
{
push(@match_flags_clear,("DEPTH_WRITE"));
}
sub property_duplicate
{
push(@prim_flags,("CONST_DUPLICATE"));
}
sub property_colour_index
{
$input_colour_type = "BRT_INDEX";
}
sub property_colour_rgb
{
$input_colour_type = "BRT_RGB";
}
sub property_rgb_shade
{
$identifier .= "RGB Shading, ";
$shade_type = "BR_PMT_RGBX_888";
push(@range_flags,("RGB_SHADE"));
}
sub property_bump
{
$identifier .= "Bump, ";
$bump_type = "BR_PMT_INDEX_8";
$lighting_type = "BR_PMT_INDEX_8";
}
sub property_blend_table
{
$identifier .= "Blend, ";
$blend_type = "BR_PMT_INDEX_8";
push(@prim_flags,("BLENDED"));
}
sub property_fog
{
$identifier .= "Fog, ";
$fog_type = "BR_PMT_INDEX_8";
}
sub property_point
{
$type = "POINT";
push(@vertex_components,("SX","SY"));
push(@use_buffers,("COLOUR"));
}
sub property_line
{
$type = "LINE";
push(@vertex_components,("SX","SY"));
push(@use_buffers,("COLOUR"));
}
sub property_triangle
{
$type = "TRIANGLE";
push(@vertex_components,("SX","SY"));
push(@use_buffers,("COLOUR"));
}
sub property_quad
{
$type = "QUAD";
push(@vertex_components,("SX","SY"));
push(@use_buffers,("COLOUR"));
}
sub property_sprite
{
$type = "SPRITE";
push(@vertex_components,("SX","SY"));
push(@use_buffers,("COLOUR"));
}
sub property_fixed_components
{
&property_fixed_homogeneous_coords;
&property_fixed_coords;
&property_fixed_depth;
&property_fixed_colour;
&property_fixed_texture_coords;
&property_fixed_intensity;
&property_fixed_alpha;
&property_fixed_linear_depth;
}
sub property_integer_components
{
&property_integer_homogeneous_coords;
&property_integer_coords;
&property_integer_depth;
&property_integer_colour;
&property_integer_texture_coords;
&property_integer_intensity;
&property_integer_alpha;
&property_integer_linear_depth;
}
sub property_float_components
{
&property_float_homogeneous_coords;
&property_float_coords;
&property_float_depth;
&property_float_colour;
&property_float_texture_coords;
&property_float_intensity;
&property_float_alpha;
&property_float_linear_depth;
}
sub property_fixed_homogeneous_coords
{
$integer_component{"X"} = 0;
$integer_component{"Y"} = 0;
$integer_component{"Z"} = 0;
$integer_component{"W"} = 0;
$float_component{"X"} = 0;
$float_component{"Y"} = 0;
$float_component{"Z"} = 0;
$float_component{"W"} = 0;
}
sub property_fixed_coords
{
$integer_component{"SX"} = 0;
$integer_component{"SY"} = 0;
$float_component{"SX"} = 0;
$float_component{"SY"} = 0;
}
sub property_fixed_depth
{
$integer_component{"SZ"} = 0;
$float_component{"SZ"} = 0;
}
sub property_fixed_colour
{
$integer_component{"R"} = 0;
$integer_component{"G"} = 0;
$integer_component{"B"} = 0;
$float_component{"R"} = 0;
$float_component{"G"} = 0;
$float_component{"B"} = 0;
}
sub property_fixed_texture_coords
{
$integer_component{"U"} = 0;
$integer_component{"V"} = 0;
$float_component{"U"} = 0;
$float_component{"V"} = 0;
}
sub property_fixed_intensity
{
$integer_component{"I"} = 0;
$float_component{"I"} = 0;
}
sub property_fixed_alpha
{
$integer_component{"A"} = 0;
$float_component{"A"} = 0;
}
sub property_fixed_linear_depth
{
$integer_component{"SW"} = 0;
$float_component{"SW"} = 0;
}
sub property_integer_homogeneous_coords
{
$integer_component{"X"} = 1;
$integer_component{"Y"} = 1;
$integer_component{"Z"} = 1;
$integer_component{"W"} = 1;
$float_component{"X"} = 0;
$float_component{"Y"} = 0;
$float_component{"Z"} = 0;
$float_component{"W"} = 0;
}
sub property_integer_coords
{
$integer_component{"SX"} = 1;
$integer_component{"SY"} = 1;
$float_component{"SX"} = 0;
$float_component{"SY"} = 0;
}
sub property_integer_depth
{
$integer_component{"SZ"} = 1;
$float_component{"SZ"} = 0;
}
sub property_integer_colour
{
$integer_component{"R"} = 1;
$integer_component{"G"} = 1;
$integer_component{"B"} = 1;
$float_component{"R"} = 0;
$float_component{"G"} = 0;
$float_component{"B"} = 0;
}
sub property_integer_texture_coords
{
$integer_component{"U"} = 1;
$integer_component{"V"} = 1;
$float_component{"U"} = 0;
$float_component{"V"} = 0;
}
sub property_integer_intensity
{
$integer_component{"I"} = 1;
$float_component{"I"} = 0;
}
sub property_integer_alpha
{
$integer_component{"A"} = 1;
$float_component{"A"} = 0;
}
sub property_integer_linear_depth
{
$integer_component{"SW"} = 1;
$float_component{"SW"} = 0;
}
sub property_float_homogeneous_coords
{
$integer_component{"X"} = 0;
$integer_component{"Y"} = 0;
$integer_component{"Z"} = 0;
$integer_component{"W"} = 0;
$float_component{"X"} = 1;
$float_component{"Y"} = 1;
$float_component{"Z"} = 1;
$float_component{"W"} = 1;
}
sub property_float_coords
{
$integer_component{"SX"} = 0;
$integer_component{"SY"} = 0;
$float_component{"SX"} = 1;
$float_component{"SY"} = 1;
}
sub property_float_depth
{
$integer_component{"SZ"} = 0;
$float_component{"SZ"} = 1;
}
sub property_float_colour
{
$integer_component{"R"} = 0;
$integer_component{"G"} = 0;
$integer_component{"B"} = 0;
$float_component{"R"} = 1;
$float_component{"G"} = 1;
$float_component{"B"} = 1;
}
sub property_float_texture_coords
{
$integer_component{"U"} = 0;
$integer_component{"V"} = 0;
$float_component{"U"} = 1;
$float_component{"V"} = 1;
}
sub property_float_intensity
{
$integer_component{"I"} = 0;
$float_component{"I"} = 1;
}
sub property_float_alpha
{
$integer_component{"A"} = 0;
$float_component{"A"} = 1;
}
sub property_float_linear_depth
{
$integer_component{"SW"} = 0;
$float_component{"SW"} = 1;
}
sub property_pixel_stride
{
($pixel_stride) = @_;
}
sub property_parameter_struct
{
($s) = @_;
($param_size) = "sizeof(struct $s)";
}
sub property_generic_setup
{
($r) = @_;
$rasterise_lr_l = $render . "_LR";
$rasterise_rl_l = $render . "_RL";
$rasterise_lr_s = $render . "_LR";
$rasterise_rl_s = $render . "_RL";
if($float_component{"X"}) {
($generic_setup) = "GenericSetupFloat" . $r;
$render = "GenericSetupTriangleFloat_A";
} elsif($integer_component{"X"}) {
($generic_setup) = "GenericSetup" . $r;
$render = "GenericSetupTriangle_A";
} else {
($generic_setup) = "GenericSetupFixed" . $r;
$render = "GenericSetupTriangleFixed_A";
}
$autoloader = "GenericAutoloadThunk";
}
sub property_area_test
{
($generic_area_limit) = @_;
$rasterise_lr_s .= "S";
$rasterise_rl_s .= "S";
}
sub property_mmx
{
$identifier .= "MMX, ";
push(@range_flags,("OFFSET_Y"));
}