You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Refactored RID/RID_Owner to always use O(1) allocation.
* Implements a growing chunked allocator * Removed redudant methods get and getptr, only getornull is supported now.
This commit is contained in:
@@ -46,7 +46,7 @@ RID VisualServerScene::camera_create() {
|
||||
|
||||
void VisualServerScene::camera_set_perspective(RID p_camera, float p_fovy_degrees, float p_z_near, float p_z_far) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->type = Camera::PERSPECTIVE;
|
||||
camera->fov = p_fovy_degrees;
|
||||
@@ -56,7 +56,7 @@ void VisualServerScene::camera_set_perspective(RID p_camera, float p_fovy_degree
|
||||
|
||||
void VisualServerScene::camera_set_orthogonal(RID p_camera, float p_size, float p_z_near, float p_z_far) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->type = Camera::ORTHOGONAL;
|
||||
camera->size = p_size;
|
||||
@@ -65,7 +65,7 @@ void VisualServerScene::camera_set_orthogonal(RID p_camera, float p_size, float
|
||||
}
|
||||
|
||||
void VisualServerScene::camera_set_frustum(RID p_camera, float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->type = Camera::FRUSTUM;
|
||||
camera->size = p_size;
|
||||
@@ -76,14 +76,14 @@ void VisualServerScene::camera_set_frustum(RID p_camera, float p_size, Vector2 p
|
||||
|
||||
void VisualServerScene::camera_set_transform(RID p_camera, const Transform &p_transform) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->transform = p_transform.orthonormalized();
|
||||
}
|
||||
|
||||
void VisualServerScene::camera_set_cull_mask(RID p_camera, uint32_t p_layers) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
|
||||
camera->visible_layers = p_layers;
|
||||
@@ -91,14 +91,14 @@ void VisualServerScene::camera_set_cull_mask(RID p_camera, uint32_t p_layers) {
|
||||
|
||||
void VisualServerScene::camera_set_environment(RID p_camera, RID p_env) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->env = p_env;
|
||||
}
|
||||
|
||||
void VisualServerScene::camera_set_use_vertical_aspect(RID p_camera, bool p_enable) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
Camera *camera = camera_owner.getornull(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->vaspect = p_enable;
|
||||
}
|
||||
@@ -275,28 +275,28 @@ RID VisualServerScene::scenario_create() {
|
||||
|
||||
void VisualServerScene::scenario_set_debug(RID p_scenario, VS::ScenarioDebugMode p_debug_mode) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND(!scenario);
|
||||
scenario->debug = p_debug_mode;
|
||||
}
|
||||
|
||||
void VisualServerScene::scenario_set_environment(RID p_scenario, RID p_environment) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND(!scenario);
|
||||
scenario->environment = p_environment;
|
||||
}
|
||||
|
||||
void VisualServerScene::scenario_set_fallback_environment(RID p_scenario, RID p_environment) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND(!scenario);
|
||||
scenario->fallback_environment = p_environment;
|
||||
}
|
||||
|
||||
void VisualServerScene::scenario_set_reflection_atlas_size(RID p_scenario, int p_size, int p_subdiv) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND(!scenario);
|
||||
VSG::scene_render->reflection_atlas_set_size(scenario->reflection_atlas, p_size);
|
||||
VSG::scene_render->reflection_atlas_set_subdivision(scenario->reflection_atlas, p_subdiv);
|
||||
@@ -330,7 +330,7 @@ RID VisualServerScene::instance_create() {
|
||||
|
||||
void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
Scenario *scenario = instance->scenario;
|
||||
@@ -503,7 +503,7 @@ void VisualServerScene::instance_set_base(RID p_instance, RID p_base) {
|
||||
}
|
||||
void VisualServerScene::instance_set_scenario(RID p_instance, RID p_scenario) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->scenario) {
|
||||
@@ -547,7 +547,7 @@ void VisualServerScene::instance_set_scenario(RID p_instance, RID p_scenario) {
|
||||
|
||||
if (p_scenario.is_valid()) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND(!scenario);
|
||||
|
||||
instance->scenario = scenario;
|
||||
@@ -580,14 +580,14 @@ void VisualServerScene::instance_set_scenario(RID p_instance, RID p_scenario) {
|
||||
}
|
||||
void VisualServerScene::instance_set_layer_mask(RID p_instance, uint32_t p_mask) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
instance->layer_mask = p_mask;
|
||||
}
|
||||
void VisualServerScene::instance_set_transform(RID p_instance, const Transform &p_transform) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->transform == p_transform)
|
||||
@@ -611,14 +611,14 @@ void VisualServerScene::instance_set_transform(RID p_instance, const Transform &
|
||||
}
|
||||
void VisualServerScene::instance_attach_object_instance_id(RID p_instance, ObjectID p_id) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
instance->object_id = p_id;
|
||||
}
|
||||
void VisualServerScene::instance_set_blend_shape_weight(RID p_instance, int p_shape, float p_weight) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->update_item.in_list()) {
|
||||
@@ -631,7 +631,7 @@ void VisualServerScene::instance_set_blend_shape_weight(RID p_instance, int p_sh
|
||||
|
||||
void VisualServerScene::instance_set_surface_material(RID p_instance, int p_surface, RID p_material) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->base_type == VS::INSTANCE_MESH) {
|
||||
@@ -654,7 +654,7 @@ void VisualServerScene::instance_set_surface_material(RID p_instance, int p_surf
|
||||
|
||||
void VisualServerScene::instance_set_visible(RID p_instance, bool p_visible) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->visible == p_visible)
|
||||
@@ -697,7 +697,7 @@ inline bool is_geometry_instance(VisualServer::InstanceType p_type) {
|
||||
|
||||
void VisualServerScene::instance_set_use_lightmap(RID p_instance, RID p_lightmap_instance, RID p_lightmap) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->lightmap_capture) {
|
||||
@@ -708,7 +708,7 @@ void VisualServerScene::instance_set_use_lightmap(RID p_instance, RID p_lightmap
|
||||
}
|
||||
|
||||
if (p_lightmap_instance.is_valid()) {
|
||||
Instance *lightmap_instance = instance_owner.get(p_lightmap_instance);
|
||||
Instance *lightmap_instance = instance_owner.getornull(p_lightmap_instance);
|
||||
ERR_FAIL_COND(!lightmap_instance);
|
||||
ERR_FAIL_COND(lightmap_instance->base_type != VS::INSTANCE_LIGHTMAP_CAPTURE);
|
||||
instance->lightmap_capture = lightmap_instance;
|
||||
@@ -721,7 +721,7 @@ void VisualServerScene::instance_set_use_lightmap(RID p_instance, RID p_lightmap
|
||||
|
||||
void VisualServerScene::instance_set_custom_aabb(RID p_instance, AABB p_aabb) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
ERR_FAIL_COND(!is_geometry_instance(instance->base_type));
|
||||
|
||||
@@ -747,7 +747,7 @@ void VisualServerScene::instance_set_custom_aabb(RID p_instance, AABB p_aabb) {
|
||||
|
||||
void VisualServerScene::instance_attach_skeleton(RID p_instance, RID p_skeleton) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->skeleton == p_skeleton)
|
||||
@@ -770,7 +770,7 @@ void VisualServerScene::instance_set_exterior(RID p_instance, bool p_enabled) {
|
||||
}
|
||||
|
||||
void VisualServerScene::instance_set_extra_visibility_margin(RID p_instance, real_t p_margin) {
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
instance->extra_margin = p_margin;
|
||||
@@ -780,7 +780,7 @@ void VisualServerScene::instance_set_extra_visibility_margin(RID p_instance, rea
|
||||
Vector<ObjectID> VisualServerScene::instances_cull_aabb(const AABB &p_aabb, RID p_scenario) const {
|
||||
|
||||
Vector<ObjectID> instances;
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND_V(!scenario, instances);
|
||||
|
||||
const_cast<VisualServerScene *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||
@@ -804,7 +804,7 @@ Vector<ObjectID> VisualServerScene::instances_cull_aabb(const AABB &p_aabb, RID
|
||||
Vector<ObjectID> VisualServerScene::instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario) const {
|
||||
|
||||
Vector<ObjectID> instances;
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND_V(!scenario, instances);
|
||||
const_cast<VisualServerScene *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||
|
||||
@@ -826,7 +826,7 @@ Vector<ObjectID> VisualServerScene::instances_cull_ray(const Vector3 &p_from, co
|
||||
Vector<ObjectID> VisualServerScene::instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario) const {
|
||||
|
||||
Vector<ObjectID> instances;
|
||||
Scenario *scenario = scenario_owner.get(p_scenario);
|
||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||
ERR_FAIL_COND_V(!scenario, instances);
|
||||
const_cast<VisualServerScene *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||
|
||||
@@ -850,7 +850,7 @@ Vector<ObjectID> VisualServerScene::instances_cull_convex(const Vector<Plane> &p
|
||||
|
||||
void VisualServerScene::instance_geometry_set_flag(RID p_instance, VS::InstanceFlags p_flags, bool p_enabled) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
switch (p_flags) {
|
||||
@@ -871,7 +871,7 @@ void VisualServerScene::instance_geometry_set_flag(RID p_instance, VS::InstanceF
|
||||
}
|
||||
void VisualServerScene::instance_geometry_set_cast_shadows_setting(RID p_instance, VS::ShadowCastingSetting p_shadow_casting_setting) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
instance->cast_shadows = p_shadow_casting_setting;
|
||||
@@ -879,7 +879,7 @@ void VisualServerScene::instance_geometry_set_cast_shadows_setting(RID p_instanc
|
||||
}
|
||||
void VisualServerScene::instance_geometry_set_material_override(RID p_instance, RID p_material) {
|
||||
|
||||
Instance *instance = instance_owner.get(p_instance);
|
||||
Instance *instance = instance_owner.getornull(p_instance);
|
||||
ERR_FAIL_COND(!instance);
|
||||
|
||||
if (instance->material_override.is_valid()) {
|
||||
@@ -3468,14 +3468,14 @@ bool VisualServerScene::free(RID p_rid) {
|
||||
|
||||
if (camera_owner.owns(p_rid)) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_rid);
|
||||
Camera *camera = camera_owner.getornull(p_rid);
|
||||
|
||||
camera_owner.free(p_rid);
|
||||
memdelete(camera);
|
||||
|
||||
} else if (scenario_owner.owns(p_rid)) {
|
||||
|
||||
Scenario *scenario = scenario_owner.get(p_rid);
|
||||
Scenario *scenario = scenario_owner.getornull(p_rid);
|
||||
|
||||
while (scenario->instances.first()) {
|
||||
instance_set_scenario(scenario->instances.first()->self()->self, RID());
|
||||
@@ -3490,7 +3490,7 @@ bool VisualServerScene::free(RID p_rid) {
|
||||
|
||||
update_dirty_instances();
|
||||
|
||||
Instance *instance = instance_owner.get(p_rid);
|
||||
Instance *instance = instance_owner.getornull(p_rid);
|
||||
|
||||
instance_set_use_lightmap(p_rid, RID(), RID());
|
||||
instance_set_scenario(p_rid, RID());
|
||||
|
||||
Reference in New Issue
Block a user