Merge branch 'master' of https://github.com/okamstudio/godot into shadow_color
Conflicts: drivers/gles2/shader_compiler_gles2.cpp
13
SConstruct
@ -59,7 +59,7 @@ platform_arg = ARGUMENTS.get("platform", False)
|
|||||||
if (os.name=="posix"):
|
if (os.name=="posix"):
|
||||||
pass
|
pass
|
||||||
elif (os.name=="nt"):
|
elif (os.name=="nt"):
|
||||||
if (os.getenv("VSINSTALLDIR")==None or platform_arg=="android"):
|
if (os.getenv("VSINSTALLDIR")==None or platform_arg=="android"):
|
||||||
custom_tools=['mingw']
|
custom_tools=['mingw']
|
||||||
|
|
||||||
env_base=Environment(tools=custom_tools,ENV = {'PATH' : os.environ['PATH']});
|
env_base=Environment(tools=custom_tools,ENV = {'PATH' : os.environ['PATH']});
|
||||||
@ -229,7 +229,7 @@ if selected_platform in platform_list:
|
|||||||
#must happen after the flags, so when flags are used by configure, stuff happens (ie, ssl on x11)
|
#must happen after the flags, so when flags are used by configure, stuff happens (ie, ssl on x11)
|
||||||
detect.configure(env)
|
detect.configure(env)
|
||||||
|
|
||||||
#env['platform_libsuffix'] = env['LIBSUFFIX']
|
#env['platform_libsuffix'] = env['LIBSUFFIX']
|
||||||
|
|
||||||
suffix="."+selected_platform
|
suffix="."+selected_platform
|
||||||
|
|
||||||
@ -284,10 +284,11 @@ if selected_platform in platform_list:
|
|||||||
|
|
||||||
if (env['musepack']=='yes'):
|
if (env['musepack']=='yes'):
|
||||||
env.Append(CPPFLAGS=['-DMUSEPACK_ENABLED']);
|
env.Append(CPPFLAGS=['-DMUSEPACK_ENABLED']);
|
||||||
if (env['openssl']!='no'):
|
|
||||||
env.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
|
if (env['openssl']!='no'):
|
||||||
if (env['openssl']=="builtin"):
|
env.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
|
||||||
env.Append(CPPPATH=['#drivers/builtin_openssl2'])
|
if (env['openssl']=="builtin"):
|
||||||
|
env.Append(CPPPATH=['#drivers/builtin_openssl2'])
|
||||||
|
|
||||||
if (env["builtin_zlib"]=='yes'):
|
if (env["builtin_zlib"]=='yes'):
|
||||||
env.Append(CPPPATH=['#drivers/builtin_zlib/zlib'])
|
env.Append(CPPPATH=['#drivers/builtin_zlib/zlib'])
|
||||||
|
@ -10,5 +10,3 @@ Export('env')
|
|||||||
lib = env.Library("tests",env.tests_sources)
|
lib = env.Library("tests",env.tests_sources)
|
||||||
|
|
||||||
env.Prepend(LIBS=[lib])
|
env.Prepend(LIBS=[lib])
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,5 +63,3 @@ SConscript('bind/SCsub');
|
|||||||
lib = env.Library("core",env.core_sources)
|
lib = env.Library("core",env.core_sources)
|
||||||
|
|
||||||
env.Prepend(LIBS=[lib])
|
env.Prepend(LIBS=[lib])
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.core_sources,"*.cpp")
|
env.add_source_files(env.core_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,5 +5,3 @@ env.add_source_files(env.core_sources,"*.c")
|
|||||||
#env.core_sources.append("io/fastlz.c")
|
#env.core_sources.append("io/fastlz.c")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -177,9 +177,6 @@ Error JSON::_get_token(const CharType *p_str, int &idx, int p_len, Token& r_toke
|
|||||||
case 'n': res=10; break;
|
case 'n': res=10; break;
|
||||||
case 'f': res=12; break;
|
case 'f': res=12; break;
|
||||||
case 'r': res=13; break;
|
case 'r': res=13; break;
|
||||||
case '\"': res='\"'; break;
|
|
||||||
case '\\': res='\\'; break;
|
|
||||||
case '/': res='/'; break; //wtf
|
|
||||||
case 'u': {
|
case 'u': {
|
||||||
//hexnumbarh - oct is deprecated
|
//hexnumbarh - oct is deprecated
|
||||||
|
|
||||||
@ -218,10 +215,13 @@ Error JSON::_get_token(const CharType *p_str, int &idx, int p_len, Token& r_toke
|
|||||||
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
//case '\"': res='\"'; break;
|
||||||
|
//case '\\': res='\\'; break;
|
||||||
|
//case '/': res='/'; break;
|
||||||
default: {
|
default: {
|
||||||
|
res = next;
|
||||||
r_err_str="Invalid escape sequence";
|
//r_err_str="Invalid escape sequence";
|
||||||
return ERR_PARSE_ERROR;
|
//return ERR_PARSE_ERROR;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.core_sources,"*.cpp")
|
env.add_source_files(env.core_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ public:
|
|||||||
-x * v.x - y * v.y - z * v.z);
|
-x * v.x - y * v.y - z * v.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector3 xform(const Vector3& v) {
|
_FORCE_INLINE_ Vector3 xform(const Vector3& v) const {
|
||||||
|
|
||||||
Quat q = *this * v;
|
Quat q = *this * v;
|
||||||
q *= this->inverse();
|
q *= this->inverse();
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.core_sources,"*.cpp")
|
env.add_source_files(env.core_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,9 +61,16 @@ void OS::debug_break() {
|
|||||||
|
|
||||||
void OS::print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type) {
|
void OS::print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type) {
|
||||||
|
|
||||||
|
const char* err_type;
|
||||||
|
switch(p_type) {
|
||||||
|
case ERR_ERROR: err_type="**ERROR**"; break;
|
||||||
|
case ERR_WARNING: err_type="**WARNING**"; break;
|
||||||
|
case ERR_SCRIPT: err_type="**SCRIPT ERROR**"; break;
|
||||||
|
}
|
||||||
|
|
||||||
if (p_rationale && *p_rationale)
|
if (p_rationale && *p_rationale)
|
||||||
print("**ERROR**: %s\n ",p_rationale);
|
print("%s: %s\n ",err_type,p_rationale);
|
||||||
print("**ERROR**: At: %s:%i:%s() - %s\n",p_file,p_line,p_function,p_code);
|
print("%s: At: %s:%i:%s() - %s\n",err_type,p_file,p_line,p_function,p_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OS::print(const char* p_format, ...) {
|
void OS::print(const char* p_format, ...) {
|
||||||
|
@ -409,6 +409,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
|
|||||||
VCALL_LOCALMEM0R(Quat,normalized);
|
VCALL_LOCALMEM0R(Quat,normalized);
|
||||||
VCALL_LOCALMEM0R(Quat,inverse);
|
VCALL_LOCALMEM0R(Quat,inverse);
|
||||||
VCALL_LOCALMEM1R(Quat,dot);
|
VCALL_LOCALMEM1R(Quat,dot);
|
||||||
|
VCALL_LOCALMEM1R(Quat,xform);
|
||||||
VCALL_LOCALMEM2R(Quat,slerp);
|
VCALL_LOCALMEM2R(Quat,slerp);
|
||||||
VCALL_LOCALMEM2R(Quat,slerpni);
|
VCALL_LOCALMEM2R(Quat,slerpni);
|
||||||
VCALL_LOCALMEM4R(Quat,cubic_slerp);
|
VCALL_LOCALMEM4R(Quat,cubic_slerp);
|
||||||
@ -1361,6 +1362,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
|
|||||||
ADDFUNC0(QUAT,QUAT,Quat,normalized,varray());
|
ADDFUNC0(QUAT,QUAT,Quat,normalized,varray());
|
||||||
ADDFUNC0(QUAT,QUAT,Quat,inverse,varray());
|
ADDFUNC0(QUAT,QUAT,Quat,inverse,varray());
|
||||||
ADDFUNC1(QUAT,REAL,Quat,dot,QUAT,"b",varray());
|
ADDFUNC1(QUAT,REAL,Quat,dot,QUAT,"b",varray());
|
||||||
|
ADDFUNC1(QUAT,VECTOR3,Quat,xform,VECTOR3,"v",varray());
|
||||||
ADDFUNC2(QUAT,QUAT,Quat,slerp,QUAT,"b",REAL,"t",varray());
|
ADDFUNC2(QUAT,QUAT,Quat,slerp,QUAT,"b",REAL,"t",varray());
|
||||||
ADDFUNC2(QUAT,QUAT,Quat,slerpni,QUAT,"b",REAL,"t",varray());
|
ADDFUNC2(QUAT,QUAT,Quat,slerpni,QUAT,"b",REAL,"t",varray());
|
||||||
ADDFUNC4(QUAT,QUAT,Quat,cubic_slerp,QUAT,"b",QUAT,"pre_a",QUAT,"post_b",REAL,"t",varray());
|
ADDFUNC4(QUAT,QUAT,Quat,cubic_slerp,QUAT,"b",QUAT,"pre_a",QUAT,"post_b",REAL,"t",varray());
|
||||||
|
@ -586,7 +586,21 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant&
|
|||||||
} break;
|
} break;
|
||||||
DEFAULT_OP_LOCALMEM_NUM(*,VECTOR3,Vector3);
|
DEFAULT_OP_LOCALMEM_NUM(*,VECTOR3,Vector3);
|
||||||
DEFAULT_OP_FAIL(PLANE);
|
DEFAULT_OP_FAIL(PLANE);
|
||||||
DEFAULT_OP_FAIL(QUAT);
|
case QUAT: {
|
||||||
|
|
||||||
|
switch(p_b.type) {
|
||||||
|
case VECTOR3: {
|
||||||
|
|
||||||
|
_RETURN( reinterpret_cast<const Quat*>(p_a._data._mem)->xform( *(const Vector3*)p_b._data._mem) );
|
||||||
|
} break;
|
||||||
|
case QUAT: {
|
||||||
|
|
||||||
|
_RETURN( *reinterpret_cast<const Quat*>(p_a._data._mem) * *reinterpret_cast<const Quat*>(p_b._data._mem) );
|
||||||
|
} break;
|
||||||
|
};
|
||||||
|
r_valid=false;
|
||||||
|
return;
|
||||||
|
} break;
|
||||||
DEFAULT_OP_FAIL(_AABB);
|
DEFAULT_OP_FAIL(_AABB);
|
||||||
case MATRIX3: {
|
case MATRIX3: {
|
||||||
|
|
||||||
@ -2573,7 +2587,7 @@ bool Variant::in(const Variant& p_index, bool *r_valid) const {
|
|||||||
String idx=p_index;
|
String idx=p_index;
|
||||||
const String *str=reinterpret_cast<const String*>(_data._mem);
|
const String *str=reinterpret_cast<const String*>(_data._mem);
|
||||||
|
|
||||||
return str->find("idx")!=-1;
|
return str->find(idx)!=-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="Area 2D Input Events"
|
name="Area 2D Input Events"
|
||||||
main_scene="res://input.scn"
|
main_scene="res://input.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/2d/area_input/icon.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="Run-Time CollisionShape"
|
name="Run-Time CollisionShape"
|
||||||
main_scene="res://dynamic_colobjs.scn"
|
main_scene="res://dynamic_colobjs.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/2d/dynamic_collision_shapes/icon.png
Normal file
After Width: | Height: | Size: 844 B |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
name="Fog of War"
|
name="Fog of War"
|
||||||
main_scene="res://fog.scn"
|
main_scene="res://fog.scn"
|
||||||
icon="icon.png"
|
icon="res://icon.png"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="HDR for 2D"
|
name="HDR for 2D"
|
||||||
main_scene="res://beach_cave.scn"
|
main_scene="res://beach_cave.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/hdr/icon.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Isometric 2D + Lighting"
|
name="Isometric 2D + Lighting"
|
||||||
main_scene="res://map.scn"
|
main_scene="res://map.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
|
BIN
demos/2d/isometric_light/icon.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Using Lights As Mask"
|
name="Using Lights As Mask"
|
||||||
main_scene="res://lightmask.scn"
|
main_scene="res://lightmask.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[rasterizer]
|
[rasterizer]
|
||||||
|
|
||||||
|
BIN
demos/2d/light_mask/icon.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="2D Lighting"
|
name="2D Lighting"
|
||||||
main_scene="res://light_shadows.scn"
|
main_scene="res://light_shadows.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/lights_shadows/icon.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Navigation Polygon (2D)"
|
name="Navigation Polygon (2D)"
|
||||||
main_scene="res://navigation.scn"
|
main_scene="res://navigation.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/navpoly/icon.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="2D Normal Mapping"
|
name="2D Normal Mapping"
|
||||||
main_scene="res://normalmap.scn"
|
main_scene="res://normalmap.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/normalmaps/icon.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
name="polygon_path_finder_demo"
|
name="polygon_path_finder_demo"
|
||||||
main_scene="res://new_scene_poly_with_holes.scn"
|
main_scene="res://new_scene_poly_with_holes.scn"
|
||||||
icon="icon.png"
|
icon="res://icon.png"
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Screen-Space Shaders"
|
name="Screen-Space Shaders"
|
||||||
main_scene="res://screen_shaders.scn"
|
main_scene="res://screen_shaders.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/screen_space_shaders/icon.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="Signed Distance Field Font"
|
name="Signed Distance Field Font"
|
||||||
main_scene="res://sdf.scn"
|
main_scene="res://sdf.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/2d/sdf_font/icon.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Splash Screen"
|
name="Splash Screen"
|
||||||
main_scene="res://splash.xml"
|
main_scene="res://splash.xml"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
BIN
demos/2d/splash/icon.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="2D Shaders for Sprites"
|
name="2D Shaders for Sprites"
|
||||||
main_scene="res://sprite_shaders.scn"
|
main_scene="res://sprite_shaders.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/2d/sprite_shaders/icon.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
demos/3d/navmesh/icon.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="SAT Collision Test"
|
name="SAT Collision Test"
|
||||||
main_scene="res://sat_test.xml"
|
main_scene="res://sat_test.xml"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/3d/sat_test/icon.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
name="Input Mapping GUI"
|
name="Input Mapping GUI"
|
||||||
main_scene="res://controls.scn"
|
main_scene="res://controls.scn"
|
||||||
icon="icon.png"
|
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
@ -2,3 +2,4 @@
|
|||||||
|
|
||||||
name="Rich Text Label (BBCode)"
|
name="Rich Text Label (BBCode)"
|
||||||
main_scene="res://rich_text_bbcode.scn"
|
main_scene="res://rich_text_bbcode.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
BIN
demos/gui/rich_text_bbcode/icon.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
name="Scene Instancing Demo"
|
name="Scene Instancing Demo"
|
||||||
main_scene="res://container.scn"
|
main_scene="res://container.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
[physics_2d]
|
[physics_2d]
|
||||||
|
|
||||||
|
BIN
demos/misc/instancing/icon.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
@ -2,21 +2,23 @@ extends VBoxContainer
|
|||||||
|
|
||||||
var regex = RegEx.new()
|
var regex = RegEx.new()
|
||||||
|
|
||||||
func update_expression():
|
func update_expression(text):
|
||||||
regex.compile(get_node("Expression").get_text())
|
regex.compile(text)
|
||||||
update_text()
|
update_text()
|
||||||
|
|
||||||
func update_text():
|
func update_text():
|
||||||
var text = get_node("Text").get_text()
|
var text = get_node("Text").get_text()
|
||||||
regex.find(text)
|
|
||||||
var list = get_node("List")
|
var list = get_node("List")
|
||||||
for child in list.get_children():
|
for child in list.get_children():
|
||||||
child.queue_free()
|
child.queue_free()
|
||||||
for res in regex.get_captures():
|
if regex.is_valid():
|
||||||
var label = Label.new()
|
regex.find(text)
|
||||||
label.set_text(res)
|
for res in regex.get_captures():
|
||||||
list.add_child(label)
|
var label = Label.new()
|
||||||
|
label.set_text(res)
|
||||||
|
list.add_child(label)
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
get_node("Text").set_text("They asked me \"What's going on \\\"in the manor\\\"?\"")
|
get_node("Text").set_text("They asked me \"What's going on \\\"in the manor\\\"?\"")
|
||||||
update_expression()
|
update_expression(get_node("Expression").get_text())
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
name="Tween Demo"
|
name="Tween Demo"
|
||||||
main_scene="res://main.xml"
|
main_scene="res://main.xml"
|
||||||
icon="icon.png"
|
icon="res://icon.png"
|
||||||
target_fps=60
|
target_fps=60
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
name="Window Management"
|
name="Window Management"
|
||||||
main_scene="res://window_management.scn"
|
main_scene="res://window_management.scn"
|
||||||
icon="icon.png"
|
icon="res://icon.png"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
@ -69,21 +69,27 @@ for f in env.drivers_sources:
|
|||||||
fname = env.File(f).path
|
fname = env.File(f).path
|
||||||
else:
|
else:
|
||||||
fname = env.File(f)[0].path
|
fname = env.File(f)[0].path
|
||||||
#base = string.join(fname.split("/")[:-1], "/")
|
|
||||||
fname = fname.replace("\\", "/")
|
fname = fname.replace("\\", "/")
|
||||||
base = string.join(fname.split("/")[:2], "/")
|
base = string.join(fname.split("/")[:2], "/")
|
||||||
if base != cur_base and len(list) > max_src:
|
if base != cur_base and len(list) > max_src:
|
||||||
lib = env.Library("drivers"+str(num), list)
|
if num > 0:
|
||||||
lib_list.append(lib)
|
lib = env.Library("drivers"+str(num), list)
|
||||||
list = []
|
lib_list.append(lib)
|
||||||
|
list = []
|
||||||
num = num+1
|
num = num+1
|
||||||
cur_base = base
|
cur_base = base
|
||||||
list.append(f)
|
list.append(f)
|
||||||
|
|
||||||
if len(list) > 0:
|
lib = env.Library("drivers"+str(num), list)
|
||||||
lib = env.Library("drivers"+str(num), list)
|
lib_list.append(lib)
|
||||||
lib_list.append(lib)
|
|
||||||
|
|
||||||
|
if len(lib_list) > 0:
|
||||||
|
import os, sys
|
||||||
|
if os.name=='posix' and sys.platform=='msys':
|
||||||
|
env.Replace(ARFLAGS=['rcsT'])
|
||||||
|
|
||||||
|
lib = env.Library("drivers_collated", lib_list)
|
||||||
|
lib_list = [lib]
|
||||||
|
|
||||||
drivers_base=[]
|
drivers_base=[]
|
||||||
env.add_source_files(drivers_base,"*.cpp")
|
env.add_source_files(drivers_base,"*.cpp")
|
||||||
@ -93,4 +99,3 @@ env.Prepend(LIBS=lib_list)
|
|||||||
|
|
||||||
#lib = env.Library("drivers",env.drivers_sources)
|
#lib = env.Library("drivers",env.drivers_sources)
|
||||||
#env.Prepend(LIBS=[lib])
|
#env.Prepend(LIBS=[lib])
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,4 +8,3 @@ dds_sources = [
|
|||||||
env.drivers_sources+=dds_sources
|
env.drivers_sources+=dds_sources
|
||||||
|
|
||||||
#env.add_source_files(env.drivers_sources, dds_sources)
|
#env.add_source_files(env.drivers_sources, dds_sources)
|
||||||
|
|
||||||
|
@ -12,4 +12,3 @@ if (env["etc1"] != "no"):
|
|||||||
#env.add_source_files(env.drivers_sources, etc_sources)
|
#env.add_source_files(env.drivers_sources, etc_sources)
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
@ -3,4 +3,3 @@ Export('env');
|
|||||||
|
|
||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
env.add_source_files(env.drivers_sources,"*.c")
|
env.add_source_files(env.drivers_sources,"*.c")
|
||||||
|
|
||||||
|
@ -4075,6 +4075,8 @@ void RasterizerGLES2::render_target_set_size(RID p_render_target,int p_width,int
|
|||||||
glDeleteTextures(1,&rt->color);
|
glDeleteTextures(1,&rt->color);
|
||||||
|
|
||||||
rt->fbo=0;
|
rt->fbo=0;
|
||||||
|
rt->depth=0;
|
||||||
|
rt->color=0;
|
||||||
rt->width=0;
|
rt->width=0;
|
||||||
rt->height=0;
|
rt->height=0;
|
||||||
rt->texture_ptr->tex_id=0;
|
rt->texture_ptr->tex_id=0;
|
||||||
@ -4094,12 +4096,14 @@ void RasterizerGLES2::render_target_set_size(RID p_render_target,int p_width,int
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, rt->fbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, rt->fbo);
|
||||||
|
|
||||||
//depth
|
//depth
|
||||||
glGenRenderbuffers(1, &rt->depth);
|
if (!low_memory_2d) {
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, rt->depth );
|
glGenRenderbuffers(1, &rt->depth);
|
||||||
|
glBindRenderbuffer(GL_RENDERBUFFER, rt->depth );
|
||||||
|
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, use_depth24?_DEPTH_COMPONENT24_OES:GL_DEPTH_COMPONENT16, rt->width,rt->height);
|
glRenderbufferStorage(GL_RENDERBUFFER, use_depth24?_DEPTH_COMPONENT24_OES:GL_DEPTH_COMPONENT16, rt->width,rt->height);
|
||||||
|
|
||||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth);
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rt->depth);
|
||||||
|
}
|
||||||
|
|
||||||
//color
|
//color
|
||||||
glGenTextures(1, &rt->color);
|
glGenTextures(1, &rt->color);
|
||||||
@ -4644,6 +4648,9 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const {
|
|||||||
enablers.push_back("#define USE_TIME\n");
|
enablers.push_back("#define USE_TIME\n");
|
||||||
uses_time=true;
|
uses_time=true;
|
||||||
}
|
}
|
||||||
|
if (vertex_flags.vertex_code_writes_position) {
|
||||||
|
enablers.push_back("#define VERTEX_SHADER_WRITE_POSITION\n");
|
||||||
|
}
|
||||||
|
|
||||||
material_shader.set_custom_shader_code(p_shader->custom_code_id,vertex_code, vertex_globals,fragment_code, light_code, fragment_globals,uniform_names,enablers);
|
material_shader.set_custom_shader_code(p_shader->custom_code_id,vertex_code, vertex_globals,fragment_code, light_code, fragment_globals,uniform_names,enablers);
|
||||||
} else if (p_shader->mode==VS::SHADER_CANVAS_ITEM) {
|
} else if (p_shader->mode==VS::SHADER_CANVAS_ITEM) {
|
||||||
@ -6529,80 +6536,84 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
|
|||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
|
||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER,false);
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER,false);
|
||||||
|
|
||||||
if (e->instance->sampled_light.is_valid()) {
|
if (material->flags[VS::MATERIAL_FLAG_UNSHADED] == false && current_debug != VS::SCENARIO_DEBUG_SHADELESS) {
|
||||||
|
|
||||||
SampledLight *sl = sampled_light_owner.get(e->instance->sampled_light);
|
if (e->instance->sampled_light.is_valid()) {
|
||||||
if (sl) {
|
|
||||||
|
|
||||||
baked_light=NULL; //can't mix
|
SampledLight *sl = sampled_light_owner.get(e->instance->sampled_light);
|
||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER,true);
|
if (sl) {
|
||||||
glActiveTexture(GL_TEXTURE0+max_texture_units-3);
|
|
||||||
glBindTexture(GL_TEXTURE_2D,sl->texture); //bind the texture
|
|
||||||
sampled_light_dp_multiplier=sl->multiplier;
|
|
||||||
bind_dp_sampler=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!additive && baked_light) {
|
|
||||||
|
|
||||||
if (baked_light->mode==VS::BAKED_LIGHT_OCTREE && baked_light->octree_texture.is_valid() && e->instance->baked_light_octree_xform) {
|
|
||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE,true);
|
|
||||||
bind_baked_light_octree=true;
|
|
||||||
if (prev_baked_light!=baked_light) {
|
|
||||||
Texture *tex=texture_owner.get(baked_light->octree_texture);
|
|
||||||
if (tex) {
|
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0+max_texture_units-3);
|
|
||||||
glBindTexture(tex->target,tex->tex_id); //bind the texture
|
|
||||||
}
|
|
||||||
if (baked_light->light_texture.is_valid()) {
|
|
||||||
Texture *texl=texture_owner.get(baked_light->light_texture);
|
|
||||||
if (texl) {
|
|
||||||
glActiveTexture(GL_TEXTURE0+max_texture_units-4);
|
|
||||||
glBindTexture(texl->target,texl->tex_id); //bind the light texture
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
baked_light = NULL; //can't mix
|
||||||
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_DP_SAMPLER, true);
|
||||||
|
glActiveTexture(GL_TEXTURE0 + max_texture_units - 3);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, sl->texture); //bind the texture
|
||||||
|
sampled_light_dp_multiplier = sl->multiplier;
|
||||||
|
bind_dp_sampler = true;
|
||||||
}
|
}
|
||||||
} else if (baked_light->mode==VS::BAKED_LIGHT_LIGHTMAPS) {
|
}
|
||||||
|
|
||||||
|
|
||||||
int lightmap_idx = e->instance->baked_lightmap_id;
|
if (!additive && baked_light) {
|
||||||
|
|
||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,false);
|
if (baked_light->mode == VS::BAKED_LIGHT_OCTREE && baked_light->octree_texture.is_valid() && e->instance->baked_light_octree_xform) {
|
||||||
bind_baked_lightmap=false;
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_OCTREE, true);
|
||||||
|
bind_baked_light_octree = true;
|
||||||
|
if (prev_baked_light != baked_light) {
|
||||||
if (baked_light->lightmaps.has(lightmap_idx)) {
|
Texture *tex = texture_owner.get(baked_light->octree_texture);
|
||||||
|
|
||||||
|
|
||||||
RID texid = baked_light->lightmaps[lightmap_idx];
|
|
||||||
|
|
||||||
if (prev_baked_light!=baked_light || texid!=prev_baked_light_texture) {
|
|
||||||
|
|
||||||
|
|
||||||
Texture *tex = texture_owner.get(texid);
|
|
||||||
if (tex) {
|
if (tex) {
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0+max_texture_units-3);
|
glActiveTexture(GL_TEXTURE0 + max_texture_units - 3);
|
||||||
glBindTexture(tex->target,tex->tex_id); //bind the texture
|
glBindTexture(tex->target, tex->tex_id); //bind the texture
|
||||||
|
}
|
||||||
|
if (baked_light->light_texture.is_valid()) {
|
||||||
|
Texture *texl = texture_owner.get(baked_light->light_texture);
|
||||||
|
if (texl) {
|
||||||
|
glActiveTexture(GL_TEXTURE0 + max_texture_units - 4);
|
||||||
|
glBindTexture(texl->target, texl->tex_id); //bind the light texture
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prev_baked_light_texture=texid;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (baked_light->mode == VS::BAKED_LIGHT_LIGHTMAPS) {
|
||||||
|
|
||||||
|
|
||||||
|
int lightmap_idx = e->instance->baked_lightmap_id;
|
||||||
|
|
||||||
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP, false);
|
||||||
|
bind_baked_lightmap = false;
|
||||||
|
|
||||||
|
|
||||||
|
if (baked_light->lightmaps.has(lightmap_idx)) {
|
||||||
|
|
||||||
|
|
||||||
|
RID texid = baked_light->lightmaps[lightmap_idx];
|
||||||
|
|
||||||
|
if (prev_baked_light != baked_light || texid != prev_baked_light_texture) {
|
||||||
|
|
||||||
|
|
||||||
|
Texture *tex = texture_owner.get(texid);
|
||||||
|
if (tex) {
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0 + max_texture_units - 3);
|
||||||
|
glBindTexture(tex->target, tex->tex_id); //bind the texture
|
||||||
|
}
|
||||||
|
|
||||||
|
prev_baked_light_texture = texid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (texid.is_valid()) {
|
||||||
|
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP, true);
|
||||||
|
bind_baked_lightmap = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (texid.is_valid()) {
|
|
||||||
material_shader.set_conditional(MaterialShaderGLES2::ENABLE_AMBIENT_LIGHTMAP,true);
|
|
||||||
bind_baked_lightmap=true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (int(prev_baked_light!=NULL) ^ int(baked_light!=NULL)) {
|
if (int(prev_baked_light != NULL) ^ int(baked_light != NULL)) {
|
||||||
rebind=true;
|
rebind = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10296,7 +10307,11 @@ void RasterizerGLES2::_update_framebuffer() {
|
|||||||
framebuffer.fbo=0;
|
framebuffer.fbo=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
framebuffer.active=use_fbo;
|
framebuffer.active=use_fbo;
|
||||||
|
#else
|
||||||
|
framebuffer.active=use_fbo && !low_memory_2d;
|
||||||
|
#endif
|
||||||
framebuffer.width=dwidth;
|
framebuffer.width=dwidth;
|
||||||
framebuffer.height=dheight;
|
framebuffer.height=dheight;
|
||||||
framebuffer.scale=scale;
|
framebuffer.scale=scale;
|
||||||
@ -11206,6 +11221,7 @@ RasterizerGLES2::RasterizerGLES2(bool p_compress_arrays,bool p_keep_ram_copy,boo
|
|||||||
use_fp16_fb=bool(GLOBAL_DEF("rasterizer/fp16_framebuffer",true));
|
use_fp16_fb=bool(GLOBAL_DEF("rasterizer/fp16_framebuffer",true));
|
||||||
use_shadow_mapping=true;
|
use_shadow_mapping=true;
|
||||||
use_fast_texture_filter=!bool(GLOBAL_DEF("rasterizer/trilinear_mipmap_filter",true));
|
use_fast_texture_filter=!bool(GLOBAL_DEF("rasterizer/trilinear_mipmap_filter",true));
|
||||||
|
low_memory_2d=bool(GLOBAL_DEF("rasterizer/low_memory_2d_mode",false));
|
||||||
skel_default.resize(1024*4);
|
skel_default.resize(1024*4);
|
||||||
for(int i=0;i<1024/3;i++) {
|
for(int i=0;i<1024/3;i++) {
|
||||||
|
|
||||||
|
@ -105,13 +105,13 @@ class RasterizerGLES2 : public Rasterizer {
|
|||||||
float anisotropic_level;
|
float anisotropic_level;
|
||||||
|
|
||||||
bool use_half_float;
|
bool use_half_float;
|
||||||
|
bool low_memory_2d;
|
||||||
|
|
||||||
Vector<float> skel_default;
|
Vector<float> skel_default;
|
||||||
|
|
||||||
Image _get_gl_image_and_format(const Image& p_image, Image::Format p_format, uint32_t p_flags,GLenum& r_gl_format,GLenum& r_gl_internal_format,int &r_gl_components,bool &r_has_alpha_cache,bool &r_compressed);
|
Image _get_gl_image_and_format(const Image& p_image, Image::Format p_format, uint32_t p_flags,GLenum& r_gl_format,GLenum& r_gl_internal_format,int &r_gl_components,bool &r_has_alpha_cache,bool &r_compressed);
|
||||||
|
|
||||||
class RenderTarget;
|
struct RenderTarget;
|
||||||
|
|
||||||
struct Texture {
|
struct Texture {
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ class RasterizerGLES2 : public Rasterizer {
|
|||||||
virtual ~GeometryOwner() {}
|
virtual ~GeometryOwner() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Mesh;
|
struct Mesh;
|
||||||
|
|
||||||
struct Surface : public Geometry {
|
struct Surface : public Geometry {
|
||||||
|
|
||||||
|
@ -154,6 +154,9 @@ String ShaderCompilerGLES2::dump_node_code(SL::Node *p_node,int p_level,bool p_a
|
|||||||
if (vnode->name==vname_vertex && p_assign_left) {
|
if (vnode->name==vname_vertex && p_assign_left) {
|
||||||
vertex_code_writes_vertex=true;
|
vertex_code_writes_vertex=true;
|
||||||
}
|
}
|
||||||
|
if (vnode->name == vname_position && p_assign_left) {
|
||||||
|
vertex_code_writes_position = true;
|
||||||
|
}
|
||||||
if (vnode->name==vname_color_interp) {
|
if (vnode->name==vname_color_interp) {
|
||||||
flags->use_color_interp=true;
|
flags->use_color_interp=true;
|
||||||
}
|
}
|
||||||
@ -663,6 +666,7 @@ Error ShaderCompilerGLES2::compile(const String& p_code, ShaderLanguage::ShaderT
|
|||||||
uses_texpixel_size=false;
|
uses_texpixel_size=false;
|
||||||
uses_worldvec=false;
|
uses_worldvec=false;
|
||||||
vertex_code_writes_vertex=false;
|
vertex_code_writes_vertex=false;
|
||||||
|
vertex_code_writes_position = false;
|
||||||
uses_shadow_color=false;
|
uses_shadow_color=false;
|
||||||
uniforms=r_uniforms;
|
uniforms=r_uniforms;
|
||||||
flags=&r_flags;
|
flags=&r_flags;
|
||||||
@ -694,6 +698,7 @@ Error ShaderCompilerGLES2::compile(const String& p_code, ShaderLanguage::ShaderT
|
|||||||
r_flags.uses_texscreen=uses_texscreen;
|
r_flags.uses_texscreen=uses_texscreen;
|
||||||
r_flags.uses_texpos=uses_texpos;
|
r_flags.uses_texpos=uses_texpos;
|
||||||
r_flags.vertex_code_writes_vertex=vertex_code_writes_vertex;
|
r_flags.vertex_code_writes_vertex=vertex_code_writes_vertex;
|
||||||
|
r_flags.vertex_code_writes_position=vertex_code_writes_position;
|
||||||
r_flags.uses_discard=uses_discard;
|
r_flags.uses_discard=uses_discard;
|
||||||
r_flags.uses_screen_uv=uses_screen_uv;
|
r_flags.uses_screen_uv=uses_screen_uv;
|
||||||
r_flags.uses_light=uses_light;
|
r_flags.uses_light=uses_light;
|
||||||
@ -782,127 +787,129 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() {
|
|||||||
replace_table["texscreen"]= "texscreen";
|
replace_table["texscreen"]= "texscreen";
|
||||||
replace_table["texpos"]= "texpos";
|
replace_table["texpos"]= "texpos";
|
||||||
|
|
||||||
mode_replace_table[0]["SRC_VERTEX"]="vertex_in.xyz";
|
|
||||||
mode_replace_table[0]["SRC_NORMAL"]="normal_in";
|
|
||||||
mode_replace_table[0]["SRC_TANGENT"]="tangent_in";
|
|
||||||
mode_replace_table[0]["SRC_BINORMALF"]="binormalf";
|
|
||||||
|
|
||||||
mode_replace_table[0]["VERTEX"]="vertex_interp";
|
|
||||||
mode_replace_table[0]["NORMAL"]="normal_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_VERTEX"] = "vertex_in.xyz";
|
||||||
mode_replace_table[0]["TANGENT"]="tangent_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_NORMAL"] = "normal_in";
|
||||||
mode_replace_table[0]["BINORMAL"]="binormal_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_TANGENT"]="tangent_in";
|
||||||
mode_replace_table[0]["UV"]="uv_interp.xy";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SRC_BINORMALF"]="binormalf";
|
||||||
mode_replace_table[0]["UV2"]="uv_interp.zw";
|
|
||||||
mode_replace_table[0]["COLOR"]="color_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POSITION"] = "gl_Position";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VERTEX"]="vertex_interp";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["NORMAL"]="normal_interp";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["TANGENT"]="tangent_interp";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["BINORMAL"]="binormal_interp";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["UV"]="uv_interp.xy";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["UV2"]="uv_interp.zw";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["COLOR"]="color_interp";
|
||||||
//@TODO convert to glsl stuff
|
//@TODO convert to glsl stuff
|
||||||
mode_replace_table[0]["SPEC_EXP"]="vertex_specular_exp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SPEC_EXP"]="vertex_specular_exp";
|
||||||
mode_replace_table[0]["WORLD_MATRIX"]="world_transform";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["WORLD_MATRIX"]="world_transform";
|
||||||
mode_replace_table[0]["INV_CAMERA_MATRIX"]="camera_inverse_transform";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["INV_CAMERA_MATRIX"]="camera_inverse_transform";
|
||||||
mode_replace_table[0]["PROJECTION_MATRIX"]="projection_transform";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["PROJECTION_MATRIX"]="projection_transform";
|
||||||
mode_replace_table[0]["MODELVIEW_MATRIX"]="modelview";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["MODELVIEW_MATRIX"]="modelview";
|
||||||
mode_replace_table[0]["POINT_SIZE"]="gl_PointSize";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["POINT_SIZE"]="gl_PointSize";
|
||||||
mode_replace_table[0]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[0]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["VAR2"]="var2_interp";
|
||||||
|
|
||||||
// mode_replace_table[0]["SCREEN_POS"]="SCREEN_POS";
|
// mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SCREEN_POS"]="SCREEN_POS";
|
||||||
// mode_replace_table[0]["SCREEN_SIZE"]="SCREEN_SIZE";
|
// mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["SCREEN_SIZE"]="SCREEN_SIZE";
|
||||||
mode_replace_table[0]["INSTANCE_ID"]="instance_id";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["INSTANCE_ID"]="instance_id";
|
||||||
mode_replace_table[0]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_VERTEX]["TIME"]="time";
|
||||||
|
|
||||||
mode_replace_table[1]["VERTEX"]="vertex";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VERTEX"]="vertex";
|
||||||
//mode_replace_table[1]["POSITION"]="IN_POSITION";
|
//mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POSITION"]="IN_POSITION";
|
||||||
mode_replace_table[1]["NORMAL"]="normal";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMAL"]="normal";
|
||||||
mode_replace_table[1]["TANGENT"]="tangent";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["TANGENT"]="tangent";
|
||||||
mode_replace_table[1]["POSITION"]="gl_Position";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POSITION"]="gl_Position";
|
||||||
mode_replace_table[1]["BINORMAL"]="binormal";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["BINORMAL"]="binormal";
|
||||||
mode_replace_table[1]["NORMALMAP"]="normalmap";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMALMAP"]="normalmap";
|
||||||
mode_replace_table[1]["NORMALMAP_DEPTH"]="normaldepth";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["NORMALMAP_DEPTH"]="normaldepth";
|
||||||
mode_replace_table[1]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[1]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR2"]="var2_interp";
|
||||||
mode_replace_table[1]["UV"]="uv";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["UV"]="uv";
|
||||||
mode_replace_table[1]["UV2"]="uv2";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["UV2"]="uv2";
|
||||||
mode_replace_table[1]["SCREEN_UV"]="screen_uv";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_UV"]="screen_uv";
|
||||||
mode_replace_table[1]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[1]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["VAR2"]="var2_interp";
|
||||||
mode_replace_table[1]["COLOR"]="color";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["COLOR"]="color";
|
||||||
mode_replace_table[1]["DIFFUSE"]="diffuse.rgb";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DIFFUSE"]="diffuse.rgb";
|
||||||
mode_replace_table[1]["DIFFUSE_ALPHA"]="diffuse";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DIFFUSE_ALPHA"]="diffuse";
|
||||||
mode_replace_table[1]["SPECULAR"]="specular";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SPECULAR"]="specular";
|
||||||
mode_replace_table[1]["EMISSION"]="emission";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["EMISSION"]="emission";
|
||||||
mode_replace_table[1]["SHADE_PARAM"]="shade_param";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SHADE_PARAM"]="shade_param";
|
||||||
mode_replace_table[1]["SPEC_EXP"]="specular_exp";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SPEC_EXP"]="specular_exp";
|
||||||
mode_replace_table[1]["GLOW"]="glow";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["GLOW"]="glow";
|
||||||
mode_replace_table[1]["DISCARD"]="discard_";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["DISCARD"]="discard_";
|
||||||
mode_replace_table[1]["POINT_COORD"]="gl_PointCoord";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["POINT_COORD"]="gl_PointCoord";
|
||||||
mode_replace_table[1]["INV_CAMERA_MATRIX"]="camera_inverse_transform";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["INV_CAMERA_MATRIX"]="camera_inverse_transform";
|
||||||
|
|
||||||
//mode_replace_table[1]["SCREEN_POS"]="SCREEN_POS";
|
//mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_POS"]="SCREEN_POS";
|
||||||
//mode_replace_table[1]["SCREEN_TEXEL_SIZE"]="SCREEN_TEXEL_SIZE";
|
//mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["SCREEN_TEXEL_SIZE"]="SCREEN_TEXEL_SIZE";
|
||||||
mode_replace_table[1]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_FRAGMENT]["TIME"]="time";
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["NORMAL"]="normal";
|
||||||
|
//mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["POSITION"]="IN_POSITION";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_DIR"]="light_dir";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_DIFFUSE"]="light_diffuse";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT_SPECULAR"]="light_specular";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["EYE_VEC"]="eye_vec";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["DIFFUSE"]="mdiffuse";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SPECULAR"]="specular";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SPECULAR_EXP"]="specular_exp";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADE_PARAM"]="shade_param";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["LIGHT"]="light";
|
||||||
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["POINT_COORD"]="gl_PointCoord";
|
||||||
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["TIME"]="time";
|
||||||
mode_replace_table[2]["NORMAL"]="normal";
|
|
||||||
//mode_replace_table[2]["POSITION"]="IN_POSITION";
|
|
||||||
mode_replace_table[2]["LIGHT_DIR"]="light_dir";
|
|
||||||
mode_replace_table[2]["LIGHT_DIFFUSE"]="light_diffuse";
|
|
||||||
mode_replace_table[2]["LIGHT_SPECULAR"]="light_specular";
|
|
||||||
mode_replace_table[2]["EYE_VEC"]="eye_vec";
|
|
||||||
mode_replace_table[2]["DIFFUSE"]="mdiffuse";
|
|
||||||
mode_replace_table[2]["SPECULAR"]="specular";
|
|
||||||
mode_replace_table[2]["SPECULAR_EXP"]="specular_exp";
|
|
||||||
mode_replace_table[2]["SHADE_PARAM"]="shade_param";
|
|
||||||
mode_replace_table[2]["LIGHT"]="light";
|
|
||||||
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADOW"]="shadow_color";
|
mode_replace_table[ShaderLanguage::SHADER_MATERIAL_LIGHT]["SHADOW"]="shadow_color";
|
||||||
mode_replace_table[2]["POINT_COORD"]="gl_PointCoord";
|
|
||||||
mode_replace_table[2]["TIME"]="time";
|
|
||||||
|
|
||||||
mode_replace_table[3]["SRC_VERTEX"]="src_vtx";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["SRC_VERTEX"]="src_vtx";
|
||||||
mode_replace_table[3]["VERTEX"]="outvec.xy";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VERTEX"]="outvec.xy";
|
||||||
mode_replace_table[3]["WORLD_VERTEX"]="outvec.xy";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["WORLD_VERTEX"]="outvec.xy";
|
||||||
mode_replace_table[3]["UV"]="uv_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["UV"]="uv_interp";
|
||||||
mode_replace_table[3]["COLOR"]="color_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["COLOR"]="color_interp";
|
||||||
mode_replace_table[3]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[3]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["VAR2"]="var2_interp";
|
||||||
mode_replace_table[3]["POINT_SIZE"]="gl_PointSize";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["POINT_SIZE"]="gl_PointSize";
|
||||||
mode_replace_table[3]["WORLD_MATRIX"]="modelview_matrix";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["WORLD_MATRIX"]="modelview_matrix";
|
||||||
mode_replace_table[3]["PROJECTION_MATRIX"]="projection_matrix";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["PROJECTION_MATRIX"]="projection_matrix";
|
||||||
mode_replace_table[3]["EXTRA_MATRIX"]="extra_matrix";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["EXTRA_MATRIX"]="extra_matrix";
|
||||||
mode_replace_table[3]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_VERTEX]["TIME"]="time";
|
||||||
|
|
||||||
mode_replace_table[4]["POSITION"]="gl_Position";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["POSITION"]="gl_Position";
|
||||||
mode_replace_table[4]["NORMAL"]="normal";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMAL"]="normal";
|
||||||
mode_replace_table[4]["NORMALMAP"]="normal_map";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMALMAP"]="normal_map";
|
||||||
mode_replace_table[4]["NORMALMAP_DEPTH"]="normal_depth";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["NORMALMAP_DEPTH"]="normal_depth";
|
||||||
mode_replace_table[4]["UV"]="uv_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["UV"]="uv_interp";
|
||||||
mode_replace_table[4]["SRC_COLOR"]="color_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["SRC_COLOR"]="color_interp";
|
||||||
mode_replace_table[4]["COLOR"]="color";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["COLOR"]="color";
|
||||||
mode_replace_table[4]["TEXTURE"]="texture";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TEXTURE"]="texture";
|
||||||
mode_replace_table[4]["TEXTURE_PIXEL_SIZE"]="texpixel_size";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TEXTURE_PIXEL_SIZE"]="texpixel_size";
|
||||||
mode_replace_table[4]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[4]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["VAR2"]="var2_interp";
|
||||||
mode_replace_table[4]["SCREEN_UV"]="screen_uv";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["SCREEN_UV"]="screen_uv";
|
||||||
mode_replace_table[4]["POINT_COORD"]="gl_PointCoord";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["POINT_COORD"]="gl_PointCoord";
|
||||||
mode_replace_table[4]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_FRAGMENT]["TIME"]="time";
|
||||||
|
|
||||||
mode_replace_table[5]["POSITION"]="gl_Position";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["POSITION"]="gl_Position";
|
||||||
mode_replace_table[5]["NORMAL"]="normal";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["NORMAL"]="normal";
|
||||||
mode_replace_table[5]["UV"]="uv_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["UV"]="uv_interp";
|
||||||
mode_replace_table[5]["COLOR"]="color";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["COLOR"]="color";
|
||||||
mode_replace_table[5]["TEXTURE"]="texture";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TEXTURE"]="texture";
|
||||||
mode_replace_table[5]["TEXTURE_PIXEL_SIZE"]="texpixel_size";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TEXTURE_PIXEL_SIZE"]="texpixel_size";
|
||||||
mode_replace_table[5]["VAR1"]="var1_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["VAR1"]="var1_interp";
|
||||||
mode_replace_table[5]["VAR2"]="var2_interp";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["VAR2"]="var2_interp";
|
||||||
mode_replace_table[5]["LIGHT_VEC"]="light_vec";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_VEC"]="light_vec";
|
||||||
mode_replace_table[5]["LIGHT_HEIGHT"]="light_height";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_HEIGHT"]="light_height";
|
||||||
mode_replace_table[5]["LIGHT_COLOR"]="light";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_COLOR"]="light";
|
||||||
mode_replace_table[5]["LIGHT_UV"]="light_uv";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT_UV"]="light_uv";
|
||||||
mode_replace_table[5]["LIGHT"]="light_out";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["LIGHT"]="light_out";
|
||||||
mode_replace_table[5]["SHADOW"]="shadow_color";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["SHADOW"]="shadow_color";
|
||||||
mode_replace_table[5]["SCREEN_UV"]="screen_uv";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["SCREEN_UV"]="screen_uv";
|
||||||
mode_replace_table[5]["POINT_COORD"]="gl_PointCoord";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["POINT_COORD"]="gl_PointCoord";
|
||||||
mode_replace_table[5]["TIME"]="time";
|
mode_replace_table[ShaderLanguage::SHADER_CANVAS_ITEM_LIGHT]["TIME"]="time";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -923,6 +930,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() {
|
|||||||
vname_var1_interp="VAR1";
|
vname_var1_interp="VAR1";
|
||||||
vname_var2_interp="VAR2";
|
vname_var2_interp="VAR2";
|
||||||
vname_vertex="VERTEX";
|
vname_vertex="VERTEX";
|
||||||
|
vname_position = "POSITION";
|
||||||
vname_light="LIGHT";
|
vname_light="LIGHT";
|
||||||
vname_time="TIME";
|
vname_time="TIME";
|
||||||
vname_normalmap="NORMALMAP";
|
vname_normalmap="NORMALMAP";
|
||||||
|
@ -34,7 +34,7 @@ class ShaderCompilerGLES2 {
|
|||||||
|
|
||||||
class Uniform;
|
class Uniform;
|
||||||
public:
|
public:
|
||||||
class Flags;
|
struct Flags;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
ShaderLanguage::ProgramNode *program_node;
|
ShaderLanguage::ProgramNode *program_node;
|
||||||
@ -55,6 +55,7 @@ private:
|
|||||||
bool uses_texpixel_size;
|
bool uses_texpixel_size;
|
||||||
bool uses_worldvec;
|
bool uses_worldvec;
|
||||||
bool vertex_code_writes_vertex;
|
bool vertex_code_writes_vertex;
|
||||||
|
bool vertex_code_writes_position;
|
||||||
bool uses_shadow_color;
|
bool uses_shadow_color;
|
||||||
|
|
||||||
bool sinh_used;
|
bool sinh_used;
|
||||||
@ -76,6 +77,7 @@ private:
|
|||||||
StringName vname_var1_interp;
|
StringName vname_var1_interp;
|
||||||
StringName vname_var2_interp;
|
StringName vname_var2_interp;
|
||||||
StringName vname_vertex;
|
StringName vname_vertex;
|
||||||
|
StringName vname_position;
|
||||||
StringName vname_light;
|
StringName vname_light;
|
||||||
StringName vname_time;
|
StringName vname_time;
|
||||||
StringName vname_normalmap;
|
StringName vname_normalmap;
|
||||||
@ -107,6 +109,7 @@ public:
|
|||||||
bool uses_texpos;
|
bool uses_texpos;
|
||||||
bool uses_normalmap;
|
bool uses_normalmap;
|
||||||
bool vertex_code_writes_vertex;
|
bool vertex_code_writes_vertex;
|
||||||
|
bool vertex_code_writes_position;
|
||||||
bool uses_discard;
|
bool uses_discard;
|
||||||
bool uses_screen_uv;
|
bool uses_screen_uv;
|
||||||
bool use_color_interp;
|
bool use_color_interp;
|
||||||
|
@ -6,5 +6,3 @@ if env['BUILDERS'].has_key('GLSL120GLES'):
|
|||||||
env.GLSL120GLES('canvas_shadow.glsl');
|
env.GLSL120GLES('canvas_shadow.glsl');
|
||||||
env.GLSL120GLES('blur.glsl');
|
env.GLSL120GLES('blur.glsl');
|
||||||
env.GLSL120GLES('copy.glsl');
|
env.GLSL120GLES('copy.glsl');
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,4 +10,3 @@ jpg_sources = [
|
|||||||
env.drivers_sources+=jpg_sources
|
env.drivers_sources+=jpg_sources
|
||||||
|
|
||||||
#env.add_source_files(env.drivers_sources, jpg_sources)
|
#env.add_source_files(env.drivers_sources, jpg_sources)
|
||||||
|
|
||||||
|
@ -19,4 +19,3 @@ env.add_source_files(env.drivers_sources,"*.cpp")
|
|||||||
#env.add_source_files(env.drivers_sources, mpc_sources)
|
#env.add_source_files(env.drivers_sources, mpc_sources)
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
@ -3,4 +3,3 @@ Export('env');
|
|||||||
|
|
||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
#env.add_source_files(env.drivers_sources,"*.c")
|
#env.add_source_files(env.drivers_sources,"*.c")
|
||||||
|
|
||||||
|
@ -18,47 +18,42 @@ More details about its use is documented in `nrex.hpp`
|
|||||||
|
|
||||||
Currently supported features:
|
Currently supported features:
|
||||||
* Capturing `()` and non-capturing `(?:)` groups
|
* Capturing `()` and non-capturing `(?:)` groups
|
||||||
* Any character `.`
|
* Any character `.` (includes newlines)
|
||||||
* Shorthand caracter classes `\w\W\s\S\d\D`
|
* Shorthand caracter classes `\w\W\s\S\d\D`
|
||||||
* User-defined character classes such as `[A-Za-z]`
|
* POSIX character classes such as `[[:alnum:]]`
|
||||||
|
* Bracket expressions such as `[A-Za-z]`
|
||||||
* Simple quantifiers `?`, `*` and `+`
|
* Simple quantifiers `?`, `*` and `+`
|
||||||
* Range quantifiers `{0,1}`
|
* Range quantifiers `{0,1}`
|
||||||
* Lazy (non-greedy) quantifiers `*?`
|
* Lazy (non-greedy) quantifiers `*?`
|
||||||
* Begining `^` and end `$` anchors
|
* Begining `^` and end `$` anchors
|
||||||
|
* Word boundaries `\b`
|
||||||
* Alternation `|`
|
* Alternation `|`
|
||||||
* Backreferences `\1` to `\99`
|
* ASCII `\xFF` code points
|
||||||
|
|
||||||
To do list:
|
|
||||||
* Unicode `\uFFFF` code points
|
* Unicode `\uFFFF` code points
|
||||||
|
* Positive `(?=)` and negative `(?!)` lookahead
|
||||||
|
* Positive `(?<=)` and negative `(?<!)` lookbehind (fixed length and no alternations)
|
||||||
|
* Backreferences `\1` to `\9` (with option to expand to `\99`)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright (c) 2015, Zher Huei Lee
|
Copyright (c) 2015, Zher Huei Lee
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
This software is provided 'as-is', without any express or implied
|
||||||
modification, are permitted provided that the following conditions are
|
warranty. In no event will the authors be held liable for any damages
|
||||||
met:
|
arising from the use of this software.
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
notice, this list of conditions and the following disclaimer.
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
notice, this list of conditions and the following disclaimer in the
|
claim that you wrote the original software. If you use this software
|
||||||
documentation and/or other materials provided with the distribution.
|
in a product, an acknowledgment in the product documentation would
|
||||||
|
be appreciated but is not required.
|
||||||
|
|
||||||
3. Neither the name of the copyright holder nor the names of its
|
2. Altered source versions must be plainly marked as such, and must not
|
||||||
contributors may be used to endorse or promote products derived from
|
be misrepresented as being the original software.
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
3. This notice may not be removed or altered from any source
|
||||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
distribution.
|
||||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
|
||||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
Import('env')
|
Import('env')
|
||||||
|
|
||||||
sources = [
|
sources = [
|
||||||
@ -6,4 +5,3 @@ sources = [
|
|||||||
'regex.cpp',
|
'regex.cpp',
|
||||||
]
|
]
|
||||||
env.add_source_files(env.drivers_sources, sources)
|
env.add_source_files(env.drivers_sources, sources)
|
||||||
|
|
||||||
|
@ -79,7 +79,8 @@ class nrex
|
|||||||
* This is used to provide the array size of the captures needed for
|
* This is used to provide the array size of the captures needed for
|
||||||
* nrex::match() to work. The size is actually the number of capture
|
* nrex::match() to work. The size is actually the number of capture
|
||||||
* groups + one for the matching of the entire pattern. The result is
|
* groups + one for the matching of the entire pattern. The result is
|
||||||
* always capped at 100.
|
* always capped at 10 or 100, depending on the extend option given in
|
||||||
|
* nrex::compile() (default 10).
|
||||||
*
|
*
|
||||||
* \return The number of captures
|
* \return The number of captures
|
||||||
*/
|
*/
|
||||||
@ -95,10 +96,13 @@ class nrex
|
|||||||
* runtime error nrex_compile_error if it encounters a problem when
|
* runtime error nrex_compile_error if it encounters a problem when
|
||||||
* parsing the pattern.
|
* parsing the pattern.
|
||||||
*
|
*
|
||||||
* \param The regex pattern
|
* \param pattern The regex pattern
|
||||||
|
* \param extended If true, raises the limit on number of capture
|
||||||
|
* groups and back-references to 99. Otherwise limited
|
||||||
|
* to 9. Defaults to false.
|
||||||
* \return True if the pattern was succesfully compiled
|
* \return True if the pattern was succesfully compiled
|
||||||
*/
|
*/
|
||||||
bool compile(const nrex_char* pattern);
|
bool compile(const nrex_char* pattern, bool extended = false);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Uses the pattern to search through the provided string
|
* \brief Uses the pattern to search through the provided string
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
void RegEx::_bind_methods() {
|
void RegEx::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("compile","pattern"),&RegEx::compile);
|
ObjectTypeDB::bind_method(_MD("compile","pattern", "expanded"),&RegEx::compile, DEFVAL(true));
|
||||||
ObjectTypeDB::bind_method(_MD("find","text","start","end"),&RegEx::find, DEFVAL(0), DEFVAL(-1));
|
ObjectTypeDB::bind_method(_MD("find","text","start","end"),&RegEx::find, DEFVAL(0), DEFVAL(-1));
|
||||||
ObjectTypeDB::bind_method(_MD("clear"),&RegEx::clear);
|
ObjectTypeDB::bind_method(_MD("clear"),&RegEx::clear);
|
||||||
ObjectTypeDB::bind_method(_MD("is_valid"),&RegEx::is_valid);
|
ObjectTypeDB::bind_method(_MD("is_valid"),&RegEx::is_valid);
|
||||||
@ -55,6 +55,8 @@ bool RegEx::is_valid() const {
|
|||||||
|
|
||||||
int RegEx::get_capture_count() const {
|
int RegEx::get_capture_count() const {
|
||||||
|
|
||||||
|
ERR_FAIL_COND_V( !exp.valid(), 0 );
|
||||||
|
|
||||||
return exp.capture_size();
|
return exp.capture_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,11 +68,11 @@ String RegEx::get_capture(int capture) const {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Error RegEx::compile(const String& p_pattern) {
|
Error RegEx::compile(const String& p_pattern, bool expanded) {
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
exp.compile(p_pattern.c_str());
|
exp.compile(p_pattern.c_str(), expanded);
|
||||||
|
|
||||||
ERR_FAIL_COND_V( !exp.valid(), FAILED );
|
ERR_FAIL_COND_V( !exp.valid(), FAILED );
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ public:
|
|||||||
bool is_valid() const;
|
bool is_valid() const;
|
||||||
int get_capture_count() const;
|
int get_capture_count() const;
|
||||||
String get_capture(int capture) const;
|
String get_capture(int capture) const;
|
||||||
Error compile(const String& p_pattern);
|
Error compile(const String& p_pattern, bool expanded = false);
|
||||||
int find(const String& p_text, int p_start = 0, int p_end = -1) const;
|
int find(const String& p_text, int p_start = 0, int p_end = -1) const;
|
||||||
|
|
||||||
RegEx();
|
RegEx();
|
||||||
|
@ -8,4 +8,3 @@ ogg_sources = [
|
|||||||
|
|
||||||
if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes":
|
if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes":
|
||||||
env.drivers_sources+=ogg_sources
|
env.drivers_sources+=ogg_sources
|
||||||
|
|
||||||
|
@ -4,5 +4,3 @@ env.add_source_files(env.drivers_sources,"*.cpp")
|
|||||||
env.add_source_files(env.drivers_sources,"*.c")
|
env.add_source_files(env.drivers_sources,"*.c")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,12 +7,16 @@
|
|||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
#define HAVE_INTTYPES_H 1
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 ))
|
||||||
|
|
||||||
/* Define to 1 if you have the `lrint' function. */
|
/* Define to 1 if you have the `lrint' function. */
|
||||||
#define HAVE_LRINT 1
|
#define HAVE_LRINT 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `lrintf' function. */
|
/* Define to 1 if you have the `lrintf' function. */
|
||||||
#define HAVE_LRINTF 1
|
#define HAVE_LRINTF 1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
#define HAVE_MEMORY_H 1
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
@ -109,7 +113,11 @@
|
|||||||
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
/* Define to the equivalent of the C99 'restrict' keyword, or to
|
||||||
nothing if this is not supported. Do not define if restrict is
|
nothing if this is not supported. Do not define if restrict is
|
||||||
supported directly. */
|
supported directly. */
|
||||||
|
#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 ))
|
||||||
#define restrict __restrict
|
#define restrict __restrict
|
||||||
|
#else
|
||||||
|
#undef restrict
|
||||||
|
#endif
|
||||||
/* Work around a bug in Sun C++: it does not support _Restrict or
|
/* Work around a bug in Sun C++: it does not support _Restrict or
|
||||||
__restrict__, even though the corresponding Sun C compiler ends up with
|
__restrict__, even though the corresponding Sun C compiler ends up with
|
||||||
"#define restrict _Restrict" or "#define restrict __restrict__" in the
|
"#define restrict _Restrict" or "#define restrict __restrict__" in the
|
||||||
|
@ -38,4 +38,3 @@ env.drivers_sources+=png_sources
|
|||||||
#env.add_source_files(env.drivers_sources, png_sources)
|
#env.add_source_files(env.drivers_sources, png_sources)
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
@ -21,4 +21,3 @@ if (env["tools"]=="yes"):
|
|||||||
#env.add_source_files(env.drivers_sources, squish_sources)
|
#env.add_source_files(env.drivers_sources, squish_sources)
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
Import('env')
|
Import('env')
|
||||||
|
|
||||||
sources = [
|
sources = [
|
||||||
@ -34,5 +33,3 @@ sources = [
|
|||||||
|
|
||||||
if env['use_theoraplayer_binary'] != "yes":
|
if env['use_theoraplayer_binary'] != "yes":
|
||||||
env.drivers_sources += sources
|
env.drivers_sources += sources
|
||||||
|
|
||||||
|
|
||||||
|
@ -1611,28 +1611,35 @@ static void oc_filter_hedge(unsigned char *_dst,int _dst_ystride,
|
|||||||
int sum1;
|
int sum1;
|
||||||
int bx;
|
int bx;
|
||||||
int by;
|
int by;
|
||||||
|
int _rlimit1;
|
||||||
|
int _rlimit2;
|
||||||
rdst=_dst;
|
rdst=_dst;
|
||||||
rsrc=_src;
|
rsrc=_src;
|
||||||
for(bx=0;bx<8;bx++){
|
for(bx=0;bx<8;++bx){
|
||||||
cdst=rdst;
|
cdst=rdst;
|
||||||
csrc=rsrc;
|
csrc=rsrc;
|
||||||
for(by=0;by<10;by++){
|
_rlimit1 = _rlimit2 = _flimit;
|
||||||
|
for(by=0;by<10;++by){
|
||||||
r[by]=*csrc;
|
r[by]=*csrc;
|
||||||
csrc+=_src_ystride;
|
csrc+=_src_ystride;
|
||||||
}
|
}
|
||||||
sum0=sum1=0;
|
sum0=sum1=0;
|
||||||
for(by=0;by<4;by++){
|
for(by=0;by<4;++by){
|
||||||
sum0+=abs(r[by+1]-r[by]);
|
int sumed = abs(r[by+1]-r[by]);
|
||||||
sum1+=abs(r[by+5]-r[by+6]);
|
sum0+=sumed;
|
||||||
|
_rlimit1-=sumed;
|
||||||
|
sumed = abs(r[by+5]-r[by+6]);
|
||||||
|
sum1+=sumed;
|
||||||
|
_rlimit2-=sumed;
|
||||||
}
|
}
|
||||||
*_variance0+=OC_MINI(255,sum0);
|
*_variance0+=OC_MINI(255,sum0);
|
||||||
*_variance1+=OC_MINI(255,sum1);
|
*_variance1+=OC_MINI(255,sum1);
|
||||||
if(sum0<_flimit&&sum1<_flimit&&r[5]-r[4]<_qstep&&r[4]-r[5]<_qstep){
|
if(_rlimit1&&_rlimit2&&!(r[5]-r[4]-_qstep)&&!(r[4]-r[5]-_qstep)){
|
||||||
*cdst=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
|
*cdst=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
|
||||||
cdst+=_dst_ystride;
|
cdst+=_dst_ystride;
|
||||||
*cdst=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
|
*cdst=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
|
||||||
cdst+=_dst_ystride;
|
cdst+=_dst_ystride;
|
||||||
for(by=0;by<4;by++){
|
for(by=0;by<4;++by){
|
||||||
*cdst=(unsigned char)(r[by]+r[by+1]+r[by+2]+r[by+3]*2+
|
*cdst=(unsigned char)(r[by]+r[by+1]+r[by+2]+r[by+3]*2+
|
||||||
r[by+4]+r[by+5]+r[by+6]+4>>3);
|
r[by+4]+r[by+5]+r[by+6]+4>>3);
|
||||||
cdst+=_dst_ystride;
|
cdst+=_dst_ystride;
|
||||||
@ -1642,13 +1649,13 @@ static void oc_filter_hedge(unsigned char *_dst,int _dst_ystride,
|
|||||||
*cdst=(unsigned char)(r[5]+r[6]+r[7]+r[8]*2+r[9]*3+4>>3);
|
*cdst=(unsigned char)(r[5]+r[6]+r[7]+r[8]*2+r[9]*3+4>>3);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
for(by=1;by<=8;by++){
|
for(by=1;by<=8;++by){
|
||||||
*cdst=(unsigned char)r[by];
|
*cdst=(unsigned char)r[by];
|
||||||
cdst+=_dst_ystride;
|
cdst+=_dst_ystride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rdst++;
|
++rdst;
|
||||||
rsrc++;
|
++rsrc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1663,19 +1670,26 @@ static void oc_filter_vedge(unsigned char *_dst,int _dst_ystride,
|
|||||||
int sum1;
|
int sum1;
|
||||||
int bx;
|
int bx;
|
||||||
int by;
|
int by;
|
||||||
|
int _rlimit1;
|
||||||
|
int _rlimit2;
|
||||||
cdst=_dst;
|
cdst=_dst;
|
||||||
for(by=0;by<8;by++){
|
for(by=0;by<8;++by){
|
||||||
rsrc=cdst-1;
|
rsrc=cdst-1;
|
||||||
rdst=cdst;
|
rdst=cdst;
|
||||||
for(bx=0;bx<10;bx++)r[bx]=*rsrc++;
|
for(bx=0;bx<10;++bx)r[bx]=*rsrc++;
|
||||||
sum0=sum1=0;
|
sum0=sum1=0;
|
||||||
for(bx=0;bx<4;bx++){
|
_rlimit1 = _rlimit2 = _flimit;
|
||||||
sum0+=abs(r[bx+1]-r[bx]);
|
for(bx=0;bx<4;++bx){
|
||||||
sum1+=abs(r[bx+5]-r[bx+6]);
|
int sumed = abs(r[bx+1]-r[bx]);
|
||||||
|
sum0+=sumed;
|
||||||
|
_rlimit1-=sumed;
|
||||||
|
sumed = abs(r[bx+5]-r[bx+6]);
|
||||||
|
sum1+=sumed;
|
||||||
|
_rlimit2-=sumed;
|
||||||
}
|
}
|
||||||
_variances[0]+=OC_MINI(255,sum0);
|
_variances[0]+=OC_MINI(255,sum0);
|
||||||
_variances[1]+=OC_MINI(255,sum1);
|
_variances[1]+=OC_MINI(255,sum1);
|
||||||
if(sum0<_flimit&&sum1<_flimit&&r[5]-r[4]<_qstep&&r[4]-r[5]<_qstep){
|
if(_rlimit1&&_rlimit2&&!(r[5]-r[4]-_qstep)&&!(r[4]-r[5]-_qstep)){
|
||||||
*rdst++=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
|
*rdst++=(unsigned char)(r[0]*3+r[1]*2+r[2]+r[3]+r[4]+4>>3);
|
||||||
*rdst++=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
|
*rdst++=(unsigned char)(r[0]*2+r[1]+r[2]*2+r[3]+r[4]+r[5]+4>>3);
|
||||||
for(bx=0;bx<4;bx++){
|
for(bx=0;bx<4;bx++){
|
||||||
|
@ -243,7 +243,9 @@ void VideoStreamPlaybackTheora::set_file(const String& p_file) {
|
|||||||
/* Only interested in Vorbis/Theora streams */
|
/* Only interested in Vorbis/Theora streams */
|
||||||
int stateflag = 0;
|
int stateflag = 0;
|
||||||
|
|
||||||
int audio_track_skip=audio_track;
|
int audio_track_skip=audio_track;
|
||||||
|
|
||||||
|
|
||||||
while(!stateflag){
|
while(!stateflag){
|
||||||
int ret=buffer_data();
|
int ret=buffer_data();
|
||||||
if(ret==0)break;
|
if(ret==0)break;
|
||||||
@ -269,15 +271,21 @@ void VideoStreamPlaybackTheora::set_file(const String& p_file) {
|
|||||||
copymem(&to,&test,sizeof(test));
|
copymem(&to,&test,sizeof(test));
|
||||||
theora_p=1;
|
theora_p=1;
|
||||||
}else if(!vorbis_p && vorbis_synthesis_headerin(&vi,&vc,&op)>=0){
|
}else if(!vorbis_p && vorbis_synthesis_headerin(&vi,&vc,&op)>=0){
|
||||||
|
|
||||||
|
|
||||||
/* it is vorbis */
|
/* it is vorbis */
|
||||||
if (audio_track_skip) {
|
if (audio_track_skip) {
|
||||||
vorbis_info_clear(&vi);
|
vorbis_info_clear(&vi);
|
||||||
vorbis_comment_clear(&vc);
|
vorbis_comment_clear(&vc);
|
||||||
audio_track_skip--;
|
ogg_stream_clear(&test);
|
||||||
} else {
|
vorbis_info_init(&vi);
|
||||||
copymem(&vo,&test,sizeof(test));
|
vorbis_comment_init(&vc);
|
||||||
vorbis_p=1;
|
|
||||||
}
|
audio_track_skip--;
|
||||||
|
} else {
|
||||||
|
copymem(&vo,&test,sizeof(test));
|
||||||
|
vorbis_p=1;
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
/* whatever it is, we don't care about it */
|
/* whatever it is, we don't care about it */
|
||||||
ogg_stream_clear(&test);
|
ogg_stream_clear(&test);
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,15 +65,25 @@ void OS_Unix::print_error(const char* p_function,const char* p_file,int p_line,c
|
|||||||
if (!_print_error_enabled)
|
if (!_print_error_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (p_rationale && p_rationale[0]) {
|
const char* err_details;
|
||||||
|
if (p_rationale && p_rationale[0])
|
||||||
print("\E[1;31;40mERROR: %s: \E[1;37;40m%s\n",p_function,p_rationale);
|
err_details=p_rationale;
|
||||||
print("\E[0;31;40m At: %s:%i.\E[0;0;37m\n",p_file,p_line);
|
else
|
||||||
|
err_details=p_code;
|
||||||
} else {
|
|
||||||
print("\E[1;31;40mERROR: %s: \E[1;37;40m%s\n",p_function,p_code);
|
|
||||||
print("\E[0;31;40m At: %s:%i.\E[0;0;37m\n",p_file,p_line);
|
|
||||||
|
|
||||||
|
switch(p_type) {
|
||||||
|
case ERR_ERROR:
|
||||||
|
print("\E[1;31mERROR: %s: \E[0m\E[1m%s\n",p_function,err_details);
|
||||||
|
print("\E[0;31m At: %s:%i.\E[0m\n",p_file,p_line);
|
||||||
|
break;
|
||||||
|
case ERR_WARNING:
|
||||||
|
print("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n",p_function,err_details);
|
||||||
|
print("\E[0;33m At: %s:%i.\E[0m\n",p_file,p_line);
|
||||||
|
break;
|
||||||
|
case ERR_SCRIPT:
|
||||||
|
print("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n",p_function,err_details);
|
||||||
|
print("\E[0;35m At: %s:%i.\E[0m\n",p_file,p_line);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
Import('env')
|
Import('env')
|
||||||
|
|
||||||
sources = [
|
sources = [
|
||||||
@ -37,4 +36,3 @@ env.drivers_sources += sources
|
|||||||
|
|
||||||
if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes":
|
if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes":
|
||||||
env.drivers_sources += sources_lib
|
env.drivers_sources += sources_lib
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
virtual void stop();
|
virtual void stop();
|
||||||
virtual bool is_playing() const;
|
virtual bool is_playing() const;
|
||||||
|
|
||||||
virtual void set_loop_restart_time(float p_time) { loop_restart_time=0; }
|
virtual void set_loop_restart_time(float p_time) { loop_restart_time=p_time; }
|
||||||
|
|
||||||
virtual void set_paused(bool p_paused);
|
virtual void set_paused(bool p_paused);
|
||||||
virtual bool is_paused(bool p_paused) const;
|
virtual bool is_paused(bool p_paused) const;
|
||||||
|
@ -61,4 +61,3 @@ env.drivers_sources+=webp_sources
|
|||||||
#env.add_source_files(env.drivers_sources, webp_sources)
|
#env.add_source_files(env.drivers_sources, webp_sources)
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.drivers_sources,"*.cpp")
|
env.add_source_files(env.drivers_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,5 +8,3 @@ Export('env')
|
|||||||
lib = env.Library("main",env.main_sources)
|
lib = env.Library("main",env.main_sources)
|
||||||
|
|
||||||
env.Prepend(LIBS=[lib])
|
env.Prepend(LIBS=[lib])
|
||||||
|
|
||||||
|
|
||||||
|
@ -797,7 +797,6 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
|
|||||||
|
|
||||||
print_help(execpath);
|
print_help(execpath);
|
||||||
|
|
||||||
|
|
||||||
if (performance)
|
if (performance)
|
||||||
memdelete(performance);
|
memdelete(performance);
|
||||||
if (input_map)
|
if (input_map)
|
||||||
@ -812,6 +811,8 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
|
|||||||
memdelete(packed_data);
|
memdelete(packed_data);
|
||||||
if (file_access_network_client)
|
if (file_access_network_client)
|
||||||
memdelete(file_access_network_client);
|
memdelete(file_access_network_client);
|
||||||
|
if(path_remap)
|
||||||
|
memdelete(path_remap);
|
||||||
|
|
||||||
// Note 1: *zip_packed_data live into *packed_data
|
// Note 1: *zip_packed_data live into *packed_data
|
||||||
// Note 2: PackedData::~PackedData destroy this.
|
// Note 2: PackedData::~PackedData destroy this.
|
||||||
@ -820,7 +821,7 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
|
|||||||
// memdelete( zip_packed_data );
|
// memdelete( zip_packed_data );
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
unregister_core_driver_types();
|
||||||
unregister_core_types();
|
unregister_core_types();
|
||||||
|
|
||||||
OS::get_singleton()->_cmdline.clear();
|
OS::get_singleton()->_cmdline.clear();
|
||||||
@ -1007,8 +1008,21 @@ bool Main::start() {
|
|||||||
bool export_debug=false;
|
bool export_debug=false;
|
||||||
List<String> args = OS::get_singleton()->get_cmdline_args();
|
List<String> args = OS::get_singleton()->get_cmdline_args();
|
||||||
for (int i=0;i<args.size();i++) {
|
for (int i=0;i<args.size();i++) {
|
||||||
|
//parameters that do not have an argument to the right
|
||||||
|
if (args[i]=="-nodocbase") {
|
||||||
|
doc_base=false;
|
||||||
|
} else if (args[i]=="-noquit") {
|
||||||
|
noquit=true;
|
||||||
|
} else if (args[i]=="-convert_old") {
|
||||||
|
convert_old=true;
|
||||||
|
} else if (args[i]=="-editor" || args[i]=="-e") {
|
||||||
|
editor=true;
|
||||||
|
} else if (args[i].length() && args[i][0] != '-' && game_path == "") {
|
||||||
|
game_path=args[i];
|
||||||
|
}
|
||||||
//parameters that have an argument to the right
|
//parameters that have an argument to the right
|
||||||
if (i < (args.size()-1)) {
|
else if (i < (args.size()-1)) {
|
||||||
|
bool parsed_pair=true;
|
||||||
if (args[i]=="-doctool") {
|
if (args[i]=="-doctool") {
|
||||||
doc_tool=args[i+1];
|
doc_tool=args[i+1];
|
||||||
} else if (args[i]=="-script" || args[i]=="-s") {
|
} else if (args[i]=="-script" || args[i]=="-s") {
|
||||||
@ -1037,20 +1051,13 @@ bool Main::start() {
|
|||||||
} else if (args[i]=="-dumpstrings") {
|
} else if (args[i]=="-dumpstrings") {
|
||||||
editor=true; //needs editor
|
editor=true; //needs editor
|
||||||
dumpstrings=args[i+1];
|
dumpstrings=args[i+1];
|
||||||
|
} else {
|
||||||
|
// The parameter does not match anything known, don't skip the next argument
|
||||||
|
parsed_pair=false;
|
||||||
|
}
|
||||||
|
if (parsed_pair) {
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
//parameters that do not have an argument to the right
|
|
||||||
if (args[i]=="-nodocbase") {
|
|
||||||
doc_base=false;
|
|
||||||
} else if (args[i]=="-noquit") {
|
|
||||||
noquit=true;
|
|
||||||
} else if (args[i]=="-convert_old") {
|
|
||||||
convert_old=true;
|
|
||||||
} else if (args[i]=="-editor" || args[i]=="-e") {
|
|
||||||
editor=true;
|
|
||||||
} else if (args[i].length() && args[i][0] != '-' && game_path == "") {
|
|
||||||
game_path=args[i];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,5 +19,3 @@ for x in env.module_list:
|
|||||||
lib = env_modules.Library("modules",env.modules_sources)
|
lib = env_modules.Library("modules",env.modules_sources)
|
||||||
|
|
||||||
env.Prepend(LIBS=[lib])
|
env.Prepend(LIBS=[lib])
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,5 +3,3 @@ Import('env')
|
|||||||
env.add_source_files(env.modules_sources,"*.cpp")
|
env.add_source_files(env.modules_sources,"*.cpp")
|
||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1940,9 +1940,15 @@ void GDParser::_parse_extends(ClassNode *p_class) {
|
|||||||
|
|
||||||
p_class->extends_used=true;
|
p_class->extends_used=true;
|
||||||
|
|
||||||
//see if inheritance happens from a file
|
|
||||||
tokenizer->advance();
|
tokenizer->advance();
|
||||||
|
|
||||||
|
if (tokenizer->get_token()==GDTokenizer::TK_BUILT_IN_TYPE && tokenizer->get_token_type()==Variant::OBJECT) {
|
||||||
|
p_class->extends_class.push_back(Variant::get_type_name(Variant::OBJECT));
|
||||||
|
tokenizer->advance();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// see if inheritance happens from a file
|
||||||
if (tokenizer->get_token()==GDTokenizer::TK_CONSTANT) {
|
if (tokenizer->get_token()==GDTokenizer::TK_CONSTANT) {
|
||||||
|
|
||||||
Variant constant = tokenizer->get_token_constant();
|
Variant constant = tokenizer->get_token_constant();
|
||||||
|
@ -276,7 +276,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct NewLineNode : public Node {
|
struct NewLineNode : public Node {
|
||||||
int line;
|
|
||||||
NewLineNode() { type=TYPE_NEWLINE; }
|
NewLineNode() { type=TYPE_NEWLINE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
Import('env')
|
Import('env')
|
||||||
|
|
||||||
env.add_source_files(env.modules_sources,"*.cpp")
|
env.add_source_files(env.modules_sources,"*.cpp")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1124,6 +1124,10 @@ Error EditorExportPlatformAndroid::export_project(const String& p_path, bool p_d
|
|||||||
skip=true;
|
skip=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (file.begins_with("META-INF") && _signed) {
|
||||||
|
skip=true;
|
||||||
|
}
|
||||||
|
|
||||||
print_line("ADDING: "+file);
|
print_line("ADDING: "+file);
|
||||||
|
|
||||||
if (!skip) {
|
if (!skip) {
|
||||||
|
16
platform/android/java/res/values-fa/strings.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="godot_project_name_string">godot-project-name-fa</string>
|
||||||
|
<string name="testuf8">سلام</string>
|
||||||
|
<string name="text_paused_cellular">آیا می خواهید بر روی اتصال داده همراه دانلود را شروع کنید؟ بر اساس نوع سطح داده شما این ممکن است برای شما هزینه مالی داشته باشد.</string>
|
||||||
|
<string name="text_paused_cellular_2">اگر نمی خواهید بر روی اتصال داده همراه دانلود را شروع کنید ، دانلود به صورت خودکار در زمان دسترسی به وای-فای شروع می شود.</string>
|
||||||
|
<string name="text_button_resume_cellular">ادامه دانلود</string>
|
||||||
|
<string name="text_button_wifi_settings">تنظیمات وای-فای</string>
|
||||||
|
<string name="text_verifying_download">درحال تایید دانلود</string>
|
||||||
|
<string name="text_validation_complete">تایید فایل XAPK تکمیل شد. برای خروج تایید کنید.</string>
|
||||||
|
<string name="text_validation_failed">اعتبارسنجی فایل XAPK ناموق.</string>
|
||||||
|
<string name="text_button_pause">توقف دانلود</string>
|
||||||
|
<string name="text_button_resume">ادامه دانلود</string>
|
||||||
|
<string name="text_button_cancel">انصراف</string>
|
||||||
|
<string name="text_button_cancel_verify">انصراف از تایید شدن</string>
|
||||||
|
</resources>
|
@ -27,7 +27,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
activity.getPaymentsManager().requestPurchase(sku, transactionId);
|
activity.getPaymentsManager().requestPurchase(sku, transactionId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
/* public string requestPurchasedTicket(){
|
/* public string requestPurchasedTicket(){
|
||||||
activity.getPaymentsManager()
|
activity.getPaymentsManager()
|
||||||
@ -42,7 +42,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
|
|
||||||
public GodotPaymentV3(Activity p_activity) {
|
public GodotPaymentV3(Activity p_activity) {
|
||||||
|
|
||||||
registerClass("GodotPayments", new String[] {"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases"});
|
registerClass("GodotPayments", new String[] {"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume"});
|
||||||
activity=(Godot) p_activity;
|
activity=(Godot) p_activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,6 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
activity.getPaymentsManager().consumeUnconsumedPurchases();
|
activity.getPaymentsManager().consumeUnconsumedPurchases();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String signature;
|
private String signature;
|
||||||
@ -63,25 +62,26 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void callbackSuccess(String ticket, String signature){
|
public void callbackSuccess(String ticket, String signature, String sku){
|
||||||
// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success");
|
// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success");
|
||||||
GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature});
|
GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature, sku});
|
||||||
// Log.d(this.getClass().getName(), "POST-Send callback to purchase success");
|
// Log.d(this.getClass().getName(), "POST-Send callback to purchase success");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku){
|
public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku){
|
||||||
// Log.d(this.getClass().getName(), "PRE-Send callback to consume success");
|
// Log.d(this.getClass().getName(), "PRE-Send callback to consume success");
|
||||||
GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku});
|
Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > "+ticket+","+signature+","+sku);
|
||||||
// Log.d(this.getClass().getName(), "POST-Send callback to consume success");
|
GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku});
|
||||||
|
// Log.d(this.getClass().getName(), "POST-Send callback to consume success");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void callbackSuccessNoUnconsumedPurchases(){
|
public void callbackSuccessNoUnconsumedPurchases(){
|
||||||
GodotLib.calldeferred(purchaseCallbackId, "no_validation_required", new Object[]{});
|
GodotLib.calldeferred(purchaseCallbackId, "no_validation_required", new Object[]{});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void callbackFail(){
|
public void callbackFail(){
|
||||||
GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{});
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{});
|
||||||
// GodotLib.callobject(purchaseCallbackId, "purchase_fail", new Object[]{});
|
// GodotLib.callobject(purchaseCallbackId, "purchase_fail", new Object[]{});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void callbackCancel(){
|
public void callbackCancel(){
|
||||||
@ -89,6 +89,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
// GodotLib.callobject(purchaseCallbackId, "purchase_cancel", new Object[]{});
|
// GodotLib.callobject(purchaseCallbackId, "purchase_cancel", new Object[]{});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void callbackAlreadyOwned(String sku){
|
||||||
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[]{sku});
|
||||||
|
}
|
||||||
|
|
||||||
public int getPurchaseCallbackId() {
|
public int getPurchaseCallbackId() {
|
||||||
return purchaseCallbackId;
|
return purchaseCallbackId;
|
||||||
}
|
}
|
||||||
@ -97,8 +101,6 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
this.purchaseCallbackId = purchaseCallbackId;
|
this.purchaseCallbackId = purchaseCallbackId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public String getPurchaseValidationUrlPrefix(){
|
public String getPurchaseValidationUrlPrefix(){
|
||||||
return this.purchaseValidationUrlPrefix ;
|
return this.purchaseValidationUrlPrefix ;
|
||||||
}
|
}
|
||||||
@ -107,12 +109,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
this.purchaseValidationUrlPrefix = url;
|
this.purchaseValidationUrlPrefix = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getAccessToken() {
|
public String getAccessToken() {
|
||||||
return accessToken;
|
return accessToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setAccessToken(String accessToken) {
|
public void setAccessToken(String accessToken) {
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
}
|
}
|
||||||
@ -125,4 +125,30 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|||||||
return this.transactionId;
|
return this.transactionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// request purchased items are not consumed
|
||||||
|
public void requestPurchased(){
|
||||||
|
activity.getPaymentsManager().setBaseSingleton(this);
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
activity.getPaymentsManager().requestPurchased();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// callback for requestPurchased()
|
||||||
|
public void callbackPurchased(String receipt, String signature, String sku){
|
||||||
|
GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[]{receipt, signature, sku});
|
||||||
|
}
|
||||||
|
|
||||||
|
// consume item automatically after purchase. default is true.
|
||||||
|
public void setAutoConsume(boolean autoConsume){
|
||||||
|
activity.getPaymentsManager().setAutoConsume(autoConsume);
|
||||||
|
}
|
||||||
|
|
||||||
|
// consume a specific item
|
||||||
|
public void consume(String sku){
|
||||||
|
activity.getPaymentsManager().consume(sku);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,10 +25,8 @@ import com.android.vending.billing.IInAppBillingService;
|
|||||||
public class PaymentsManager {
|
public class PaymentsManager {
|
||||||
|
|
||||||
public static final int BILLING_RESPONSE_RESULT_OK = 0;
|
public static final int BILLING_RESPONSE_RESULT_OK = 0;
|
||||||
|
|
||||||
|
|
||||||
public static final int REQUEST_CODE_FOR_PURCHASE = 0x1001;
|
public static final int REQUEST_CODE_FOR_PURCHASE = 0x1001;
|
||||||
|
private static boolean auto_consume = true;
|
||||||
|
|
||||||
private Activity activity;
|
private Activity activity;
|
||||||
IInAppBillingService mService;
|
IInAppBillingService mService;
|
||||||
@ -69,13 +67,12 @@ public class PaymentsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceConnected(ComponentName name,
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
IBinder service) {
|
mService = IInAppBillingService.Stub.asInterface(service);
|
||||||
mService = IInAppBillingService.Stub.asInterface(service);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public void requestPurchase(String sku, String transactionId){
|
public void requestPurchase(final String sku, String transactionId){
|
||||||
new PurchaseTask(mService, Godot.getInstance()) {
|
new PurchaseTask(mService, Godot.getInstance()) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,6 +85,12 @@ public class PaymentsManager {
|
|||||||
protected void canceled() {
|
protected void canceled() {
|
||||||
godotPaymentV3.callbackCancel();
|
godotPaymentV3.callbackCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void alreadyOwned() {
|
||||||
|
godotPaymentV3.callbackAlreadyOwned(sku);
|
||||||
|
}
|
||||||
|
|
||||||
}.purchase(sku, transactionId);
|
}.purchase(sku, transactionId);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -114,26 +117,82 @@ public class PaymentsManager {
|
|||||||
}.consumeItAll();
|
}.consumeItAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void requestPurchased(){
|
||||||
|
try{
|
||||||
|
PaymentsCache pc = new PaymentsCache(Godot.getInstance());
|
||||||
|
|
||||||
|
// Log.d("godot", "requestPurchased for " + activity.getPackageName());
|
||||||
|
Bundle bundle = mService.getPurchases(3, activity.getPackageName(), "inapp",null);
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (String key : bundle.keySet()) {
|
||||||
|
Object value = bundle.get(key);
|
||||||
|
Log.d("godot", String.format("%s %s (%s)", key, value.toString(), value.getClass().getName()));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (bundle.getInt("RESPONSE_CODE") == 0){
|
||||||
|
|
||||||
|
final ArrayList<String> myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
|
||||||
|
final ArrayList<String> mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST");
|
||||||
|
|
||||||
|
|
||||||
|
if (myPurchases == null || myPurchases.size() == 0){
|
||||||
|
// Log.d("godot", "No purchases!");
|
||||||
|
godotPaymentV3.callbackPurchased("", "", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log.d("godot", "# products are purchased:" + myPurchases.size());
|
||||||
|
for (int i=0;i<myPurchases.size();i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
try{
|
||||||
|
String receipt = myPurchases.get(i);
|
||||||
|
JSONObject inappPurchaseData = new JSONObject(receipt);
|
||||||
|
String sku = inappPurchaseData.getString("productId");
|
||||||
|
String token = inappPurchaseData.getString("purchaseToken");
|
||||||
|
String signature = mySignatures.get(i);
|
||||||
|
// Log.d("godot", "purchased item:" + token + "\n" + receipt);
|
||||||
|
|
||||||
|
pc.setConsumableValue("ticket_signautre", sku, signature);
|
||||||
|
pc.setConsumableValue("ticket", sku, receipt);
|
||||||
|
pc.setConsumableFlag("block", sku, true);
|
||||||
|
pc.setConsumableValue("token", sku, token);
|
||||||
|
|
||||||
|
godotPaymentV3.callbackPurchased(receipt, signature, sku);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
Log.d("godot", "Error requesting purchased products:" + e.getClass().getName() + ":" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void processPurchaseResponse(int resultCode, Intent data) {
|
public void processPurchaseResponse(int resultCode, Intent data) {
|
||||||
new HandlePurchaseTask(activity){
|
new HandlePurchaseTask(activity){
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void success(final String sku, final String signature, final String ticket) {
|
protected void success(final String sku, final String signature, final String ticket) {
|
||||||
godotPaymentV3.callbackSuccess(ticket, signature);
|
godotPaymentV3.callbackSuccess(ticket, signature, sku);
|
||||||
new ConsumeTask(mService, activity) {
|
|
||||||
|
|
||||||
@Override
|
if (auto_consume){
|
||||||
protected void success(String ticket) {
|
new ConsumeTask(mService, activity) {
|
||||||
// godotPaymentV3.callbackSuccess("");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void error(String message) {
|
protected void success(String ticket) {
|
||||||
godotPaymentV3.callbackFail();
|
// godotPaymentV3.callbackSuccess("");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
@Override
|
||||||
}.consume(sku);
|
protected void error(String message) {
|
||||||
|
godotPaymentV3.callbackFail();
|
||||||
|
|
||||||
|
}
|
||||||
|
}.consume(sku);
|
||||||
|
}
|
||||||
|
|
||||||
// godotPaymentV3.callbackSuccess(new PaymentsCache(activity).getConsumableValue("ticket", sku),signature);
|
// godotPaymentV3.callbackSuccess(new PaymentsCache(activity).getConsumableValue("ticket", sku),signature);
|
||||||
// godotPaymentV3.callbackSuccess(ticket);
|
// godotPaymentV3.callbackSuccess(ticket);
|
||||||
@ -151,7 +210,7 @@ public class PaymentsManager {
|
|||||||
godotPaymentV3.callbackCancel();
|
godotPaymentV3.callbackCancel();
|
||||||
|
|
||||||
}
|
}
|
||||||
}.handlePurchaseRequest(resultCode, data);
|
}.handlePurchaseRequest(resultCode, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void validatePurchase(String purchaseToken, final String sku){
|
public void validatePurchase(String purchaseToken, final String sku){
|
||||||
@ -165,7 +224,7 @@ public class PaymentsManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void success(String ticket) {
|
protected void success(String ticket) {
|
||||||
godotPaymentV3.callbackSuccess(ticket, null);
|
godotPaymentV3.callbackSuccess(ticket, null, sku);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,11 +251,31 @@ public class PaymentsManager {
|
|||||||
}.validatePurchase(sku);
|
}.validatePurchase(sku);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAutoConsume(boolean autoConsume){
|
||||||
|
auto_consume = autoConsume;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void consume(final String sku){
|
||||||
|
new ConsumeTask(mService, activity) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void success(String ticket) {
|
||||||
|
godotPaymentV3.callbackSuccessProductMassConsumed(ticket, "", sku);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void error(String message) {
|
||||||
|
godotPaymentV3.callbackFail();
|
||||||
|
|
||||||
|
}
|
||||||
|
}.consume(sku);
|
||||||
|
}
|
||||||
|
|
||||||
private GodotPaymentV3 godotPaymentV3;
|
private GodotPaymentV3 godotPaymentV3;
|
||||||
|
|
||||||
public void setBaseSingleton(GodotPaymentV3 godotPaymentV3) {
|
public void setBaseSingleton(GodotPaymentV3 godotPaymentV3) {
|
||||||
this.godotPaymentV3 = godotPaymentV3;
|
this.godotPaymentV3 = godotPaymentV3;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,11 @@ abstract public class PurchaseTask {
|
|||||||
// Log.d("XXX", "Buy intent response code: " + responseCode);
|
// Log.d("XXX", "Buy intent response code: " + responseCode);
|
||||||
if(responseCode == 1 || responseCode == 3 || responseCode == 4){
|
if(responseCode == 1 || responseCode == 3 || responseCode == 4){
|
||||||
canceled();
|
canceled();
|
||||||
return ;
|
return;
|
||||||
|
}
|
||||||
|
if(responseCode == 7){
|
||||||
|
alreadyOwned();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -92,6 +96,6 @@ abstract public class PurchaseTask {
|
|||||||
|
|
||||||
abstract protected void error(String message);
|
abstract protected void error(String message);
|
||||||
abstract protected void canceled();
|
abstract protected void canceled();
|
||||||
|
abstract protected void alreadyOwned();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,4 +19,3 @@ if env['bb10_lgles_override'] == "yes":
|
|||||||
|
|
||||||
prog = None
|
prog = None
|
||||||
prog = env_bps.Program('#bin/godot', bb10_lib)
|
prog = env_bps.Program('#bin/godot', bb10_lib)
|
||||||
|
|
||||||
|
@ -195,9 +195,10 @@ void OSBB10::finalize() {
|
|||||||
// memdelete(debugger_connection_console);
|
// memdelete(debugger_connection_console);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
memdelete(sample_manager);
|
||||||
|
|
||||||
audio_server->finish();
|
audio_server->finish();
|
||||||
memdelete(audio_server);
|
memdelete(audio_server);
|
||||||
memdelete(sample_manager);
|
|
||||||
|
|
||||||
visual_server->finish();
|
visual_server->finish();
|
||||||
memdelete(visual_server);
|
memdelete(visual_server);
|
||||||
|
@ -36,5 +36,3 @@ java -jar $ALCHEMY/usr/lib/asc2.jar -md -strict -optimize -AS3 \
|
|||||||
-import ../platform/flash/lib/libGL.abc \
|
-import ../platform/flash/lib/libGL.abc \
|
||||||
../platform/flash/Console.as
|
../platform/flash/Console.as
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,9 +137,10 @@ void OS_Haiku::finalize() {
|
|||||||
spatial_sound_2d_server->finish();
|
spatial_sound_2d_server->finish();
|
||||||
memdelete(spatial_sound_2d_server);
|
memdelete(spatial_sound_2d_server);
|
||||||
|
|
||||||
|
memdelete(sample_manager);
|
||||||
|
|
||||||
audio_server->finish();
|
audio_server->finish();
|
||||||
memdelete(audio_server);
|
memdelete(audio_server);
|
||||||
memdelete(sample_manager);
|
|
||||||
|
|
||||||
visual_server->finish();
|
visual_server->finish();
|
||||||
memdelete(visual_server);
|
memdelete(visual_server);
|
||||||
|