|
|
@@ -36,151 +36,6 @@ THE SOFTWARE.
|
|
|
namespace CamelotEngine
|
|
|
{
|
|
|
|
|
|
- //---------------------------------------------------------------------
|
|
|
- GpuProgramParameters::AutoConstantDefinition GpuProgramParameters::AutoConstantDictionary[] = {
|
|
|
- AutoConstantDefinition(ACT_WORLD_MATRIX, "world_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_WORLD_MATRIX, "inverse_world_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_WORLD_MATRIX, "transpose_world_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_WORLD_MATRIX, "inverse_transpose_world_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_WORLD_MATRIX_ARRAY_3x4, "world_matrix_array_3x4", 12, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_WORLD_MATRIX_ARRAY, "world_matrix_array", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_VIEW_MATRIX, "view_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_VIEW_MATRIX, "inverse_view_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_VIEW_MATRIX, "transpose_view_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_VIEW_MATRIX, "inverse_transpose_view_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_PROJECTION_MATRIX, "projection_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_PROJECTION_MATRIX, "inverse_projection_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_PROJECTION_MATRIX, "transpose_projection_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_PROJECTION_MATRIX, "inverse_transpose_projection_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_VIEWPROJ_MATRIX, "viewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_VIEWPROJ_MATRIX, "inverse_viewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_VIEWPROJ_MATRIX, "transpose_viewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_VIEWPROJ_MATRIX, "inverse_transpose_viewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_WORLDVIEW_MATRIX, "worldview_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_WORLDVIEW_MATRIX, "inverse_worldview_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_WORLDVIEW_MATRIX, "transpose_worldview_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_WORLDVIEW_MATRIX, "inverse_transpose_worldview_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_WORLDVIEWPROJ_MATRIX, "worldviewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_WORLDVIEWPROJ_MATRIX, "inverse_worldviewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TRANSPOSE_WORLDVIEWPROJ_MATRIX, "transpose_worldviewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TRANSPOSE_WORLDVIEWPROJ_MATRIX, "inverse_transpose_worldviewproj_matrix", 16, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_RENDER_TARGET_FLIPPING, "render_target_flipping", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VERTEX_WINDING, "vertex_winding", 1, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_FOG_COLOUR, "fog_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_FOG_PARAMS, "fog_params", 4, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_SURFACE_AMBIENT_COLOUR, "surface_ambient_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SURFACE_DIFFUSE_COLOUR, "surface_diffuse_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SURFACE_SPECULAR_COLOUR, "surface_specular_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SURFACE_EMISSIVE_COLOUR, "surface_emissive_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SURFACE_SHININESS, "surface_shininess", 1, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_LIGHT_COUNT, "light_count", 1, ET_REAL, ACDT_NONE),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_AMBIENT_LIGHT_COLOUR, "ambient_light_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIFFUSE_COLOUR, "light_diffuse_colour", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_SPECULAR_COLOUR, "light_specular_colour", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_ATTENUATION, "light_attenuation", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SPOTLIGHT_PARAMS, "spotlight_params", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION, "light_position", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION_OBJECT_SPACE, "light_position_object_space", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION_VIEW_SPACE, "light_position_view_space", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION, "light_direction", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION_OBJECT_SPACE, "light_direction_object_space", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION_VIEW_SPACE, "light_direction_view_space", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DISTANCE_OBJECT_SPACE, "light_distance_object_space", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POWER_SCALE, "light_power", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIFFUSE_COLOUR_POWER_SCALED, "light_diffuse_colour_power_scaled", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_SPECULAR_COLOUR_POWER_SCALED, "light_specular_colour_power_scaled", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIFFUSE_COLOUR_ARRAY, "light_diffuse_colour_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_SPECULAR_COLOUR_ARRAY, "light_specular_colour_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIFFUSE_COLOUR_POWER_SCALED_ARRAY, "light_diffuse_colour_power_scaled_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_SPECULAR_COLOUR_POWER_SCALED_ARRAY, "light_specular_colour_power_scaled_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_ATTENUATION_ARRAY, "light_attenuation_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION_ARRAY, "light_position_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION_OBJECT_SPACE_ARRAY, "light_position_object_space_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POSITION_VIEW_SPACE_ARRAY, "light_position_view_space_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION_ARRAY, "light_direction_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION_OBJECT_SPACE_ARRAY, "light_direction_object_space_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DIRECTION_VIEW_SPACE_ARRAY, "light_direction_view_space_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_DISTANCE_OBJECT_SPACE_ARRAY, "light_distance_object_space_array", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_POWER_SCALE_ARRAY, "light_power_array", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SPOTLIGHT_PARAMS_ARRAY, "spotlight_params_array", 4, ET_REAL, ACDT_INT),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_DERIVED_AMBIENT_LIGHT_COLOUR, "derived_ambient_light_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_DERIVED_SCENE_COLOUR, "derived_scene_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_DERIVED_LIGHT_DIFFUSE_COLOUR, "derived_light_diffuse_colour", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_DERIVED_LIGHT_SPECULAR_COLOUR, "derived_light_specular_colour", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_DERIVED_LIGHT_DIFFUSE_COLOUR_ARRAY, "derived_light_diffuse_colour_array", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_DERIVED_LIGHT_SPECULAR_COLOUR_ARRAY, "derived_light_specular_colour_array", 4, ET_REAL, ACDT_INT),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_LIGHT_NUMBER, "light_number", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_CASTS_SHADOWS, "light_casts_shadows", 1, ET_REAL, ACDT_INT),
|
|
|
-
|
|
|
- AutoConstantDefinition(ACT_SHADOW_EXTRUSION_DISTANCE, "shadow_extrusion_distance", 1, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_CAMERA_POSITION, "camera_position", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_CAMERA_POSITION_OBJECT_SPACE, "camera_position_object_space", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_VIEWPROJ_MATRIX, "texture_viewproj_matrix", 16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_VIEWPROJ_MATRIX_ARRAY, "texture_viewproj_matrix_array", 16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_WORLDVIEWPROJ_MATRIX, "texture_worldviewproj_matrix",16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_WORLDVIEWPROJ_MATRIX_ARRAY, "texture_worldviewproj_matrix_array",16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SPOTLIGHT_VIEWPROJ_MATRIX, "spotlight_viewproj_matrix", 16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SPOTLIGHT_VIEWPROJ_MATRIX_ARRAY, "spotlight_viewproj_matrix_array", 16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SPOTLIGHT_WORLDVIEWPROJ_MATRIX, "spotlight_worldviewproj_matrix",16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_CUSTOM, "custom", 4, ET_REAL, ACDT_INT), // *** needs to be tested
|
|
|
- AutoConstantDefinition(ACT_TIME, "time", 1, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_X, "time_0_x", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_COSTIME_0_X, "costime_0_x", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_SINTIME_0_X, "sintime_0_x", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TANTIME_0_X, "tantime_0_x", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_X_PACKED, "time_0_x_packed", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_1, "time_0_1", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_COSTIME_0_1, "costime_0_1", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_SINTIME_0_1, "sintime_0_1", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TANTIME_0_1, "tantime_0_1", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_1_PACKED, "time_0_1_packed", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_2PI, "time_0_2pi", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_COSTIME_0_2PI, "costime_0_2pi", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_SINTIME_0_2PI, "sintime_0_2pi", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TANTIME_0_2PI, "tantime_0_2pi", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_TIME_0_2PI_PACKED, "time_0_2pi_packed", 4, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_FRAME_TIME, "frame_time", 1, ET_REAL, ACDT_REAL),
|
|
|
- AutoConstantDefinition(ACT_FPS, "fps", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEWPORT_WIDTH, "viewport_width", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEWPORT_HEIGHT, "viewport_height", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_VIEWPORT_WIDTH, "inverse_viewport_width", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_VIEWPORT_HEIGHT, "inverse_viewport_height", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEWPORT_SIZE, "viewport_size", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEW_DIRECTION, "view_direction", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEW_SIDE_VECTOR, "view_side_vector", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_VIEW_UP_VECTOR, "view_up_vector", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_FOV, "fov", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_NEAR_CLIP_DISTANCE, "near_clip_distance", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_FAR_CLIP_DISTANCE, "far_clip_distance", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_PASS_NUMBER, "pass_number", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_PASS_ITERATION_NUMBER, "pass_iteration_number", 1, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_ANIMATION_PARAMETRIC, "animation_parametric", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_TEXEL_OFFSETS, "texel_offsets", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SCENE_DEPTH_RANGE, "scene_depth_range", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_SHADOW_SCENE_DEPTH_RANGE, "shadow_scene_depth_range", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_SHADOW_COLOUR, "shadow_colour", 4, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_SIZE, "texture_size", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_INVERSE_TEXTURE_SIZE, "inverse_texture_size", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_PACKED_TEXTURE_SIZE, "packed_texture_size", 4, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_TEXTURE_MATRIX, "texture_matrix", 16, ET_REAL, ACDT_INT),
|
|
|
- AutoConstantDefinition(ACT_LOD_CAMERA_POSITION, "lod_camera_position", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_LOD_CAMERA_POSITION_OBJECT_SPACE, "lod_camera_position_object_space", 3, ET_REAL, ACDT_NONE),
|
|
|
- AutoConstantDefinition(ACT_LIGHT_CUSTOM, "light_custom", 4, ET_REAL, ACDT_INT)
|
|
|
- };
|
|
|
-
|
|
|
bool GpuNamedConstants::msGenerateAllConstantDefinitionArrayEntries = false;
|
|
|
|
|
|
//---------------------------------------------------------------------
|
|
|
@@ -591,7 +446,6 @@ namespace CamelotEngine
|
|
|
// AutoConstantEntry, RealConstantEntry, IntConstantEntry
|
|
|
mFloatConstants = oth.mFloatConstants;
|
|
|
mIntConstants = oth.mIntConstants;
|
|
|
- mAutoConstants = oth.mAutoConstants;
|
|
|
mFloatLogicalToPhysical = oth.mFloatLogicalToPhysical;
|
|
|
mIntLogicalToPhysical = oth.mIntLogicalToPhysical;
|
|
|
mNamedConstants = oth.mNamedConstants;
|
|
|
@@ -857,162 +711,6 @@ namespace CamelotEngine
|
|
|
memcpy(dest, &mIntConstants[physicalIndex], sizeof(int) * count);
|
|
|
}
|
|
|
//---------------------------------------------------------------------
|
|
|
- UINT16 GpuProgramParameters::deriveVariability(GpuProgramParameters::AutoConstantType act)
|
|
|
- {
|
|
|
- switch(act)
|
|
|
- {
|
|
|
- case ACT_VIEW_MATRIX:
|
|
|
- case ACT_INVERSE_VIEW_MATRIX:
|
|
|
- case ACT_TRANSPOSE_VIEW_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_VIEW_MATRIX:
|
|
|
- case ACT_PROJECTION_MATRIX:
|
|
|
- case ACT_INVERSE_PROJECTION_MATRIX:
|
|
|
- case ACT_TRANSPOSE_PROJECTION_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_PROJECTION_MATRIX:
|
|
|
- case ACT_VIEWPROJ_MATRIX:
|
|
|
- case ACT_INVERSE_VIEWPROJ_MATRIX:
|
|
|
- case ACT_TRANSPOSE_VIEWPROJ_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_VIEWPROJ_MATRIX:
|
|
|
- case ACT_RENDER_TARGET_FLIPPING:
|
|
|
- case ACT_VERTEX_WINDING:
|
|
|
- case ACT_AMBIENT_LIGHT_COLOUR:
|
|
|
- case ACT_DERIVED_AMBIENT_LIGHT_COLOUR:
|
|
|
- case ACT_DERIVED_SCENE_COLOUR:
|
|
|
- case ACT_FOG_COLOUR:
|
|
|
- case ACT_FOG_PARAMS:
|
|
|
- case ACT_SURFACE_AMBIENT_COLOUR:
|
|
|
- case ACT_SURFACE_DIFFUSE_COLOUR:
|
|
|
- case ACT_SURFACE_SPECULAR_COLOUR:
|
|
|
- case ACT_SURFACE_EMISSIVE_COLOUR:
|
|
|
- case ACT_SURFACE_SHININESS:
|
|
|
- case ACT_CAMERA_POSITION:
|
|
|
- case ACT_TIME:
|
|
|
- case ACT_TIME_0_X:
|
|
|
- case ACT_COSTIME_0_X:
|
|
|
- case ACT_SINTIME_0_X:
|
|
|
- case ACT_TANTIME_0_X:
|
|
|
- case ACT_TIME_0_X_PACKED:
|
|
|
- case ACT_TIME_0_1:
|
|
|
- case ACT_COSTIME_0_1:
|
|
|
- case ACT_SINTIME_0_1:
|
|
|
- case ACT_TANTIME_0_1:
|
|
|
- case ACT_TIME_0_1_PACKED:
|
|
|
- case ACT_TIME_0_2PI:
|
|
|
- case ACT_COSTIME_0_2PI:
|
|
|
- case ACT_SINTIME_0_2PI:
|
|
|
- case ACT_TANTIME_0_2PI:
|
|
|
- case ACT_TIME_0_2PI_PACKED:
|
|
|
- case ACT_FRAME_TIME:
|
|
|
- case ACT_FPS:
|
|
|
- case ACT_VIEWPORT_WIDTH:
|
|
|
- case ACT_VIEWPORT_HEIGHT:
|
|
|
- case ACT_INVERSE_VIEWPORT_WIDTH:
|
|
|
- case ACT_INVERSE_VIEWPORT_HEIGHT:
|
|
|
- case ACT_VIEWPORT_SIZE:
|
|
|
- case ACT_TEXEL_OFFSETS:
|
|
|
- case ACT_TEXTURE_SIZE:
|
|
|
- case ACT_INVERSE_TEXTURE_SIZE:
|
|
|
- case ACT_PACKED_TEXTURE_SIZE:
|
|
|
- case ACT_SCENE_DEPTH_RANGE:
|
|
|
- case ACT_VIEW_DIRECTION:
|
|
|
- case ACT_VIEW_SIDE_VECTOR:
|
|
|
- case ACT_VIEW_UP_VECTOR:
|
|
|
- case ACT_FOV:
|
|
|
- case ACT_NEAR_CLIP_DISTANCE:
|
|
|
- case ACT_FAR_CLIP_DISTANCE:
|
|
|
- case ACT_PASS_NUMBER:
|
|
|
- case ACT_TEXTURE_MATRIX:
|
|
|
- case ACT_LOD_CAMERA_POSITION:
|
|
|
-
|
|
|
- return (UINT16)GPV_GLOBAL;
|
|
|
-
|
|
|
- case ACT_WORLD_MATRIX:
|
|
|
- case ACT_INVERSE_WORLD_MATRIX:
|
|
|
- case ACT_TRANSPOSE_WORLD_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_WORLD_MATRIX:
|
|
|
- case ACT_WORLD_MATRIX_ARRAY_3x4:
|
|
|
- case ACT_WORLD_MATRIX_ARRAY:
|
|
|
- case ACT_WORLDVIEW_MATRIX:
|
|
|
- case ACT_INVERSE_WORLDVIEW_MATRIX:
|
|
|
- case ACT_TRANSPOSE_WORLDVIEW_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_WORLDVIEW_MATRIX:
|
|
|
- case ACT_WORLDVIEWPROJ_MATRIX:
|
|
|
- case ACT_INVERSE_WORLDVIEWPROJ_MATRIX:
|
|
|
- case ACT_TRANSPOSE_WORLDVIEWPROJ_MATRIX:
|
|
|
- case ACT_INVERSE_TRANSPOSE_WORLDVIEWPROJ_MATRIX:
|
|
|
- case ACT_CAMERA_POSITION_OBJECT_SPACE:
|
|
|
- case ACT_LOD_CAMERA_POSITION_OBJECT_SPACE:
|
|
|
- case ACT_CUSTOM:
|
|
|
- case ACT_ANIMATION_PARAMETRIC:
|
|
|
-
|
|
|
- return (UINT16)GPV_PER_OBJECT;
|
|
|
-
|
|
|
- case ACT_LIGHT_POSITION_OBJECT_SPACE:
|
|
|
- case ACT_LIGHT_DIRECTION_OBJECT_SPACE:
|
|
|
- case ACT_LIGHT_DISTANCE_OBJECT_SPACE:
|
|
|
- case ACT_LIGHT_POSITION_OBJECT_SPACE_ARRAY:
|
|
|
- case ACT_LIGHT_DIRECTION_OBJECT_SPACE_ARRAY:
|
|
|
- case ACT_LIGHT_DISTANCE_OBJECT_SPACE_ARRAY:
|
|
|
- case ACT_TEXTURE_WORLDVIEWPROJ_MATRIX:
|
|
|
- case ACT_TEXTURE_WORLDVIEWPROJ_MATRIX_ARRAY:
|
|
|
- case ACT_SPOTLIGHT_WORLDVIEWPROJ_MATRIX:
|
|
|
-
|
|
|
- // These depend on BOTH lights and objects
|
|
|
- return ((UINT16)GPV_PER_OBJECT) | ((UINT16)GPV_LIGHTS);
|
|
|
-
|
|
|
- case ACT_LIGHT_COUNT:
|
|
|
- case ACT_LIGHT_DIFFUSE_COLOUR:
|
|
|
- case ACT_LIGHT_SPECULAR_COLOUR:
|
|
|
- case ACT_LIGHT_POSITION:
|
|
|
- case ACT_LIGHT_DIRECTION:
|
|
|
- case ACT_LIGHT_POSITION_VIEW_SPACE:
|
|
|
- case ACT_LIGHT_DIRECTION_VIEW_SPACE:
|
|
|
- case ACT_SHADOW_EXTRUSION_DISTANCE:
|
|
|
- case ACT_SHADOW_SCENE_DEPTH_RANGE:
|
|
|
- case ACT_SHADOW_COLOUR:
|
|
|
- case ACT_LIGHT_POWER_SCALE:
|
|
|
- case ACT_LIGHT_DIFFUSE_COLOUR_POWER_SCALED:
|
|
|
- case ACT_LIGHT_SPECULAR_COLOUR_POWER_SCALED:
|
|
|
- case ACT_LIGHT_NUMBER:
|
|
|
- case ACT_LIGHT_CASTS_SHADOWS:
|
|
|
- case ACT_LIGHT_ATTENUATION:
|
|
|
- case ACT_SPOTLIGHT_PARAMS:
|
|
|
- case ACT_LIGHT_DIFFUSE_COLOUR_ARRAY:
|
|
|
- case ACT_LIGHT_SPECULAR_COLOUR_ARRAY:
|
|
|
- case ACT_LIGHT_DIFFUSE_COLOUR_POWER_SCALED_ARRAY:
|
|
|
- case ACT_LIGHT_SPECULAR_COLOUR_POWER_SCALED_ARRAY:
|
|
|
- case ACT_LIGHT_POSITION_ARRAY:
|
|
|
- case ACT_LIGHT_DIRECTION_ARRAY:
|
|
|
- case ACT_LIGHT_POSITION_VIEW_SPACE_ARRAY:
|
|
|
- case ACT_LIGHT_DIRECTION_VIEW_SPACE_ARRAY:
|
|
|
- case ACT_LIGHT_POWER_SCALE_ARRAY:
|
|
|
- case ACT_LIGHT_ATTENUATION_ARRAY:
|
|
|
- case ACT_SPOTLIGHT_PARAMS_ARRAY:
|
|
|
- case ACT_TEXTURE_VIEWPROJ_MATRIX:
|
|
|
- case ACT_TEXTURE_VIEWPROJ_MATRIX_ARRAY:
|
|
|
- case ACT_SPOTLIGHT_VIEWPROJ_MATRIX:
|
|
|
- case ACT_SPOTLIGHT_VIEWPROJ_MATRIX_ARRAY:
|
|
|
- case ACT_LIGHT_CUSTOM:
|
|
|
-
|
|
|
- return (UINT16)GPV_LIGHTS;
|
|
|
-
|
|
|
- case ACT_DERIVED_LIGHT_DIFFUSE_COLOUR:
|
|
|
- case ACT_DERIVED_LIGHT_SPECULAR_COLOUR:
|
|
|
- case ACT_DERIVED_LIGHT_DIFFUSE_COLOUR_ARRAY:
|
|
|
- case ACT_DERIVED_LIGHT_SPECULAR_COLOUR_ARRAY:
|
|
|
-
|
|
|
- return ((UINT16)GPV_GLOBAL | (UINT16)GPV_LIGHTS);
|
|
|
-
|
|
|
- case ACT_PASS_ITERATION_NUMBER:
|
|
|
-
|
|
|
- return (UINT16)GPV_PASS_ITERATION_NUMBER;
|
|
|
-
|
|
|
- default:
|
|
|
- return (UINT16)GPV_GLOBAL;
|
|
|
- };
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------
|
|
|
GpuLogicalIndexUse* GpuProgramParameters::_getFloatConstantLogicalIndexUse(
|
|
|
size_t logicalIndex, size_t requestedSize, UINT16 variability)
|
|
|
{
|
|
|
@@ -1088,15 +786,6 @@ namespace CamelotEngine
|
|
|
i->second.physicalIndex += insertCount;
|
|
|
}
|
|
|
mFloatLogicalToPhysical->bufferSize += insertCount;
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex > physicalIndex &&
|
|
|
- getAutoConstantDefinition(i->paramType)->elementType == ET_REAL)
|
|
|
- {
|
|
|
- i->physicalIndex += insertCount;
|
|
|
- }
|
|
|
- }
|
|
|
if (mNamedConstants != nullptr)
|
|
|
{
|
|
|
for (GpuConstantDefinitionMap::iterator i = mNamedConstants->map.begin();
|
|
|
@@ -1195,15 +884,6 @@ namespace CamelotEngine
|
|
|
i->second.physicalIndex += insertCount;
|
|
|
}
|
|
|
mIntLogicalToPhysical->bufferSize += insertCount;
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex > physicalIndex &&
|
|
|
- getAutoConstantDefinition(i->paramType)->elementType == ET_INT)
|
|
|
- {
|
|
|
- i->physicalIndex += insertCount;
|
|
|
- }
|
|
|
- }
|
|
|
if (mNamedConstants != nullptr)
|
|
|
{
|
|
|
for (GpuConstantDefinitionMap::iterator i = mNamedConstants->map.begin();
|
|
|
@@ -1337,162 +1017,6 @@ namespace CamelotEngine
|
|
|
}
|
|
|
}
|
|
|
//-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setAutoConstant(size_t index, AutoConstantType acType, size_t extraInfo)
|
|
|
- {
|
|
|
- // Get auto constant definition for sizing
|
|
|
- const AutoConstantDefinition* autoDef = getAutoConstantDefinition(acType);
|
|
|
- // round up to nearest multiple of 4
|
|
|
- size_t sz = autoDef->elementCount;
|
|
|
- if (sz % 4 > 0)
|
|
|
- {
|
|
|
- sz += 4 - (sz % 4);
|
|
|
- }
|
|
|
-
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(index, sz, deriveVariability(acType));
|
|
|
-
|
|
|
- _setRawAutoConstant(indexUse->physicalIndex, acType, extraInfo, indexUse->variability, sz);
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::_setRawAutoConstant(size_t physicalIndex,
|
|
|
- AutoConstantType acType, size_t extraInfo, UINT16 variability, size_t elementSize)
|
|
|
- {
|
|
|
- // update existing index if it exists
|
|
|
- bool found = false;
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex == physicalIndex)
|
|
|
- {
|
|
|
- i->paramType = acType;
|
|
|
- i->data = extraInfo;
|
|
|
- i->elementCount = elementSize;
|
|
|
- i->variability = variability;
|
|
|
- found = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!found)
|
|
|
- mAutoConstants.push_back(AutoConstantEntry(acType, physicalIndex, extraInfo, variability, elementSize));
|
|
|
-
|
|
|
- mCombinedVariability |= variability;
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setAutoConstant(size_t index, AutoConstantType acType, UINT16 extraInfo1, UINT16 extraInfo2)
|
|
|
- {
|
|
|
- size_t extraInfo = (size_t)extraInfo1 | ((size_t)extraInfo2) << 16;
|
|
|
-
|
|
|
- // Get auto constant definition for sizing
|
|
|
- const AutoConstantDefinition* autoDef = getAutoConstantDefinition(acType);
|
|
|
- // round up to nearest multiple of 4
|
|
|
- size_t sz = autoDef->elementCount;
|
|
|
- if (sz % 4 > 0)
|
|
|
- {
|
|
|
- sz += 4 - (sz % 4);
|
|
|
- }
|
|
|
-
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(index, sz, deriveVariability(acType));
|
|
|
-
|
|
|
- _setRawAutoConstant(indexUse->physicalIndex, acType, extraInfo, indexUse->variability, sz);
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::_setRawAutoConstantReal(size_t physicalIndex,
|
|
|
- AutoConstantType acType, float rData, UINT16 variability, size_t elementSize)
|
|
|
- {
|
|
|
- // update existing index if it exists
|
|
|
- bool found = false;
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex == physicalIndex)
|
|
|
- {
|
|
|
- i->paramType = acType;
|
|
|
- i->fData = rData;
|
|
|
- i->elementCount = elementSize;
|
|
|
- i->variability = variability;
|
|
|
- found = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!found)
|
|
|
- mAutoConstants.push_back(AutoConstantEntry(acType, physicalIndex, rData, variability, elementSize));
|
|
|
-
|
|
|
- mCombinedVariability |= variability;
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::clearAutoConstant(size_t index)
|
|
|
- {
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(index, 0, GPV_GLOBAL);
|
|
|
-
|
|
|
- if (indexUse)
|
|
|
- {
|
|
|
- indexUse->variability = GPV_GLOBAL;
|
|
|
- size_t physicalIndex = indexUse->physicalIndex;
|
|
|
- // update existing index if it exists
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex == physicalIndex)
|
|
|
- {
|
|
|
- mAutoConstants.erase(i);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::clearNamedAutoConstant(const String& name)
|
|
|
- {
|
|
|
- const GpuConstantDefinition* def = _findNamedConstantDefinition(name);
|
|
|
- if (def)
|
|
|
- {
|
|
|
- def->variability = GPV_GLOBAL;
|
|
|
-
|
|
|
- // Autos are always floating point
|
|
|
- if (def->isFloat())
|
|
|
- {
|
|
|
- for (AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- if (i->physicalIndex == def->physicalIndex)
|
|
|
- {
|
|
|
- mAutoConstants.erase(i);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::clearAutoConstants(void)
|
|
|
- {
|
|
|
- mAutoConstants.clear();
|
|
|
- mCombinedVariability = GPV_GLOBAL;
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- GpuProgramParameters::AutoConstantIterator GpuProgramParameters::getAutoConstantIterator(void) const
|
|
|
- {
|
|
|
- return mAutoConstants.begin();
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setAutoConstantReal(size_t index, AutoConstantType acType, float rData)
|
|
|
- {
|
|
|
- // Get auto constant definition for sizing
|
|
|
- const AutoConstantDefinition* autoDef = getAutoConstantDefinition(acType);
|
|
|
- // round up to nearest multiple of 4
|
|
|
- size_t sz = autoDef->elementCount;
|
|
|
- if (sz % 4 > 0)
|
|
|
- {
|
|
|
- sz += 4 - (sz % 4);
|
|
|
- }
|
|
|
-
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(index, sz, deriveVariability(acType));
|
|
|
-
|
|
|
- _setRawAutoConstantReal(indexUse->physicalIndex, acType, rData, indexUse->variability, sz);
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------------
|
|
|
void GpuProgramParameters::setNamedConstant(const String& name, float val)
|
|
|
{
|
|
|
// look up, and throw an exception if we're not ignoring missing
|
|
|
@@ -1590,165 +1114,11 @@ namespace CamelotEngine
|
|
|
_writeRawConstants(def->physicalIndex, val, rawCount);
|
|
|
}
|
|
|
//---------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setNamedAutoConstant(const String& name,
|
|
|
- AutoConstantType acType, size_t extraInfo)
|
|
|
- {
|
|
|
- // look up, and throw an exception if we're not ignoring missing
|
|
|
- const GpuConstantDefinition* def =
|
|
|
- _findNamedConstantDefinition(name, !mIgnoreMissingParams);
|
|
|
- if (def)
|
|
|
- {
|
|
|
- def->variability = deriveVariability(acType);
|
|
|
- // make sure we also set variability on the logical index map
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(def->logicalIndex, def->elementSize * def->arraySize, def->variability);
|
|
|
- if (indexUse)
|
|
|
- indexUse->variability = def->variability;
|
|
|
-
|
|
|
- _setRawAutoConstant(def->physicalIndex, acType, extraInfo, def->variability, def->elementSize);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setNamedAutoConstantReal(const String& name,
|
|
|
- AutoConstantType acType, float rData)
|
|
|
- {
|
|
|
- // look up, and throw an exception if we're not ignoring missing
|
|
|
- const GpuConstantDefinition* def =
|
|
|
- _findNamedConstantDefinition(name, !mIgnoreMissingParams);
|
|
|
- if (def)
|
|
|
- {
|
|
|
- def->variability = deriveVariability(acType);
|
|
|
- // make sure we also set variability on the logical index map
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(def->logicalIndex, def->elementSize * def->arraySize, def->variability);
|
|
|
- if (indexUse)
|
|
|
- indexUse->variability = def->variability;
|
|
|
- _setRawAutoConstantReal(def->physicalIndex, acType, rData, def->variability, def->elementSize);
|
|
|
- }
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setNamedAutoConstant(const String& name,
|
|
|
- AutoConstantType acType, UINT16 extraInfo1, UINT16 extraInfo2)
|
|
|
- {
|
|
|
- size_t extraInfo = (size_t)extraInfo1 | ((size_t)extraInfo2) << 16;
|
|
|
-
|
|
|
- // look up, and throw an exception if we're not ignoring missing
|
|
|
- const GpuConstantDefinition* def =
|
|
|
- _findNamedConstantDefinition(name, !mIgnoreMissingParams);
|
|
|
- if (def)
|
|
|
- {
|
|
|
- def->variability = deriveVariability(acType);
|
|
|
- // make sure we also set variability on the logical index map
|
|
|
- GpuLogicalIndexUse* indexUse = _getFloatConstantLogicalIndexUse(def->logicalIndex, def->elementSize * def->arraySize, def->variability);
|
|
|
- if (indexUse)
|
|
|
- indexUse->variability = def->variability;
|
|
|
-
|
|
|
- _setRawAutoConstant(def->physicalIndex, acType, extraInfo, def->variability, def->elementSize);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setConstantFromTime(size_t index, float factor)
|
|
|
- {
|
|
|
- setAutoConstantReal(index, ACT_TIME, factor);
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- void GpuProgramParameters::setNamedConstantFromTime(const String& name, float factor)
|
|
|
- {
|
|
|
- setNamedAutoConstantReal(name, ACT_TIME, factor);
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- GpuProgramParameters::AutoConstantEntry* GpuProgramParameters::getAutoConstantEntry(const size_t index)
|
|
|
- {
|
|
|
- if (index < mAutoConstants.size())
|
|
|
- {
|
|
|
- return &(mAutoConstants[index]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantEntry*
|
|
|
- GpuProgramParameters::findFloatAutoConstantEntry(size_t logicalIndex)
|
|
|
- {
|
|
|
- if (mFloatLogicalToPhysical == nullptr)
|
|
|
- {
|
|
|
- CM_EXCEPT(InvalidParametersException,
|
|
|
- "This is not a low-level parameter parameter object");
|
|
|
- }
|
|
|
-
|
|
|
- return _findRawAutoConstantEntryFloat(
|
|
|
- _getFloatConstantPhysicalIndex(logicalIndex, 0, GPV_GLOBAL));
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantEntry*
|
|
|
- GpuProgramParameters::findIntAutoConstantEntry(size_t logicalIndex)
|
|
|
- {
|
|
|
- if (mIntLogicalToPhysical == nullptr)
|
|
|
- {
|
|
|
- CM_EXCEPT(InvalidParametersException,
|
|
|
- "This is not a low-level parameter parameter object");
|
|
|
- }
|
|
|
-
|
|
|
- return _findRawAutoConstantEntryInt(
|
|
|
- _getIntConstantPhysicalIndex(logicalIndex, 0, GPV_GLOBAL));
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantEntry*
|
|
|
- GpuProgramParameters::findAutoConstantEntry(const String& paramName)
|
|
|
- {
|
|
|
- if (mNamedConstants == nullptr)
|
|
|
- {
|
|
|
- CM_EXCEPT(InvalidParametersException,
|
|
|
- "This params object is not based on a program with named parameters.");
|
|
|
- }
|
|
|
-
|
|
|
- const GpuConstantDefinition& def = getConstantDefinition(paramName);
|
|
|
- if (def.isFloat())
|
|
|
- {
|
|
|
- return _findRawAutoConstantEntryFloat(def.physicalIndex);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return _findRawAutoConstantEntryInt(def.physicalIndex);
|
|
|
- }
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantEntry*
|
|
|
- GpuProgramParameters::_findRawAutoConstantEntryFloat(size_t physicalIndex)
|
|
|
- {
|
|
|
- for(AutoConstantList::iterator i = mAutoConstants.begin();
|
|
|
- i != mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- AutoConstantEntry& ac = *i;
|
|
|
- // should check that auto is float and not int so that physicalIndex
|
|
|
- // doesn't have any ambiguity
|
|
|
- // However, all autos are float I think so no need
|
|
|
- if (ac.physicalIndex == physicalIndex)
|
|
|
- return ∾
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantEntry*
|
|
|
- GpuProgramParameters::_findRawAutoConstantEntryInt(size_t physicalIndex)
|
|
|
- {
|
|
|
- // No autos are float?
|
|
|
- return 0;
|
|
|
- }
|
|
|
- //---------------------------------------------------------------------------
|
|
|
void GpuProgramParameters::copyConstantsFrom(const GpuProgramParameters& source)
|
|
|
{
|
|
|
// Pull buffers & auto constant list over directly
|
|
|
mFloatConstants = source.getFloatConstantList();
|
|
|
mIntConstants = source.getIntConstantList();
|
|
|
- mAutoConstants = source.getAutoConstantList();
|
|
|
mCombinedVariability = source.mCombinedVariability;
|
|
|
copySharedParamSetUsage(source.mSharedParamSets);
|
|
|
}
|
|
|
@@ -1790,26 +1160,6 @@ namespace CamelotEngine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for (AutoConstantList::const_iterator i = source.mAutoConstants.begin();
|
|
|
- i != source.mAutoConstants.end(); ++i)
|
|
|
- {
|
|
|
- const GpuProgramParameters::AutoConstantEntry& autoEntry = *i;
|
|
|
- // find dest physical index
|
|
|
- std::map<size_t, String>::iterator mi = srcToDestNamedMap.find(autoEntry.physicalIndex);
|
|
|
- if (mi != srcToDestNamedMap.end())
|
|
|
- {
|
|
|
- if (autoEntry.fData)
|
|
|
- {
|
|
|
- setNamedAutoConstantReal(mi->second, autoEntry.paramType, autoEntry.fData);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- setNamedAutoConstant(mi->second, autoEntry.paramType, autoEntry.data);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
// Copy shared param sets
|
|
|
for (GpuSharedParamUsageList::const_iterator i = source.mSharedParamSets.begin();
|
|
|
i != source.mSharedParamSets.end(); ++i)
|
|
|
@@ -1822,50 +1172,6 @@ namespace CamelotEngine
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //-----------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantDefinition*
|
|
|
- GpuProgramParameters::getAutoConstantDefinition(const String& name)
|
|
|
- {
|
|
|
- // find a constant definition that matches name by iterating through the
|
|
|
- // constant definition array
|
|
|
- bool nameFound = false;
|
|
|
- size_t i = 0;
|
|
|
- const size_t numDefs = getNumAutoConstantDefinitions();
|
|
|
- while (!nameFound && (i < numDefs))
|
|
|
- {
|
|
|
- if (name == AutoConstantDictionary[i].name)
|
|
|
- nameFound = true;
|
|
|
- else
|
|
|
- ++i;
|
|
|
- }
|
|
|
-
|
|
|
- if (nameFound)
|
|
|
- return &AutoConstantDictionary[i];
|
|
|
- else
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- //-----------------------------------------------------------------------
|
|
|
- const GpuProgramParameters::AutoConstantDefinition*
|
|
|
- GpuProgramParameters::getAutoConstantDefinition(const size_t idx)
|
|
|
- {
|
|
|
-
|
|
|
- if (idx < getNumAutoConstantDefinitions())
|
|
|
- {
|
|
|
- // verify index is equal to acType
|
|
|
- // if they are not equal then the dictionary was not setup properly
|
|
|
- assert(idx == static_cast<size_t>(AutoConstantDictionary[idx].acType));
|
|
|
- return &AutoConstantDictionary[idx];
|
|
|
- }
|
|
|
- else
|
|
|
- return 0;
|
|
|
- }
|
|
|
- //-----------------------------------------------------------------------
|
|
|
- size_t GpuProgramParameters::getNumAutoConstantDefinitions(void)
|
|
|
- {
|
|
|
- return sizeof(AutoConstantDictionary)/sizeof(AutoConstantDefinition);
|
|
|
- }
|
|
|
-
|
|
|
//-----------------------------------------------------------------------
|
|
|
void GpuProgramParameters::incPassIterationNumber(void)
|
|
|
{
|