feat: updated engine version to 4.4-rc1
This commit is contained in:
parent
ee00efde1f
commit
21ba8e33af
5459 changed files with 1128836 additions and 198305 deletions
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public:
|
|||
RID light_create() override { return RID(); }
|
||||
void light_set_texture(RID p_rid, RID p_texture) override {}
|
||||
void light_set_use_shadow(RID p_rid, bool p_enable) override {}
|
||||
void light_update_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders) override {}
|
||||
void light_update_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders, const Rect2 &p_light_rect) override {}
|
||||
void light_update_directional_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_cull_distance, const Rect2 &p_clip_rect, LightOccluderInstance *p_occluders) override {}
|
||||
|
||||
void render_sdf(RID p_render_target, LightOccluderInstance *p_occluders) override {}
|
||||
|
|
@ -56,6 +56,7 @@ public:
|
|||
void update() override {}
|
||||
|
||||
virtual void set_debug_redraw(bool p_enabled, double p_time, const Color &p_color) override {}
|
||||
virtual uint32_t get_pipeline_compilations(RS::PipelineSource p_source) override { return 0; }
|
||||
|
||||
RasterizerCanvasDummy() {}
|
||||
~RasterizerCanvasDummy() {}
|
||||
|
|
|
|||
|
|
@ -66,14 +66,14 @@ protected:
|
|||
RasterizerSceneDummy scene;
|
||||
|
||||
public:
|
||||
RendererUtilities *get_utilities() override { return &utilities; };
|
||||
RendererLightStorage *get_light_storage() override { return &light_storage; };
|
||||
RendererMaterialStorage *get_material_storage() override { return &material_storage; };
|
||||
RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; };
|
||||
RendererParticlesStorage *get_particles_storage() override { return &particles_storage; };
|
||||
RendererTextureStorage *get_texture_storage() override { return &texture_storage; };
|
||||
RendererGI *get_gi() override { return &gi; };
|
||||
RendererFog *get_fog() override { return &fog; };
|
||||
RendererUtilities *get_utilities() override { return &utilities; }
|
||||
RendererLightStorage *get_light_storage() override { return &light_storage; }
|
||||
RendererMaterialStorage *get_material_storage() override { return &material_storage; }
|
||||
RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; }
|
||||
RendererParticlesStorage *get_particles_storage() override { return &particles_storage; }
|
||||
RendererTextureStorage *get_texture_storage() override { return &texture_storage; }
|
||||
RendererGI *get_gi() override { return &gi; }
|
||||
RendererFog *get_fog() override { return &fog; }
|
||||
RendererCanvasRender *get_canvas() override { return &canvas; }
|
||||
RendererSceneRender *get_scene() override { return &scene; }
|
||||
|
||||
|
|
@ -90,8 +90,8 @@ public:
|
|||
|
||||
void gl_end_frame(bool p_swap_buffers) override {}
|
||||
|
||||
void end_frame(bool p_swap_buffers) override {
|
||||
if (p_swap_buffers) {
|
||||
void end_frame(bool p_present) override {
|
||||
if (p_present) {
|
||||
DisplayServer::get_singleton()->swap_buffers();
|
||||
}
|
||||
}
|
||||
|
|
@ -110,6 +110,7 @@ public:
|
|||
uint64_t get_frame_number() const override { return frame; }
|
||||
double get_frame_delta_time() const override { return delta; }
|
||||
double get_total_time() const override { return time; }
|
||||
bool can_create_resources_async() const override { return false; }
|
||||
|
||||
RasterizerDummy() {}
|
||||
~RasterizerDummy() {}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
|
||||
#include "core/templates/paged_allocator.h"
|
||||
#include "servers/rendering/renderer_scene_render.h"
|
||||
#include "servers/rendering/rendering_server_globals.h"
|
||||
#include "storage/utilities.h"
|
||||
|
||||
class RasterizerSceneDummy : public RendererSceneRender {
|
||||
|
|
@ -94,6 +95,11 @@ public:
|
|||
|
||||
uint32_t geometry_instance_get_pair_mask() override { return 0; }
|
||||
|
||||
/* PIPELINES */
|
||||
|
||||
virtual void mesh_generate_pipelines(RID p_mesh, bool p_background_compilation) override {}
|
||||
virtual uint32_t get_pipeline_compilations(RS::PipelineSource p_source) override { return 0; }
|
||||
|
||||
/* SDFGI UPDATE */
|
||||
|
||||
void sdfgi_update(const Ref<RenderSceneBuffers> &p_render_buffers, RID p_environment, const Vector3 &p_world_position) override {}
|
||||
|
|
@ -186,6 +192,7 @@ public:
|
|||
|
||||
virtual void decals_set_filter(RS::DecalFilter p_filter) override {}
|
||||
virtual void light_projectors_set_filter(RS::LightProjectorFilter p_filter) override {}
|
||||
virtual void lightmaps_set_bicubic_filter(bool p_enable) override {}
|
||||
|
||||
RasterizerSceneDummy() {}
|
||||
~RasterizerSceneDummy() {}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
from misc.utility.scons_hints import *
|
||||
|
||||
Import("env")
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ public:
|
|||
virtual void light_set_cull_mask(RID p_light, uint32_t p_mask) override {}
|
||||
virtual void light_set_distance_fade(RID p_light, bool p_enabled, float p_begin, float p_shadow, float p_length) override {}
|
||||
virtual void light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) override {}
|
||||
virtual void light_set_shadow_caster_mask(RID p_light, uint32_t p_caster_mask) override {}
|
||||
virtual uint32_t light_get_shadow_caster_mask(RID p_light) const override { return 0xFFFFFFFF; }
|
||||
virtual void light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mode) override {}
|
||||
virtual void light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) override {}
|
||||
|
||||
|
|
@ -122,6 +124,7 @@ public:
|
|||
|
||||
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override {}
|
||||
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override {}
|
||||
virtual void reflection_probe_set_blend_distance(RID p_probe, float p_blend_distance) override {}
|
||||
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) override {}
|
||||
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) override {}
|
||||
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) override {}
|
||||
|
|
@ -189,6 +192,10 @@ public:
|
|||
virtual void lightmap_set_probe_capture_update_speed(float p_speed) override {}
|
||||
virtual float lightmap_get_probe_capture_update_speed() const override { return 0; }
|
||||
|
||||
virtual void lightmap_set_shadowmask_textures(RID p_lightmap, RID p_shadow) override {}
|
||||
virtual RS::ShadowmaskMode lightmap_get_shadowmask_mode(RID p_lightmap) override { return RS::SHADOWMASK_MODE_NONE; }
|
||||
virtual void lightmap_set_shadowmask_mode(RID p_lightmap, RS::ShadowmaskMode p_mode) override {}
|
||||
|
||||
/* LIGHTMAP INSTANCE */
|
||||
|
||||
bool owns_lightmap_instance(RID p_rid) { return lightmap_instance_owner.owns(p_rid); }
|
||||
|
|
@ -202,12 +209,12 @@ public:
|
|||
virtual void shadow_atlas_free(RID p_atlas) override {}
|
||||
virtual void shadow_atlas_set_size(RID p_atlas, int p_size, bool p_16_bits = true) override {}
|
||||
virtual void shadow_atlas_set_quadrant_subdivision(RID p_atlas, int p_quadrant, int p_subdivision) override {}
|
||||
virtual bool shadow_atlas_update_light(RID p_atlas, RID p_light_intance, float p_coverage, uint64_t p_light_version) override { return false; }
|
||||
virtual bool shadow_atlas_update_light(RID p_atlas, RID p_light_instance, float p_coverage, uint64_t p_light_version) override { return false; }
|
||||
|
||||
virtual void shadow_atlas_update(RID p_atlas) override {}
|
||||
|
||||
virtual void directional_shadow_atlas_set_size(int p_size, bool p_16_bits = true) override {}
|
||||
virtual int get_directional_light_shadow_size(RID p_light_intance) override { return 0; }
|
||||
virtual int get_directional_light_shadow_size(RID p_light_instance) override { return 0; }
|
||||
virtual void set_directional_shadow_count(int p_count) override {}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@
|
|||
|
||||
#include "material_storage.h"
|
||||
|
||||
#include "core/config/project_settings.h"
|
||||
|
||||
using namespace RendererDummy;
|
||||
|
||||
MaterialStorage *MaterialStorage::singleton = nullptr;
|
||||
|
|
@ -42,6 +44,103 @@ MaterialStorage::MaterialStorage() {
|
|||
|
||||
MaterialStorage::~MaterialStorage() {
|
||||
singleton = nullptr;
|
||||
global_shader_variables.clear();
|
||||
}
|
||||
|
||||
void MaterialStorage::global_shader_parameter_add(const StringName &p_name, RS::GlobalShaderParameterType p_type, const Variant &p_value) {
|
||||
ERR_FAIL_COND(global_shader_variables.has(p_name));
|
||||
|
||||
global_shader_variables[p_name] = p_type;
|
||||
}
|
||||
|
||||
void MaterialStorage::global_shader_parameter_remove(const StringName &p_name) {
|
||||
if (!global_shader_variables.has(p_name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
global_shader_variables.erase(p_name);
|
||||
}
|
||||
|
||||
Vector<StringName> MaterialStorage::global_shader_parameter_get_list() const {
|
||||
Vector<StringName> names;
|
||||
for (const KeyValue<StringName, RS::GlobalShaderParameterType> &E : global_shader_variables) {
|
||||
names.push_back(E.key);
|
||||
}
|
||||
names.sort_custom<StringName::AlphCompare>();
|
||||
return names;
|
||||
}
|
||||
|
||||
RS::GlobalShaderParameterType MaterialStorage::global_shader_parameter_get_type(const StringName &p_name) const {
|
||||
if (!global_shader_variables.has(p_name)) {
|
||||
print_line("don't have name, sorry");
|
||||
return RS::GLOBAL_VAR_TYPE_MAX;
|
||||
}
|
||||
|
||||
return global_shader_variables[p_name];
|
||||
}
|
||||
|
||||
void MaterialStorage::global_shader_parameters_load_settings(bool p_load_textures) {
|
||||
List<PropertyInfo> settings;
|
||||
ProjectSettings::get_singleton()->get_property_list(&settings);
|
||||
|
||||
for (const PropertyInfo &E : settings) {
|
||||
if (E.name.begins_with("shader_globals/")) {
|
||||
StringName name = E.name.get_slice("/", 1);
|
||||
Dictionary d = GLOBAL_GET(E.name);
|
||||
|
||||
ERR_CONTINUE(!d.has("type"));
|
||||
ERR_CONTINUE(!d.has("value"));
|
||||
|
||||
String type = d["type"];
|
||||
|
||||
static const char *global_var_type_names[RS::GLOBAL_VAR_TYPE_MAX] = {
|
||||
"bool",
|
||||
"bvec2",
|
||||
"bvec3",
|
||||
"bvec4",
|
||||
"int",
|
||||
"ivec2",
|
||||
"ivec3",
|
||||
"ivec4",
|
||||
"rect2i",
|
||||
"uint",
|
||||
"uvec2",
|
||||
"uvec3",
|
||||
"uvec4",
|
||||
"float",
|
||||
"vec2",
|
||||
"vec3",
|
||||
"vec4",
|
||||
"color",
|
||||
"rect2",
|
||||
"mat2",
|
||||
"mat3",
|
||||
"mat4",
|
||||
"transform_2d",
|
||||
"transform",
|
||||
"sampler2D",
|
||||
"sampler2DArray",
|
||||
"sampler3D",
|
||||
"samplerCube",
|
||||
"samplerExternalOES"
|
||||
};
|
||||
|
||||
RS::GlobalShaderParameterType gvtype = RS::GLOBAL_VAR_TYPE_MAX;
|
||||
|
||||
for (int i = 0; i < RS::GLOBAL_VAR_TYPE_MAX; i++) {
|
||||
if (global_var_type_names[i] == type) {
|
||||
gvtype = RS::GlobalShaderParameterType(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ERR_CONTINUE(gvtype == RS::GLOBAL_VAR_TYPE_MAX); //type invalid
|
||||
|
||||
if (!global_shader_variables.has(name)) {
|
||||
global_shader_parameter_add(name, gvtype, Variant());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RID MaterialStorage::shader_allocate() {
|
||||
|
|
@ -102,11 +201,7 @@ void MaterialStorage::get_shader_parameter_list(RID p_shader, List<PropertyInfo>
|
|||
if (E.value.scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_LOCAL) {
|
||||
continue;
|
||||
}
|
||||
if (E.value.texture_order >= 0) {
|
||||
filtered_uniforms.push_back(Pair<StringName, int>(E.key, E.value.texture_order + 100000));
|
||||
} else {
|
||||
filtered_uniforms.push_back(Pair<StringName, int>(E.key, E.value.order));
|
||||
}
|
||||
filtered_uniforms.push_back(Pair<StringName, int>(E.key, E.value.prop_order));
|
||||
}
|
||||
int uniform_count = filtered_uniforms.size();
|
||||
sorter.sort(filtered_uniforms.ptr(), uniform_count);
|
||||
|
|
@ -135,3 +230,56 @@ void MaterialStorage::get_shader_parameter_list(RID p_shader, List<PropertyInfo>
|
|||
p_param_list->push_back(pi);
|
||||
}
|
||||
}
|
||||
|
||||
RID MaterialStorage::material_allocate() {
|
||||
return material_owner.allocate_rid();
|
||||
}
|
||||
|
||||
void MaterialStorage::material_initialize(RID p_rid) {
|
||||
material_owner.initialize_rid(p_rid, DummyMaterial());
|
||||
}
|
||||
|
||||
void MaterialStorage::material_free(RID p_rid) {
|
||||
DummyMaterial *material = material_owner.get_or_null(p_rid);
|
||||
ERR_FAIL_NULL(material);
|
||||
|
||||
material_owner.free(p_rid);
|
||||
}
|
||||
|
||||
void MaterialStorage::material_set_shader(RID p_material, RID p_shader) {
|
||||
DummyMaterial *material = material_owner.get_or_null(p_material);
|
||||
ERR_FAIL_NULL(material);
|
||||
|
||||
material->shader = p_shader;
|
||||
}
|
||||
|
||||
void MaterialStorage::material_set_next_pass(RID p_material, RID p_next_material) {
|
||||
DummyMaterial *material = material_owner.get_or_null(p_material);
|
||||
ERR_FAIL_NULL(material);
|
||||
|
||||
material->next_pass = p_next_material;
|
||||
}
|
||||
|
||||
void MaterialStorage::material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) {
|
||||
DummyMaterial *material = material_owner.get_or_null(p_material);
|
||||
ERR_FAIL_NULL(material);
|
||||
DummyShader *shader = shader_owner.get_or_null(material->shader);
|
||||
|
||||
if (shader) {
|
||||
for (const KeyValue<StringName, ShaderLanguage::ShaderNode::Uniform> &E : shader->uniforms) {
|
||||
if (E.value.scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RendererMaterialStorage::InstanceShaderParam p;
|
||||
p.info = ShaderLanguage::uniform_to_property_info(E.value);
|
||||
p.info.name = E.key; //supply name
|
||||
p.index = E.value.instance_index;
|
||||
p.default_value = ShaderLanguage::constant_value_to_variant(E.value.default_value, E.value.type, E.value.array_size, E.value.hint);
|
||||
r_parameters->push_back(p);
|
||||
}
|
||||
}
|
||||
if (material->next_pass.is_valid()) {
|
||||
material_get_instance_shader_parameters(material->next_pass, r_parameters);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ class MaterialStorage : public RendererMaterialStorage {
|
|||
private:
|
||||
static MaterialStorage *singleton;
|
||||
|
||||
HashMap<StringName, RS::GlobalShaderParameterType> global_shader_variables;
|
||||
|
||||
struct DummyShader {
|
||||
HashMap<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
|
||||
};
|
||||
|
|
@ -50,6 +52,13 @@ private:
|
|||
|
||||
ShaderCompiler dummy_compiler;
|
||||
|
||||
struct DummyMaterial {
|
||||
RID shader;
|
||||
RID next_pass;
|
||||
};
|
||||
|
||||
mutable RID_Owner<DummyMaterial> material_owner;
|
||||
|
||||
public:
|
||||
static MaterialStorage *get_singleton() { return singleton; }
|
||||
|
||||
|
|
@ -58,16 +67,16 @@ public:
|
|||
|
||||
/* GLOBAL SHADER UNIFORM API */
|
||||
|
||||
virtual void global_shader_parameter_add(const StringName &p_name, RS::GlobalShaderParameterType p_type, const Variant &p_value) override {}
|
||||
virtual void global_shader_parameter_remove(const StringName &p_name) override {}
|
||||
virtual Vector<StringName> global_shader_parameter_get_list() const override { return Vector<StringName>(); }
|
||||
virtual void global_shader_parameter_add(const StringName &p_name, RS::GlobalShaderParameterType p_type, const Variant &p_value) override;
|
||||
virtual void global_shader_parameter_remove(const StringName &p_name) override;
|
||||
virtual Vector<StringName> global_shader_parameter_get_list() const override;
|
||||
|
||||
virtual void global_shader_parameter_set(const StringName &p_name, const Variant &p_value) override {}
|
||||
virtual void global_shader_parameter_set_override(const StringName &p_name, const Variant &p_value) override {}
|
||||
virtual Variant global_shader_parameter_get(const StringName &p_name) const override { return Variant(); }
|
||||
virtual RS::GlobalShaderParameterType global_shader_parameter_get_type(const StringName &p_name) const override { return RS::GLOBAL_VAR_TYPE_MAX; }
|
||||
virtual RS::GlobalShaderParameterType global_shader_parameter_get_type(const StringName &p_name) const override;
|
||||
|
||||
virtual void global_shader_parameters_load_settings(bool p_load_textures = true) override {}
|
||||
virtual void global_shader_parameters_load_settings(bool p_load_textures = true) override;
|
||||
virtual void global_shader_parameters_clear() override {}
|
||||
|
||||
virtual int32_t global_shader_parameters_instance_allocate(RID p_instance) override { return 0; }
|
||||
|
|
@ -92,24 +101,29 @@ public:
|
|||
virtual RID shader_get_default_texture_parameter(RID p_shader, const StringName &p_name, int p_index) const override { return RID(); }
|
||||
virtual Variant shader_get_parameter_default(RID p_material, const StringName &p_param) const override { return Variant(); }
|
||||
|
||||
virtual RS::ShaderNativeSourceCode shader_get_native_source_code(RID p_shader) const override { return RS::ShaderNativeSourceCode(); };
|
||||
virtual RS::ShaderNativeSourceCode shader_get_native_source_code(RID p_shader) const override { return RS::ShaderNativeSourceCode(); }
|
||||
|
||||
/* MATERIAL API */
|
||||
virtual RID material_allocate() override { return RID(); }
|
||||
virtual void material_initialize(RID p_rid) override {}
|
||||
virtual void material_free(RID p_rid) override{};
|
||||
|
||||
bool owns_material(RID p_rid) { return material_owner.owns(p_rid); }
|
||||
|
||||
virtual RID material_allocate() override;
|
||||
virtual void material_initialize(RID p_rid) override;
|
||||
virtual void material_free(RID p_rid) override;
|
||||
|
||||
virtual void material_set_render_priority(RID p_material, int priority) override {}
|
||||
virtual void material_set_shader(RID p_shader_material, RID p_shader) override {}
|
||||
virtual void material_set_shader(RID p_shader_material, RID p_shader) override;
|
||||
|
||||
virtual void material_set_param(RID p_material, const StringName &p_param, const Variant &p_value) override {}
|
||||
virtual Variant material_get_param(RID p_material, const StringName &p_param) const override { return Variant(); }
|
||||
|
||||
virtual void material_set_next_pass(RID p_material, RID p_next_material) override {}
|
||||
virtual void material_set_next_pass(RID p_material, RID p_next_material) override;
|
||||
|
||||
virtual bool material_is_animated(RID p_material) override { return false; }
|
||||
virtual bool material_casts_shadows(RID p_material) override { return false; }
|
||||
virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override {}
|
||||
virtual RS::CullMode material_get_cull_mode(RID p_material) const override { return RS::CULL_MODE_DISABLED; }
|
||||
|
||||
virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override;
|
||||
virtual void material_update_dependency(RID p_material, DependencyTracker *p_instance) override {}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,10 +53,17 @@ void MeshStorage::mesh_initialize(RID p_rid) {
|
|||
void MeshStorage::mesh_free(RID p_rid) {
|
||||
DummyMesh *mesh = mesh_owner.get_or_null(p_rid);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
|
||||
mesh->dependency.deleted_notify(p_rid);
|
||||
mesh_owner.free(p_rid);
|
||||
}
|
||||
|
||||
void MeshStorage::mesh_surface_remove(RID p_mesh, int p_surface) {
|
||||
DummyMesh *m = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(m);
|
||||
m->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH);
|
||||
m->surfaces.remove_at(p_surface);
|
||||
}
|
||||
|
||||
void MeshStorage::mesh_clear(RID p_mesh) {
|
||||
DummyMesh *m = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(m);
|
||||
|
|
@ -64,22 +71,22 @@ void MeshStorage::mesh_clear(RID p_mesh) {
|
|||
m->surfaces.clear();
|
||||
}
|
||||
|
||||
RID MeshStorage::multimesh_allocate() {
|
||||
RID MeshStorage::_multimesh_allocate() {
|
||||
return multimesh_owner.allocate_rid();
|
||||
}
|
||||
|
||||
void MeshStorage::multimesh_initialize(RID p_rid) {
|
||||
void MeshStorage::_multimesh_initialize(RID p_rid) {
|
||||
multimesh_owner.initialize_rid(p_rid, DummyMultiMesh());
|
||||
}
|
||||
|
||||
void MeshStorage::multimesh_free(RID p_rid) {
|
||||
void MeshStorage::_multimesh_free(RID p_rid) {
|
||||
DummyMultiMesh *multimesh = multimesh_owner.get_or_null(p_rid);
|
||||
ERR_FAIL_NULL(multimesh);
|
||||
|
||||
multimesh_owner.free(p_rid);
|
||||
}
|
||||
|
||||
void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) {
|
||||
void MeshStorage::_multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) {
|
||||
DummyMultiMesh *multimesh = multimesh_owner.get_or_null(p_multimesh);
|
||||
ERR_FAIL_NULL(multimesh);
|
||||
multimesh->buffer.resize(p_buffer.size());
|
||||
|
|
@ -87,7 +94,7 @@ void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_b
|
|||
memcpy(cache_data, p_buffer.ptr(), p_buffer.size() * sizeof(float));
|
||||
}
|
||||
|
||||
Vector<float> MeshStorage::multimesh_get_buffer(RID p_multimesh) const {
|
||||
Vector<float> MeshStorage::_multimesh_get_buffer(RID p_multimesh) const {
|
||||
DummyMultiMesh *multimesh = multimesh_owner.get_or_null(p_multimesh);
|
||||
ERR_FAIL_NULL_V(multimesh, Vector<float>());
|
||||
|
||||
|
|
|
|||
|
|
@ -31,23 +31,23 @@
|
|||
#ifndef MESH_STORAGE_DUMMY_H
|
||||
#define MESH_STORAGE_DUMMY_H
|
||||
|
||||
#include "core/templates/local_vector.h"
|
||||
#include "core/templates/rid_owner.h"
|
||||
#include "servers/rendering/storage/mesh_storage.h"
|
||||
|
||||
namespace RendererDummy {
|
||||
|
||||
struct DummyMesh {
|
||||
Vector<RS::SurfaceData> surfaces;
|
||||
int blend_shape_count;
|
||||
RS::BlendShapeMode blend_shape_mode;
|
||||
PackedFloat32Array blend_shape_values;
|
||||
Dependency dependency;
|
||||
};
|
||||
|
||||
class MeshStorage : public RendererMeshStorage {
|
||||
private:
|
||||
static MeshStorage *singleton;
|
||||
|
||||
struct DummyMesh {
|
||||
Vector<RS::SurfaceData> surfaces;
|
||||
int blend_shape_count;
|
||||
RS::BlendShapeMode blend_shape_mode;
|
||||
PackedFloat32Array blend_shape_values;
|
||||
};
|
||||
|
||||
mutable RID_Owner<DummyMesh> mesh_owner;
|
||||
|
||||
struct DummyMultiMesh {
|
||||
|
|
@ -63,8 +63,8 @@ public:
|
|||
~MeshStorage();
|
||||
|
||||
/* MESH API */
|
||||
|
||||
bool owns_mesh(RID p_rid) { return mesh_owner.owns(p_rid); };
|
||||
DummyMesh *get_mesh(RID p_rid) { return mesh_owner.get_or_null(p_rid); }
|
||||
bool owns_mesh(RID p_rid) { return mesh_owner.owns(p_rid); }
|
||||
|
||||
virtual RID mesh_allocate() override;
|
||||
virtual void mesh_initialize(RID p_rid) override;
|
||||
|
|
@ -93,6 +93,7 @@ public:
|
|||
s->blend_shape_data = p_surface.blend_shape_data;
|
||||
s->uv_scale = p_surface.uv_scale;
|
||||
s->material = p_surface.material;
|
||||
m->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH);
|
||||
}
|
||||
|
||||
virtual int mesh_get_blend_shape_count(RID p_mesh) const override { return 0; }
|
||||
|
|
@ -129,6 +130,8 @@ public:
|
|||
virtual String mesh_get_path(RID p_mesh) const override { return String(); }
|
||||
|
||||
virtual void mesh_set_shadow_mesh(RID p_mesh, RID p_shadow_mesh) override {}
|
||||
|
||||
virtual void mesh_surface_remove(RID p_mesh, int p_surface) override;
|
||||
virtual void mesh_clear(RID p_mesh) override;
|
||||
|
||||
/* MESH INSTANCE */
|
||||
|
|
@ -146,34 +149,38 @@ public:
|
|||
|
||||
bool owns_multimesh(RID p_rid) { return multimesh_owner.owns(p_rid); }
|
||||
|
||||
virtual RID multimesh_allocate() override;
|
||||
virtual void multimesh_initialize(RID p_rid) override;
|
||||
virtual void multimesh_free(RID p_rid) override;
|
||||
virtual RID _multimesh_allocate() override;
|
||||
virtual void _multimesh_initialize(RID p_rid) override;
|
||||
virtual void _multimesh_free(RID p_rid) override;
|
||||
|
||||
virtual void multimesh_allocate_data(RID p_multimesh, int p_instances, RS::MultimeshTransformFormat p_transform_format, bool p_use_colors = false, bool p_use_custom_data = false) override {}
|
||||
virtual int multimesh_get_instance_count(RID p_multimesh) const override { return 0; }
|
||||
virtual void _multimesh_allocate_data(RID p_multimesh, int p_instances, RS::MultimeshTransformFormat p_transform_format, bool p_use_colors = false, bool p_use_custom_data = false, bool p_use_indirect = false) override {}
|
||||
virtual int _multimesh_get_instance_count(RID p_multimesh) const override { return 0; }
|
||||
|
||||
virtual void multimesh_set_mesh(RID p_multimesh, RID p_mesh) override {}
|
||||
virtual void multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform3D &p_transform) override {}
|
||||
virtual void multimesh_instance_set_transform_2d(RID p_multimesh, int p_index, const Transform2D &p_transform) override {}
|
||||
virtual void multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color) override {}
|
||||
virtual void multimesh_instance_set_custom_data(RID p_multimesh, int p_index, const Color &p_color) override {}
|
||||
virtual void _multimesh_set_mesh(RID p_multimesh, RID p_mesh) override {}
|
||||
virtual void _multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform3D &p_transform) override {}
|
||||
virtual void _multimesh_instance_set_transform_2d(RID p_multimesh, int p_index, const Transform2D &p_transform) override {}
|
||||
virtual void _multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color) override {}
|
||||
virtual void _multimesh_instance_set_custom_data(RID p_multimesh, int p_index, const Color &p_color) override {}
|
||||
|
||||
virtual void multimesh_set_custom_aabb(RID p_multimesh, const AABB &p_aabb) override {}
|
||||
virtual AABB multimesh_get_custom_aabb(RID p_multimesh) const override { return AABB(); }
|
||||
virtual void _multimesh_set_custom_aabb(RID p_multimesh, const AABB &p_aabb) override {}
|
||||
virtual AABB _multimesh_get_custom_aabb(RID p_multimesh) const override { return AABB(); }
|
||||
|
||||
virtual RID multimesh_get_mesh(RID p_multimesh) const override { return RID(); }
|
||||
virtual AABB multimesh_get_aabb(RID p_multimesh) const override { return AABB(); }
|
||||
virtual RID _multimesh_get_mesh(RID p_multimesh) const override { return RID(); }
|
||||
virtual AABB _multimesh_get_aabb(RID p_multimesh) override { return AABB(); }
|
||||
|
||||
virtual Transform3D multimesh_instance_get_transform(RID p_multimesh, int p_index) const override { return Transform3D(); }
|
||||
virtual Transform2D multimesh_instance_get_transform_2d(RID p_multimesh, int p_index) const override { return Transform2D(); }
|
||||
virtual Color multimesh_instance_get_color(RID p_multimesh, int p_index) const override { return Color(); }
|
||||
virtual Color multimesh_instance_get_custom_data(RID p_multimesh, int p_index) const override { return Color(); }
|
||||
virtual void multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) override;
|
||||
virtual Vector<float> multimesh_get_buffer(RID p_multimesh) const override;
|
||||
virtual Transform3D _multimesh_instance_get_transform(RID p_multimesh, int p_index) const override { return Transform3D(); }
|
||||
virtual Transform2D _multimesh_instance_get_transform_2d(RID p_multimesh, int p_index) const override { return Transform2D(); }
|
||||
virtual Color _multimesh_instance_get_color(RID p_multimesh, int p_index) const override { return Color(); }
|
||||
virtual Color _multimesh_instance_get_custom_data(RID p_multimesh, int p_index) const override { return Color(); }
|
||||
virtual void _multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) override;
|
||||
virtual RID _multimesh_get_command_buffer_rd_rid(RID p_multimesh) const override { return RID(); }
|
||||
virtual RID _multimesh_get_buffer_rd_rid(RID p_multimesh) const override { return RID(); }
|
||||
virtual Vector<float> _multimesh_get_buffer(RID p_multimesh) const override;
|
||||
|
||||
virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible) override {}
|
||||
virtual int multimesh_get_visible_instances(RID p_multimesh) const override { return 0; }
|
||||
virtual void _multimesh_set_visible_instances(RID p_multimesh, int p_visible) override {}
|
||||
virtual int _multimesh_get_visible_instances(RID p_multimesh) const override { return 0; }
|
||||
|
||||
MultiMeshInterpolator *_multimesh_get_interpolator(RID p_multimesh) const override { return nullptr; }
|
||||
|
||||
/* SKELETON API */
|
||||
|
||||
|
|
|
|||
|
|
@ -51,8 +51,10 @@ public:
|
|||
virtual void particles_set_lifetime(RID p_particles, double p_lifetime) override {}
|
||||
virtual void particles_set_one_shot(RID p_particles, bool p_one_shot) override {}
|
||||
virtual void particles_set_pre_process_time(RID p_particles, double p_time) override {}
|
||||
virtual void particles_request_process_time(RID p_particles, real_t p_request_process_time) override {}
|
||||
virtual void particles_set_explosiveness_ratio(RID p_particles, real_t p_ratio) override {}
|
||||
virtual void particles_set_randomness_ratio(RID p_particles, real_t p_ratio) override {}
|
||||
virtual void particles_set_seed(RID p_particles, uint32_t p_seed) override {}
|
||||
virtual void particles_set_custom_aabb(RID p_particles, const AABB &p_aabb) override {}
|
||||
virtual void particles_set_speed_scale(RID p_particles, double p_scale) override {}
|
||||
virtual void particles_set_use_local_coordinates(RID p_particles, bool p_enable) override {}
|
||||
|
|
@ -112,6 +114,8 @@ public:
|
|||
virtual void particles_collision_set_height_field_resolution(RID p_particles_collision, RS::ParticlesCollisionHeightfieldResolution p_resolution) override {}
|
||||
virtual AABB particles_collision_get_aabb(RID p_particles_collision) const override { return AABB(); }
|
||||
virtual bool particles_collision_is_heightfield(RID p_particles_collision) const override { return false; }
|
||||
virtual uint32_t particles_collision_get_height_field_mask(RID p_particles_collision) const override { return 0; }
|
||||
virtual void particles_collision_set_height_field_mask(RID p_particles_collision, uint32_t p_heightfield_mask) override {}
|
||||
|
||||
virtual RID particles_collision_instance_create(RID p_collision) override { return RID(); }
|
||||
virtual void particles_collision_instance_free(RID p_rid) override {}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
#ifndef TEXTURE_STORAGE_DUMMY_H
|
||||
#define TEXTURE_STORAGE_DUMMY_H
|
||||
|
||||
#include "servers/rendering/rendering_server_globals.h"
|
||||
#include "servers/rendering/storage/texture_storage.h"
|
||||
|
||||
namespace RendererDummy {
|
||||
|
|
@ -51,29 +50,27 @@ public:
|
|||
TextureStorage();
|
||||
~TextureStorage();
|
||||
|
||||
virtual bool can_create_resources_async() const override { return false; }
|
||||
|
||||
/* Canvas Texture API */
|
||||
|
||||
virtual RID canvas_texture_allocate() override { return RID(); };
|
||||
virtual void canvas_texture_initialize(RID p_rid) override{};
|
||||
virtual void canvas_texture_free(RID p_rid) override{};
|
||||
virtual RID canvas_texture_allocate() override { return RID(); }
|
||||
virtual void canvas_texture_initialize(RID p_rid) override {}
|
||||
virtual void canvas_texture_free(RID p_rid) override {}
|
||||
|
||||
virtual void canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) override{};
|
||||
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) override{};
|
||||
virtual void canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) override {}
|
||||
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) override {}
|
||||
|
||||
virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override{};
|
||||
virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override{};
|
||||
virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override {}
|
||||
virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override {}
|
||||
|
||||
/* Texture API */
|
||||
|
||||
bool owns_texture(RID p_rid) { return texture_owner.owns(p_rid); };
|
||||
bool owns_texture(RID p_rid) { return texture_owner.owns(p_rid); }
|
||||
|
||||
virtual RID texture_allocate() override {
|
||||
DummyTexture *texture = memnew(DummyTexture);
|
||||
ERR_FAIL_NULL_V(texture, RID());
|
||||
return texture_owner.make_rid(texture);
|
||||
};
|
||||
}
|
||||
|
||||
virtual void texture_free(RID p_rid) override {
|
||||
// delete the texture
|
||||
|
|
@ -81,60 +78,64 @@ public:
|
|||
ERR_FAIL_NULL(texture);
|
||||
texture_owner.free(p_rid);
|
||||
memdelete(texture);
|
||||
};
|
||||
}
|
||||
|
||||
virtual void texture_2d_initialize(RID p_texture, const Ref<Image> &p_image) override {
|
||||
DummyTexture *t = texture_owner.get_or_null(p_texture);
|
||||
ERR_FAIL_NULL(t);
|
||||
t->image = p_image->duplicate();
|
||||
};
|
||||
virtual void texture_2d_layered_initialize(RID p_texture, const Vector<Ref<Image>> &p_layers, RS::TextureLayeredType p_layered_type) override{};
|
||||
virtual void texture_3d_initialize(RID p_texture, Image::Format, int p_width, int p_height, int p_depth, bool p_mipmaps, const Vector<Ref<Image>> &p_data) override{};
|
||||
virtual void texture_proxy_initialize(RID p_texture, RID p_base) override{}; //all slices, then all the mipmaps, must be coherent
|
||||
}
|
||||
virtual void texture_2d_layered_initialize(RID p_texture, const Vector<Ref<Image>> &p_layers, RS::TextureLayeredType p_layered_type) override {}
|
||||
virtual void texture_3d_initialize(RID p_texture, Image::Format, int p_width, int p_height, int p_depth, bool p_mipmaps, const Vector<Ref<Image>> &p_data) override {}
|
||||
virtual void texture_external_initialize(RID p_texture, int p_width, int p_height, uint64_t p_external_buffer) override {}
|
||||
virtual void texture_proxy_initialize(RID p_texture, RID p_base) override {} //all slices, then all the mipmaps, must be coherent
|
||||
|
||||
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) override{};
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override{};
|
||||
virtual void texture_proxy_update(RID p_proxy, RID p_base) override{};
|
||||
virtual RID texture_create_from_native_handle(RS::TextureType p_type, Image::Format p_format, uint64_t p_native_handle, int p_width, int p_height, int p_depth, int p_layers = 1, RS::TextureLayeredType p_layered_type = RS::TEXTURE_LAYERED_2D_ARRAY) override { return RID(); }
|
||||
|
||||
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) override {}
|
||||
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) override {}
|
||||
virtual void texture_external_update(RID p_texture, int p_width, int p_height, uint64_t p_external_buffer) override {}
|
||||
virtual void texture_proxy_update(RID p_proxy, RID p_base) override {}
|
||||
|
||||
//these two APIs can be used together or in combination with the others.
|
||||
virtual void texture_2d_placeholder_initialize(RID p_texture) override{};
|
||||
virtual void texture_2d_layered_placeholder_initialize(RID p_texture, RenderingServer::TextureLayeredType p_layered_type) override{};
|
||||
virtual void texture_3d_placeholder_initialize(RID p_texture) override{};
|
||||
virtual void texture_2d_placeholder_initialize(RID p_texture) override {}
|
||||
virtual void texture_2d_layered_placeholder_initialize(RID p_texture, RenderingServer::TextureLayeredType p_layered_type) override {}
|
||||
virtual void texture_3d_placeholder_initialize(RID p_texture) override {}
|
||||
|
||||
virtual Ref<Image> texture_2d_get(RID p_texture) const override {
|
||||
DummyTexture *t = texture_owner.get_or_null(p_texture);
|
||||
ERR_FAIL_NULL_V(t, Ref<Image>());
|
||||
return t->image;
|
||||
};
|
||||
virtual Ref<Image> texture_2d_layer_get(RID p_texture, int p_layer) const override { return Ref<Image>(); };
|
||||
virtual Vector<Ref<Image>> texture_3d_get(RID p_texture) const override { return Vector<Ref<Image>>(); };
|
||||
}
|
||||
virtual Ref<Image> texture_2d_layer_get(RID p_texture, int p_layer) const override { return Ref<Image>(); }
|
||||
virtual Vector<Ref<Image>> texture_3d_get(RID p_texture) const override { return Vector<Ref<Image>>(); }
|
||||
|
||||
virtual void texture_replace(RID p_texture, RID p_by_texture) override { texture_free(p_by_texture); };
|
||||
virtual void texture_set_size_override(RID p_texture, int p_width, int p_height) override{};
|
||||
virtual void texture_replace(RID p_texture, RID p_by_texture) override { texture_free(p_by_texture); }
|
||||
virtual void texture_set_size_override(RID p_texture, int p_width, int p_height) override {}
|
||||
|
||||
virtual void texture_set_path(RID p_texture, const String &p_path) override{};
|
||||
virtual String texture_get_path(RID p_texture) const override { return String(); };
|
||||
virtual void texture_set_path(RID p_texture, const String &p_path) override {}
|
||||
virtual String texture_get_path(RID p_texture) const override { return String(); }
|
||||
|
||||
virtual Image::Format texture_get_format(RID p_texture) const override { return Image::FORMAT_MAX; }
|
||||
|
||||
virtual void texture_set_detect_3d_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_normal_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_roughness_callback(RID p_texture, RS::TextureDetectRoughnessCallback p_callback, void *p_userdata) override{};
|
||||
virtual void texture_set_detect_3d_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override {}
|
||||
virtual void texture_set_detect_normal_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) override {}
|
||||
virtual void texture_set_detect_roughness_callback(RID p_texture, RS::TextureDetectRoughnessCallback p_callback, void *p_userdata) override {}
|
||||
|
||||
virtual void texture_debug_usage(List<RS::TextureInfo> *r_info) override{};
|
||||
virtual void texture_debug_usage(List<RS::TextureInfo> *r_info) override {}
|
||||
|
||||
virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) override{};
|
||||
virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) override {}
|
||||
|
||||
virtual Size2 texture_size_with_proxy(RID p_proxy) override { return Size2(); };
|
||||
virtual Size2 texture_size_with_proxy(RID p_proxy) override { return Size2(); }
|
||||
|
||||
virtual void texture_rd_initialize(RID p_texture, const RID &p_rd_texture, const RS::TextureLayeredType p_layer_type = RS::TEXTURE_LAYERED_2D_ARRAY) override{};
|
||||
virtual RID texture_get_rd_texture(RID p_texture, bool p_srgb = false) const override { return RID(); };
|
||||
virtual uint64_t texture_get_native_handle(RID p_texture, bool p_srgb = false) const override { return 0; };
|
||||
virtual void texture_rd_initialize(RID p_texture, const RID &p_rd_texture, const RS::TextureLayeredType p_layer_type = RS::TEXTURE_LAYERED_2D_ARRAY) override {}
|
||||
virtual RID texture_get_rd_texture(RID p_texture, bool p_srgb = false) const override { return RID(); }
|
||||
virtual uint64_t texture_get_native_handle(RID p_texture, bool p_srgb = false) const override { return 0; }
|
||||
|
||||
/* DECAL API */
|
||||
virtual RID decal_allocate() override { return RID(); }
|
||||
virtual void decal_initialize(RID p_rid) override {}
|
||||
virtual void decal_free(RID p_rid) override{};
|
||||
virtual void decal_free(RID p_rid) override {}
|
||||
|
||||
virtual void decal_set_size(RID p_decal, const Vector3 &p_size) override {}
|
||||
virtual void decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) override {}
|
||||
|
|
@ -198,12 +199,19 @@ public:
|
|||
virtual void render_target_set_vrs_texture(RID p_render_target, RID p_texture) override {}
|
||||
virtual RID render_target_get_vrs_texture(RID p_render_target) const override { return RID(); }
|
||||
|
||||
virtual void render_target_set_override(RID p_render_target, RID p_color_texture, RID p_depth_texture, RID p_velocity_texture) override {}
|
||||
virtual void render_target_set_override(RID p_render_target, RID p_color_texture, RID p_depth_texture, RID p_velocity_texture, RID p_velocity_depth_texture) override {}
|
||||
virtual RID render_target_get_override_color(RID p_render_target) const override { return RID(); }
|
||||
virtual RID render_target_get_override_depth(RID p_render_target) const override { return RID(); }
|
||||
virtual RID render_target_get_override_velocity(RID p_render_target) const override { return RID(); }
|
||||
virtual RID render_target_get_override_velocity_depth(RID p_render_target) const override { return RID(); }
|
||||
|
||||
virtual void render_target_set_render_region(RID p_render_target, const Rect2i &p_render_region) override {}
|
||||
virtual Rect2i render_target_get_render_region(RID p_render_target) const override { return Rect2i(); }
|
||||
|
||||
virtual RID render_target_get_texture(RID p_render_target) override { return RID(); }
|
||||
|
||||
virtual void render_target_set_velocity_target_size(RID p_render_target, const Size2i &p_target_size) override {}
|
||||
virtual Size2i render_target_get_velocity_target_size(RID p_render_target) const override { return Size2i(0, 0); }
|
||||
};
|
||||
|
||||
} // namespace RendererDummy
|
||||
|
|
|
|||
|
|
@ -30,10 +30,55 @@
|
|||
|
||||
#include "utilities.h"
|
||||
|
||||
#include "light_storage.h"
|
||||
#include "material_storage.h"
|
||||
#include "mesh_storage.h"
|
||||
#include "texture_storage.h"
|
||||
|
||||
using namespace RendererDummy;
|
||||
|
||||
Utilities *Utilities::singleton = nullptr;
|
||||
|
||||
RS::InstanceType Utilities::get_base_type(RID p_rid) const {
|
||||
if (RendererDummy::MeshStorage::get_singleton()->owns_mesh(p_rid)) {
|
||||
return RS::INSTANCE_MESH;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_multimesh(p_rid)) {
|
||||
return RS::INSTANCE_MULTIMESH;
|
||||
} else if (RendererDummy::LightStorage::get_singleton()->owns_lightmap(p_rid)) {
|
||||
return RS::INSTANCE_LIGHTMAP;
|
||||
}
|
||||
return RS::INSTANCE_NONE;
|
||||
}
|
||||
|
||||
bool Utilities::free(RID p_rid) {
|
||||
if (RendererDummy::LightStorage::get_singleton()->free(p_rid)) {
|
||||
return true;
|
||||
} else if (RendererDummy::TextureStorage::get_singleton()->owns_texture(p_rid)) {
|
||||
RendererDummy::TextureStorage::get_singleton()->texture_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_mesh(p_rid)) {
|
||||
RendererDummy::MeshStorage::get_singleton()->mesh_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_multimesh(p_rid)) {
|
||||
RendererDummy::MeshStorage::get_singleton()->multimesh_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MaterialStorage::get_singleton()->owns_shader(p_rid)) {
|
||||
RendererDummy::MaterialStorage::get_singleton()->shader_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MaterialStorage::get_singleton()->owns_material(p_rid)) {
|
||||
RendererDummy::MaterialStorage::get_singleton()->material_free(p_rid);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Utilities::base_update_dependency(RID p_base, DependencyTracker *p_instance) {
|
||||
if (RendererDummy::MeshStorage::get_singleton()->owns_mesh(p_base)) {
|
||||
DummyMesh *mesh = RendererDummy::MeshStorage::get_singleton()->get_mesh(p_base);
|
||||
p_instance->update_dependency(&mesh->dependency);
|
||||
}
|
||||
}
|
||||
|
||||
Utilities::Utilities() {
|
||||
singleton = this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,11 +31,7 @@
|
|||
#ifndef UTILITIES_DUMMY_H
|
||||
#define UTILITIES_DUMMY_H
|
||||
|
||||
#include "light_storage.h"
|
||||
#include "material_storage.h"
|
||||
#include "mesh_storage.h"
|
||||
#include "servers/rendering/storage/utilities.h"
|
||||
#include "texture_storage.h"
|
||||
|
||||
namespace RendererDummy {
|
||||
|
||||
|
|
@ -51,39 +47,12 @@ public:
|
|||
|
||||
/* INSTANCES */
|
||||
|
||||
virtual RS::InstanceType get_base_type(RID p_rid) const override {
|
||||
if (RendererDummy::MeshStorage::get_singleton()->owns_mesh(p_rid)) {
|
||||
return RS::INSTANCE_MESH;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_multimesh(p_rid)) {
|
||||
return RS::INSTANCE_MULTIMESH;
|
||||
} else if (RendererDummy::LightStorage::get_singleton()->owns_lightmap(p_rid)) {
|
||||
return RS::INSTANCE_LIGHTMAP;
|
||||
}
|
||||
return RS::INSTANCE_NONE;
|
||||
}
|
||||
|
||||
virtual bool free(RID p_rid) override {
|
||||
if (RendererDummy::LightStorage::get_singleton()->free(p_rid)) {
|
||||
return true;
|
||||
} else if (RendererDummy::TextureStorage::get_singleton()->owns_texture(p_rid)) {
|
||||
RendererDummy::TextureStorage::get_singleton()->texture_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_mesh(p_rid)) {
|
||||
RendererDummy::MeshStorage::get_singleton()->mesh_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MeshStorage::get_singleton()->owns_multimesh(p_rid)) {
|
||||
RendererDummy::MeshStorage::get_singleton()->multimesh_free(p_rid);
|
||||
return true;
|
||||
} else if (RendererDummy::MaterialStorage::get_singleton()->owns_shader(p_rid)) {
|
||||
RendererDummy::MaterialStorage::get_singleton()->shader_free(p_rid);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
virtual RS::InstanceType get_base_type(RID p_rid) const override;
|
||||
virtual bool free(RID p_rid) override;
|
||||
|
||||
/* DEPENDENCIES */
|
||||
|
||||
virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override {}
|
||||
virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override;
|
||||
|
||||
/* VISIBILITY NOTIFIER */
|
||||
|
||||
|
|
@ -124,7 +93,9 @@ public:
|
|||
virtual RenderingDevice::DeviceType get_video_adapter_type() const override { return RenderingDevice::DeviceType::DEVICE_TYPE_OTHER; }
|
||||
virtual String get_video_adapter_api_version() const override { return String(); }
|
||||
|
||||
virtual Size2i get_maximum_viewport_size() const override { return Size2i(); };
|
||||
virtual Size2i get_maximum_viewport_size() const override { return Size2i(); }
|
||||
virtual uint32_t get_maximum_shader_varyings() const override { return 31; } // Fair assumption for everything except old OpenGL-only phones.
|
||||
virtual uint64_t get_maximum_uniform_buffer_size() const override { return 65536; } // Fair assumption for all devices.
|
||||
};
|
||||
|
||||
} // namespace RendererDummy
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue