summaryrefslogtreecommitdiff
path: root/servers/visual_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/visual_server.cpp')
-rw-r--r--servers/visual_server.cpp56
1 files changed, 53 insertions, 3 deletions
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp
index a45e2c8eaf..9abfecaac6 100644
--- a/servers/visual_server.cpp
+++ b/servers/visual_server.cpp
@@ -145,6 +145,7 @@ RID VisualServer::_make_test_cube() {
tangents.push_back( normal_points[m_idx][0] );\
tangents.push_back( 1.0 );\
uvs.push_back( Vector3(uv_points[m_idx*2+0],uv_points[m_idx*2+1],0) );\
+ print_line(itos( (face_points[m_idx][0]>0?1:0)|(face_points[m_idx][1]>0?2:0)|(face_points[m_idx][2]>0?4:0)));\
vtx_idx++;\
for (int i=0;i<6;i++) {
@@ -274,6 +275,55 @@ RID VisualServer::make_sphere_mesh(int p_lats,int p_lons,float p_radius) {
return mesh;
}
+
+RID VisualServer::material_2d_get(bool p_shaded, bool p_transparent, bool p_cut_alpha, bool p_opaque_prepass) {
+
+ int version=0;
+ if (p_shaded)
+ version=1;
+ if (p_transparent)
+ version|=2;
+ if (p_cut_alpha)
+ version|=4;
+ if (p_opaque_prepass)
+ version|=8;
+ if (material_2d[version].is_valid())
+ return material_2d[version];
+
+ //not valid, make
+
+ material_2d[version]=fixed_material_create();
+ fixed_material_set_flag(material_2d[version],FIXED_MATERIAL_FLAG_USE_ALPHA,p_transparent);
+ fixed_material_set_flag(material_2d[version],FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true);
+ fixed_material_set_flag(material_2d[version],FIXED_MATERIAL_FLAG_DISCARD_ALPHA,p_cut_alpha);
+ material_set_flag(material_2d[version],MATERIAL_FLAG_UNSHADED,!p_shaded);
+ material_set_flag(material_2d[version],MATERIAL_FLAG_DOUBLE_SIDED,true);
+ material_set_depth_draw_mode(material_2d[version],p_opaque_prepass?MATERIAL_DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA:MATERIAL_DEPTH_DRAW_OPAQUE_ONLY);
+ fixed_material_set_texture(material_2d[version],FIXED_MATERIAL_PARAM_DIFFUSE,get_white_texture());
+ //material cut alpha?
+ return material_2d[version];
+}
+
+RID VisualServer::get_white_texture() {
+
+ if (white_texture.is_valid())
+ return white_texture;
+
+ DVector<uint8_t> wt;
+ wt.resize(16*3);
+ {
+ DVector<uint8_t>::Write w =wt.write();
+ for(int i=0;i<16*3;i++)
+ w[i]=255;
+ }
+ Image white(4,4,0,Image::FORMAT_RGB,wt);
+ white_texture=texture_create();
+ texture_allocate(white_texture,4,4,Image::FORMAT_RGB);
+ texture_set_data(white_texture,white);
+ return white_texture;
+
+}
+
void VisualServer::_bind_methods() {
@@ -478,11 +528,13 @@ void VisualServer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("cursor_set_pos"),&VisualServer::cursor_set_pos);
ObjectTypeDB::bind_method(_MD("black_bars_set_margins","left","top","right","bottom"),&VisualServer::black_bars_set_margins);
+ ObjectTypeDB::bind_method(_MD("black_bars_set_images","left","top","right","bottom"),&VisualServer::black_bars_set_images);
ObjectTypeDB::bind_method(_MD("make_sphere_mesh"),&VisualServer::make_sphere_mesh);
ObjectTypeDB::bind_method(_MD("mesh_add_surface_from_planes"),&VisualServer::mesh_add_surface_from_planes);
ObjectTypeDB::bind_method(_MD("draw"),&VisualServer::draw);
+ ObjectTypeDB::bind_method(_MD("flush"),&VisualServer::flush);
ObjectTypeDB::bind_method(_MD("free"),&VisualServer::free);
ObjectTypeDB::bind_method(_MD("set_default_clear_color"),&VisualServer::set_default_clear_color);
@@ -517,8 +569,6 @@ void VisualServer::_bind_methods() {
BIND_CONSTANT( MATERIAL_FLAG_INVERT_FACES );
BIND_CONSTANT( MATERIAL_FLAG_UNSHADED );
BIND_CONSTANT( MATERIAL_FLAG_ONTOP );
- BIND_CONSTANT( MATERIAL_FLAG_WIREFRAME );
- BIND_CONSTANT( MATERIAL_FLAG_BILLBOARD );
BIND_CONSTANT( MATERIAL_FLAG_MAX );
BIND_CONSTANT( MATERIAL_BLEND_MODE_MIX );
@@ -591,7 +641,7 @@ void VisualServer::_bind_methods() {
BIND_CONSTANT( LIGHT_OMNI );
BIND_CONSTANT( LIGHT_SPOT );
- BIND_CONSTANT( LIGHT_COLOR_AMBIENT );
+
BIND_CONSTANT( LIGHT_COLOR_DIFFUSE );
BIND_CONSTANT( LIGHT_COLOR_SPECULAR );