Refactored 2D shader and lighting system
-Removed normal/specular properties from nodes -Create CanvasTexture, which can contain normal/specular channels -Refactored, optimized and simplified 2D shaders -Use atlas for light textures. -Use a shadow atlas for shadow textures. -Use both items aboves to make light rendering stateless (faster). -Reorganized uniform sets for more efficiency.
This commit is contained in:
parent
b67ccf1a6f
commit
84d734da0e
48 changed files with 1330 additions and 1471 deletions
|
|
@ -302,7 +302,7 @@ void Polygon2D::_notification(int p_what) {
|
|||
if (invert || polygons.size() == 0) {
|
||||
Vector<int> indices = Geometry2D::triangulate_polygon(points);
|
||||
if (indices.size()) {
|
||||
RS::get_singleton()->canvas_item_add_triangle_array(get_canvas_item(), indices, points, colors, uvs, bones, weights, texture.is_valid() ? texture->get_rid() : RID(), -1, normal_map.is_valid() ? normal_map->get_rid() : RID(), specular_map.is_valid() ? specular_map->get_rid() : RID(), Color(specular_color.r, specular_color.g, specular_color.b, shininess));
|
||||
RS::get_singleton()->canvas_item_add_triangle_array(get_canvas_item(), indices, points, colors, uvs, bones, weights, texture.is_valid() ? texture->get_rid() : RID(), -1);
|
||||
}
|
||||
} else {
|
||||
//draw individual polygons
|
||||
|
|
@ -417,42 +417,6 @@ Ref<Texture2D> Polygon2D::get_texture() const {
|
|||
return texture;
|
||||
}
|
||||
|
||||
void Polygon2D::set_normal_map(const Ref<Texture2D> &p_normal_map) {
|
||||
normal_map = p_normal_map;
|
||||
update();
|
||||
}
|
||||
|
||||
Ref<Texture2D> Polygon2D::get_normal_map() const {
|
||||
return normal_map;
|
||||
}
|
||||
|
||||
void Polygon2D::set_specular_map(const Ref<Texture2D> &p_specular_map) {
|
||||
specular_map = p_specular_map;
|
||||
update();
|
||||
}
|
||||
|
||||
Ref<Texture2D> Polygon2D::get_specular_map() const {
|
||||
return specular_map;
|
||||
}
|
||||
|
||||
void Polygon2D::set_specular_color(const Color &p_specular_color) {
|
||||
specular_color = p_specular_color;
|
||||
update();
|
||||
}
|
||||
|
||||
Color Polygon2D::get_specular_color() const {
|
||||
return specular_color;
|
||||
}
|
||||
|
||||
void Polygon2D::set_shininess(float p_shininess) {
|
||||
shininess = CLAMP(p_shininess, 0.0, 1.0);
|
||||
update();
|
||||
}
|
||||
|
||||
float Polygon2D::get_shininess() const {
|
||||
return shininess;
|
||||
}
|
||||
|
||||
void Polygon2D::set_texture_offset(const Vector2 &p_offset) {
|
||||
tex_ofs = p_offset;
|
||||
update();
|
||||
|
|
@ -616,18 +580,6 @@ void Polygon2D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &Polygon2D::set_texture);
|
||||
ClassDB::bind_method(D_METHOD("get_texture"), &Polygon2D::get_texture);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_normal_map", "normal_map"), &Polygon2D::set_normal_map);
|
||||
ClassDB::bind_method(D_METHOD("get_normal_map"), &Polygon2D::get_normal_map);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_specular_map", "specular_map"), &Polygon2D::set_specular_map);
|
||||
ClassDB::bind_method(D_METHOD("get_specular_map"), &Polygon2D::get_specular_map);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_specular_color", "specular_color"), &Polygon2D::set_specular_color);
|
||||
ClassDB::bind_method(D_METHOD("get_specular_color"), &Polygon2D::get_specular_color);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_shininess", "shininess"), &Polygon2D::set_shininess);
|
||||
ClassDB::bind_method(D_METHOD("get_shininess"), &Polygon2D::get_shininess);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_texture_offset", "texture_offset"), &Polygon2D::set_texture_offset);
|
||||
ClassDB::bind_method(D_METHOD("get_texture_offset"), &Polygon2D::get_texture_offset);
|
||||
|
||||
|
|
@ -680,11 +632,6 @@ void Polygon2D::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_scale"), "set_texture_scale", "get_texture_scale");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "texture_rotation_degrees", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater"), "set_texture_rotation_degrees", "get_texture_rotation_degrees");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "texture_rotation", PROPERTY_HINT_NONE, "", 0), "set_texture_rotation", "get_texture_rotation");
|
||||
ADD_GROUP("Lighting", "");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_normal_map", "get_normal_map");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "specular_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_specular_map", "get_specular_map");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "specular_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_specular_color", "get_specular_color");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "shininess", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_shininess", "get_shininess");
|
||||
ADD_GROUP("Skeleton", "");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton2D"), "set_skeleton", "get_skeleton");
|
||||
|
||||
|
|
@ -711,7 +658,4 @@ Polygon2D::Polygon2D() {
|
|||
color = Color(1, 1, 1);
|
||||
rect_cache_dirty = true;
|
||||
internal_vertices = 0;
|
||||
|
||||
specular_color = Color(1, 1, 1, 1);
|
||||
shininess = 1.0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue