diff options
| author | Juan Linietsky <reduzio@gmail.com> | 2014-12-20 15:30:06 -0300 | 
|---|---|---|
| committer | Juan Linietsky <reduzio@gmail.com> | 2014-12-20 15:30:06 -0300 | 
| commit | a36a774897ae191ebb90ba803bac7f919e92bd6c (patch) | |
| tree | 38a60d8a92d9add2f9641f1c4047d29821aa278a | |
| parent | 7dbc19f32db7b63062e715381923c873bf18683e (diff) | |
Fixes
-=-=-=
-Added missing quaternion constructor
-code completion fixes
-winrt fixes
| -rw-r--r-- | core/bind/core_bind.cpp | 6 | ||||
| -rw-r--r-- | core/bind/core_bind.h | 2 | ||||
| -rw-r--r-- | core/math/math_funcs.h | 2 | ||||
| -rw-r--r-- | core/register_core_types.cpp | 1 | ||||
| -rw-r--r-- | core/variant_call.cpp | 6 | ||||
| -rw-r--r-- | drivers/png/pngpriv.h | 6 | ||||
| -rw-r--r-- | drivers/vorbis/os.h | 2 | ||||
| -rw-r--r-- | modules/gdscript/gd_editor.cpp | 65 | ||||
| -rw-r--r-- | modules/gdscript/gd_script.cpp | 1 | ||||
| -rw-r--r-- | platform/winrt/app.cpp | 25 | ||||
| -rw-r--r-- | platform/winrt/detect.py | 102 | ||||
| -rw-r--r-- | platform/winrt/gl_context_egl.cpp | 28 | ||||
| -rw-r--r-- | platform/winrt/gl_context_egl.h | 1 | ||||
| -rw-r--r-- | platform/winrt/include/EGL/eglext.h | 21 | ||||
| -rw-r--r-- | platform/winrt/include/EGL/eglplatform.h | 4 | ||||
| -rw-r--r-- | platform/winrt/include/GLSLANG/ShaderLang.h | 216 | ||||
| -rw-r--r-- | platform/winrt/include/GLSLANG/ShaderVars.h | 93 | ||||
| -rw-r--r-- | platform/winrt/os_winrt.cpp | 9 | ||||
| -rw-r--r-- | platform/winrt/os_winrt.h | 1 | ||||
| -rw-r--r-- | scene/2d/collision_polygon_2d.cpp | 22 | ||||
| -rw-r--r-- | scene/2d/collision_polygon_2d.h | 4 | ||||
| -rw-r--r-- | scene/2d/physics_body_2d.cpp | 5 | ||||
| -rw-r--r-- | scene/3d/physics_body.cpp | 7 | 
23 files changed, 396 insertions, 233 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index ef943b2f7a..cc07a48368 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -12,9 +12,9 @@ Ref<ResourceInteractiveLoader> _ResourceLoader::load_interactive(const String& p  	return ResourceLoader::load_interactive(p_path,p_type_hint);  } -RES _ResourceLoader::load(const String &p_path,const String& p_type_hint) { +RES _ResourceLoader::load(const String &p_path,const String& p_type_hint, bool p_no_cache) { -	RES ret =  ResourceLoader::load(p_path,p_type_hint); +	RES ret =  ResourceLoader::load(p_path,p_type_hint, p_no_cache);  	return ret;  } @@ -59,7 +59,7 @@ void _ResourceLoader::_bind_methods() {  	ObjectTypeDB::bind_method(_MD("load_interactive:ResourceInteractiveLoader","path","type_hint"),&_ResourceLoader::load_interactive,DEFVAL("")); -	ObjectTypeDB::bind_method(_MD("load:Resource","path","type_hint"),&_ResourceLoader::load,DEFVAL("")); +	ObjectTypeDB::bind_method(_MD("load:Resource","path","type_hint", "p_no_cache"),&_ResourceLoader::load,DEFVAL(""), DEFVAL(false));  	ObjectTypeDB::bind_method(_MD("get_recognized_extensions_for_type","type"),&_ResourceLoader::get_recognized_extensions_for_type);  	ObjectTypeDB::bind_method(_MD("set_abort_on_missing_resources","abort"),&_ResourceLoader::set_abort_on_missing_resources);  	ObjectTypeDB::bind_method(_MD("get_dependencies"),&_ResourceLoader::get_dependencies); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index a76b4aa81f..12a4ae86eb 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -21,7 +21,7 @@ public:  	static _ResourceLoader *get_singleton() { return singleton; }  	Ref<ResourceInteractiveLoader> load_interactive(const String& p_path,const String& p_type_hint=""); -	RES load(const String &p_path,const String& p_type_hint=""); +	RES load(const String &p_path,const String& p_type_hint="", bool p_no_cache = false);  	DVector<String> get_recognized_extensions_for_type(const String& p_type);  	void set_abort_on_missing_resources(bool p_abort);  	StringArray get_dependencies(const String& p_path); diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 28a8413325..6d43ed8e64 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -136,7 +136,7 @@ public:  		static int b; -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603 // windows 8? +#if (defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603) || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP // windows 8 phone?  		b = (int)((a>0.0f) ? (a + 0.5f):(a -0.5f));  #elif defined(_MSC_VER) && _MSC_VER < 1800 diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp index 2f16e31de6..4935136eeb 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -110,6 +110,7 @@ void register_core_types() {  	ObjectTypeDB::register_type<Reference>(); +	ObjectTypeDB::register_type<WeakRef>();  	ObjectTypeDB::register_type<ResourceImportMetadata>();  	ObjectTypeDB::register_type<Resource>();  	ObjectTypeDB::register_type<FuncRef>(); diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 93a9e6475f..3f2800494d 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -757,6 +757,11 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var  		r_ret=Quat(*p_args[0],*p_args[1],*p_args[2],*p_args[3]);  	} +    static void Quat_init2(Variant& r_ret,const Variant** p_args) { + +        r_ret=Quat(((Vector3)(*p_args[0])),((float)(*p_args[1]))); +    } +  	static void Color_init1(Variant& r_ret,const Variant** p_args) {  		r_ret=Color(*p_args[0],*p_args[1],*p_args[2],*p_args[3]); @@ -1509,6 +1514,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl  	_VariantCall::add_constructor(_VariantCall::Plane_init3,Variant::PLANE,"normal",Variant::VECTOR3,"d",Variant::REAL);  	_VariantCall::add_constructor(_VariantCall::Quat_init1,Variant::QUAT,"x",Variant::REAL,"y",Variant::REAL,"z",Variant::REAL,"w",Variant::REAL); +    _VariantCall::add_constructor(_VariantCall::Quat_init2,Variant::QUAT,"axis",Variant::VECTOR3,"angle",Variant::REAL);  	_VariantCall::add_constructor(_VariantCall::Color_init1,Variant::COLOR,"r",Variant::REAL,"g",Variant::REAL,"b",Variant::REAL,"a",Variant::REAL);  	_VariantCall::add_constructor(_VariantCall::Color_init2,Variant::COLOR,"r",Variant::REAL,"g",Variant::REAL,"b",Variant::REAL); diff --git a/drivers/png/pngpriv.h b/drivers/png/pngpriv.h index 67e486c577..56532f4eeb 100644 --- a/drivers/png/pngpriv.h +++ b/drivers/png/pngpriv.h @@ -341,7 +341,11 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp;  #  ifdef _WINDOWS_  /* Favor Windows over C runtime fns */  #    define CVT_PTR(ptr)         (ptr)  #    define CVT_PTR_NOCHECK(ptr) (ptr) -#    define png_strlen  lstrlenA +#    ifdef WINRT_ENABLED +#      define png_strlen  strlen +#    else +#      define png_strlen  lstrlenA +#    endif  #    define png_memcmp  memcmp  #    define png_memcpy  CopyMemory  #    define png_memset  memset diff --git a/drivers/vorbis/os.h b/drivers/vorbis/os.h index 276b4decc7..3df1d194e9 100644 --- a/drivers/vorbis/os.h +++ b/drivers/vorbis/os.h @@ -120,7 +120,7 @@ static inline int vorbis_ftoi(double f){  /* yes, double!  Otherwise,  /* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the   * 64 bit compiler */ -#if defined(_MSC_VER) && !defined(_WIN64) && !defined(_WIN32_WCE) +#if defined(_MSC_VER) && !defined(_WIN64) && !defined(_WIN32_WCE) && !defined(WINDOWSPHONE_ENABLED)  #  define VORBIS_FPU_CONTROL  typedef ogg_int16_t vorbis_fpu_control; diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp index 09f193706c..24a5a7e1fd 100644 --- a/modules/gdscript/gd_editor.cpp +++ b/modules/gdscript/gd_editor.cpp @@ -606,6 +606,16 @@ static bool _guess_expression_type(GDCompletionContext& context,const GDParser::  				if (base.type==Variant::OBJECT) { +					if (id.operator String()=="new" && base.value.get_type()==Variant::OBJECT) { +						Object *obj = base.value; +						if (obj && obj->cast_to<GDNativeClass>()) { +							GDNativeClass *gdnc = obj->cast_to<GDNativeClass>(); +							r_type.type=Variant::OBJECT; +							r_type.value=Variant(); +							r_type.obj_type=gdnc->get_name(); +							return true; +						} +					}  					if (ObjectTypeDB::has_method(base.obj_type,id)) { @@ -677,7 +687,8 @@ static bool _guess_expression_type(GDCompletionContext& context,const GDParser::  					v.get_method_list(&mi);  					for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) { -						if (E->get().name==id.operator String()) { +						if (!E->get().name.begins_with("_") && E->get().name==id.operator String()) { +  							MethodInfo mi = E->get();  							r_type.type=mi.return_val.type; @@ -934,7 +945,7 @@ static bool _guess_identifier_type(GDCompletionContext& context,int p_line,const  		block=block->parent_block;  	} -	//TODO guess identifier type of arguments (ONLY if this is a virtual function) +	//guess from argument if virtual  	if (context.function && context.function->name!=StringName()) {  		int argindex = -1; @@ -995,7 +1006,7 @@ static bool _guess_identifier_type(GDCompletionContext& context,int p_line,const  		}  	} -	if (context.function && !context.function->_static) { +	if (!(context.function && context.function->_static)) {  		for(int i=0;i<context._class->variables.size();i++) { @@ -1136,6 +1147,8 @@ static void _find_identifiers_in_class(GDCompletionContext& context,bool p_stati  				List<MethodInfo> methods;  				ObjectTypeDB::get_method_list(type,&methods);  				for(List<MethodInfo>::Element *E=methods.front();E;E=E->next()) { +					if (E->get().name.begins_with("_")) +						continue;  					if (E->get().arguments.size())  						result.insert(E->get().name+"(");  					else @@ -1196,7 +1209,7 @@ static void _find_identifiers(GDCompletionContext& context,int p_line,bool p_onl  } -static String _get_visual_datatype(const PropertyInfo& p_info) { +static String _get_visual_datatype(const PropertyInfo& p_info,bool p_isarg=true) {  	String n = p_info.name;  	int idx = n.find(":"); @@ -1206,8 +1219,12 @@ static String _get_visual_datatype(const PropertyInfo& p_info) {  	if (p_info.type==Variant::OBJECT && p_info.hint==PROPERTY_HINT_RESOURCE_TYPE)  		return p_info.hint_string; -	if (p_info.type==Variant::NIL) -		return "void"; +	if (p_info.type==Variant::NIL) { +		if (p_isarg) +			return "var"; +		else +			return "void"; +	}  	return Variant::get_type_name(p_info.type);  } @@ -1297,7 +1314,7 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St  		} -		arghint = _get_visual_datatype(m->get_argument_info(-1))+" "+p_method.operator String()+String("("); +		arghint = _get_visual_datatype(m->get_argument_info(-1),false)+" "+p_method.operator String()+String("(");  		for(int i=0;i<m->get_argument_count();i++) {  			if (i>0) @@ -1361,7 +1378,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No  		const GDParser::BuiltInFunctionNode *fn = static_cast<const GDParser::BuiltInFunctionNode*>(op->arguments[0]);  		MethodInfo mi = GDFunctions::get_info(fn->function); -		arghint = _get_visual_datatype(mi.return_val)+" "+GDFunctions::get_func_name(fn->function)+String("("); +		arghint = _get_visual_datatype(mi.return_val,false)+" "+GDFunctions::get_func_name(fn->function)+String("(");  		for(int i=0;i<mi.arguments.size();i++) {  			if (i>0)  				arghint+=", "; @@ -1674,7 +1691,6 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base  			isfunction=true;  		case GDParser::COMPLETION_INDEX: { -			print_line("index");  			const GDParser::Node *node = p.get_completion_node();  			if (node->type!=GDParser::Node::TYPE_OPERATOR)  				break; @@ -1686,6 +1702,32 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base  			if (_guess_expression_type(context,static_cast<const GDParser::OperatorNode *>(node)->arguments[0],p.get_completion_line(),t)) {  				if (t.type==Variant::OBJECT && t.obj_type!=StringName()) { + + +					if (t.value.get_type()) { +						Object *obj=t.value; +						if (obj) { +							GDScript *scr = obj->cast_to<GDScript>(); +							while (scr) { + +								if (!isfunction) { +									for (const Map<StringName,Variant>::Element *E=scr->get_constants().front();E;E=E->next()) { +										options.insert(E->key()); +									} +								} +								for (const Map<StringName,GDFunction>::Element *E=scr->get_member_functions().front();E;E=E->next()) { +									options.insert(E->key()); +								} + +								if (scr->get_base().is_valid()) +									scr=scr->get_base().ptr(); +								else +									scr=NULL; +							} +						} +					} + +  					if (!isfunction) {  						ObjectTypeDB::get_integer_constant_list(t.obj_type,r_options);  					} @@ -1693,6 +1735,9 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base  					ObjectTypeDB::get_method_list(t.obj_type,&mi);  					for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) { +						if (E->get().name.begins_with("_")) +							continue; +  						if (E->get().arguments.size())  							options.insert(E->get().name+"(");  						else @@ -1700,6 +1745,7 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base  					}  				} else { +  					if (t.value.get_type()==Variant::NIL) {  						Variant::CallError ce;  						t.value=Variant::construct(t.type,NULL,0,ce); @@ -1728,7 +1774,6 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base  			} -  		} break;  		case GDParser::COMPLETION_CALL_ARGUMENTS: { diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp index 97d97f1ef4..3f7a6b000f 100644 --- a/modules/gdscript/gd_script.cpp +++ b/modules/gdscript/gd_script.cpp @@ -1756,6 +1756,7 @@ bool GDScript::_update_exports() {  	return changed;  #endif +	return false;  }  void GDScript::update_exports() { diff --git a/platform/winrt/app.cpp b/platform/winrt/app.cpp index f7fe91188c..662229b04e 100644 --- a/platform/winrt/app.cpp +++ b/platform/winrt/app.cpp @@ -178,7 +178,7 @@ static Windows::Foundation::Point _get_pixel_position(CoreWindow^ window, Window  	// Compute coordinates normalized from 0..1.
  	// If the coordinates need to be sized to the SDL window,
  	// we'll do that after.
 -	#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
 +	#if 1 || WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
  	outputPosition.X = rawPosition.X / window->Bounds.Width;
  	outputPosition.Y = rawPosition.Y / window->Bounds.Height;
  	#else
 @@ -357,16 +357,29 @@ void App::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ ar      // On Windows Phone 8.1, the window size changes when the device is rotated.
      // The default framebuffer will not be automatically resized when this occurs.
      // It is therefore up to the app to handle rotation-specific logic in its rendering code.
 +	//os->screen_size_changed();
 +	UpdateWindowSize(args->Size);
  #endif
  }
  void App::UpdateWindowSize(Size size)
  {
 -	/*
 -    DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView();
 -    Size pixelSize(ConvertDipsToPixels(size.Width, currentDisplayInformation->LogicalDpi), ConvertDipsToPixels(size.Height, currentDisplayInformation->LogicalDpi));
 -    
 +	float dpi;
 +#if (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP)
 +	DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView();
 +	dpi = currentDisplayInformation->LogicalDpi;
 +#else if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
 +	dpi = DisplayProperties::LogicalDpi;
 +#endif
 +	Size pixelSize(ConvertDipsToPixels(size.Width, dpi), ConvertDipsToPixels(size.Height, dpi));
 +
      mWindowWidth = static_cast<GLsizei>(pixelSize.Width);
      mWindowHeight = static_cast<GLsizei>(pixelSize.Height);
 -	*/
 +
 +	OS::VideoMode vm;
 +	vm.width = mWindowWidth;
 +	vm.height = mWindowHeight;
 +	vm.fullscreen = true;
 +	vm.resizable = false;
 +	os->set_video_mode(vm);
  }
 diff --git a/platform/winrt/detect.py b/platform/winrt/detect.py index dd9d1877ec..d97d974a19 100644 --- a/platform/winrt/detect.py +++ b/platform/winrt/detect.py @@ -30,38 +30,99 @@ def get_flags():  def configure(env):
  	env.Append(CPPPATH=['#platform/winrt', '#platform/winrt/include'])
 +	arch = ""
 -	env.Append(LINKFLAGS=['/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', "kernel32.lib", '/MACHINE:X64', '/WINMD', '/APPCONTAINER', '/MANIFESTUAC:NO', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1'])
 +	if os.getenv('PLATFORM') == "ARM":
 -	env.Append(LIBPATH=['#platform/winrt/x64/lib'])
 +		# compiler commandline
 +		# debug:   /Yu"pch.h" /MP /GS     /analyze- /W3 /wd"4453" /wd"28204"     /Zc:wchar_t /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.WindowsPhone\" /I"Generated Files\" /I"ARM\Debug\"   /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.Shared\" /ZW:nostdlib /Zi /Gm- /Od /sdl /Fd"ARM\Debug\vc120.pdb"   /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE" /D "_DEBUG" /errorReport:prompt /WX- /Zc:forScope /RTC1 /ZW /Gd /Oy- /MDd    /Fa"ARM\Debug\"   /EHsc /nologo /Fo"ARM\Debug\"   /Fp"ARM\Debug\App2.WindowsPhone.pch"
 +		# release: /Yu"pch.h" /MP /GS /GL /analyze- /W3 /wd"4453" /wd"28204" /Gy /Zc:wchar_t /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.WindowsPhone\" /I"Generated Files\" /I"ARM\Release\" /I"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\App2\App2.Shared\" /ZW:nostdlib /Zi /Gm- /O2 /sdl /Fd"ARM\Release\vc120.pdb" /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE"             /errorReport:prompt /WX- /Zc:forScope       /ZW /Gd /Oy- /Oi /MD /Fa"ARM\Release\" /EHsc /nologo /Fo"ARM\Release\" /Fp"ARM\Release\App2.WindowsPhone.pch"
 +		# linker commandline
 +		# debug:   /OUT:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.exe"   /MANIFEST:NO       /NXCOMPAT /PDB:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.pdb"   /DYNAMICBASE "WindowsPhoneCore.lib" "RuntimeObject.lib" "PhoneAppModelHost.lib" /DEBUG /MACHINE:ARM /NODEFAULTLIB:"kernel32.lib" /NODEFAULTLIB:"ole32.lib" /WINMD /APPCONTAINER /INCREMENTAL /PGD:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.WindowsPhone.pgd"   /WINMDFILE:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Debug\App2.WindowsPhone\App2.winmd"   /SUBSYSTEM:WINDOWS /MANIFESTUAC:NO /ManifestFile:"ARM\Debug\App2.WindowsPhone.exe.intermediate.manifest"            /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
 +		# release: /OUT:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.exe" /MANIFEST:NO /LTCG /NXCOMPAT /PDB:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.pdb" /DYNAMICBASE "WindowsPhoneCore.lib" "RuntimeObject.lib" "PhoneAppModelHost.lib" /DEBUG /MACHINE:ARM /NODEFAULTLIB:"kernel32.lib" /NODEFAULTLIB:"ole32.lib" /WINMD /APPCONTAINER /OPT:REF     /PGD:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.WindowsPhone.pgd" /WINMDFILE:"C:\Users\ariel\Documents\Visual Studio 2013\Projects\App2\ARM\Release\App2.WindowsPhone\App2.winmd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:NO /ManifestFile:"ARM\Release\App2.WindowsPhone.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
 -	if (env["target"]=="release"):
 +		arch = "arm"
 -		env.Append(CCFLAGS=['/O2'])
 -		env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS'])
 -		env.Append(LINKFLAGS=['/ENTRY:mainCRTStartup'])
 +		env.Append(LINKFLAGS=['/INCREMENTAL:NO', '/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', "WindowsPhoneCore.lib", "RuntimeObject.lib", "PhoneAppModelHost.lib", "/DEBUG", "/MACHINE:ARM", '/NODEFAULTLIB:"kernel32.lib"', '/NODEFAULTLIB:"ole32.lib"', '/WINMD', '/APPCONTAINER', '/MANIFESTUAC:NO', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1'])
 +		env.Append(LIBPATH=['#platform/winrt/ARM/lib'])
 -	elif (env["target"]=="test"):
 +		env.Append(CCFLAGS=string.split('/MP /GS /wd"4453" /wd"28204" /analyze- /Zc:wchar_t /Zi /Gm- /Od /fp:precise /fp:precise /D "PSAPI_VERSION=2" /D "WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP" /DWINDOWSPHONE_ENABLED /D "_UITHREADCTXT_SUPPORT=0" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /RTC1 /Gd /EHsc /nologo'))
 +		env.Append(CXXFLAGS=string.split('/ZW'))
 -		env.Append(CCFLAGS=['/O2','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 -		env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 +		if (env["target"]=="release"):
 -	elif (env["target"]=="debug"):
 +			env.Append(CCFLAGS=['/O2'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS'])
 -		env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 -		env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 -		env.Append(LINKFLAGS=['/DEBUG', '/D_DEBUG'])
 +		elif (env["target"]=="test"):
 -	elif (env["target"]=="profile"):
 +			env.Append(CCFLAGS=['/O2','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 -		env.Append(CCFLAGS=['-g','-pg'])
 -		env.Append(LINKFLAGS=['-pg'])
 +		elif (env["target"]=="debug"):
 +			env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 +			env.Append(LINKFLAGS=['/DEBUG', '/D_DEBUG'])
 +
 +		elif (env["target"]=="profile"):
 +
 +			env.Append(CCFLAGS=['-g','-pg'])
 +			env.Append(LINKFLAGS=['-pg'])
 +
 +
 +		env['ENV'] = os.environ;
 +		# fix environment for windows phone 8.1
 +		env['ENV']['WINDOWSPHONEKITDIR'] = env['ENV']['WINDOWSPHONEKITDIR'].replace("8.0", "8.1") # wtf
 +		env['ENV']['INCLUDE'] = env['ENV']['INCLUDE'].replace("8.0", "8.1")
 +		env['ENV']['LIB'] = env['ENV']['LIB'].replace("8.0", "8.1")
 +		env['ENV']['PATH'] = env['ENV']['PATH'].replace("8.0", "8.1")
 +		env['ENV']['LIBPATH'] = env['ENV']['LIBPATH'].replace("8.0\\Windows Metadata", "8.1\\References\\CommonConfiguration\\Neutral")
 +
 +	else:
 +
 +		arch = "x64"
 +		env.Append(LINKFLAGS=['/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', "kernel32.lib", '/MACHINE:X64', '/WINMD', '/APPCONTAINER', '/MANIFESTUAC:NO', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1'])
 +
 +		env.Append(LIBPATH=['#platform/winrt/x64/lib'])
 +
 +
 +		if (env["target"]=="release"):
 +
 +			env.Append(CCFLAGS=['/O2'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS'])
 +			env.Append(LINKFLAGS=['/ENTRY:mainCRTStartup'])
 +
 +		elif (env["target"]=="test"):
 +
 +			env.Append(CCFLAGS=['/O2','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 +
 +		elif (env["target"]=="debug"):
 +
 +			env.Append(CCFLAGS=['/Zi','/DDEBUG_ENABLED','/DD3D_DEBUG_INFO'])
 +			env.Append(LINKFLAGS=['/SUBSYSTEM:CONSOLE'])
 +			env.Append(LINKFLAGS=['/DEBUG', '/D_DEBUG'])
 +
 +		elif (env["target"]=="profile"):
 +
 +			env.Append(CCFLAGS=['-g','-pg'])
 +			env.Append(LINKFLAGS=['-pg'])
 +
 +
 +		env.Append(CCFLAGS=string.split('/MP /GS /wd"4453" /wd"28204" /Zc:wchar_t /Gm- /Od /fp:precise /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /EHsc /nologo'))
 +		env.Append(CXXFLAGS=string.split('/ZW'))
 +		env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR']+'\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR']+'\\References\\CommonConfiguration\\Neutral'])
 +		env.Append(CCFLAGS=['/DWINAPI_FAMILY=WINAPI_FAMILY_APP', '/D_WIN32_WINNT=0x0603', '/DNTDDI_VERSION=0x06030000'])
 +
 +		env['ENV'] = os.environ;
 +
 +
 +	env["PROGSUFFIX"]="."+arch+env["PROGSUFFIX"]
 +	env["OBJSUFFIX"]="."+arch+env["OBJSUFFIX"]
 +	env["LIBSUFFIX"]="."+arch+env["LIBSUFFIX"]
 -	env.Append(CCFLAGS=string.split('/MP /GS /wd"4453" /wd"28204" /Zc:wchar_t /Gm- /Od /fp:precise /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /EHsc /nologo'))
 -	env.Append(CXXFLAGS=string.split('/ZW'))
 -	env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR']+'\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR']+'\\References\\CommonConfiguration\\Neutral'])
  	#env.Append(CCFLAGS=['/Gd','/GR','/nologo', '/EHsc'])
  	#env.Append(CXXFLAGS=['/TP', '/ZW'])
 @@ -69,7 +130,6 @@ def configure(env):  	##env.Append(CCFLAGS=['/I'+os.getenv("WindowsSdkDir")+"/Include"])
  	env.Append(CCFLAGS=['/DWINRT_ENABLED'])
  	env.Append(CCFLAGS=['/DWINDOWS_ENABLED'])
 -	env.Append(CCFLAGS=['/DWINAPI_FAMILY=WINAPI_FAMILY_APP', '/D_WIN32_WINNT=0x0603', '/DNTDDI_VERSION=0x06030000'])
  	env.Append(CCFLAGS=['/DRTAUDIO_ENABLED'])
  	#env.Append(CCFLAGS=['/DWIN32'])
  	env.Append(CCFLAGS=['/DTYPED_METHOD_BIND'])
 @@ -92,5 +152,5 @@ def configure(env):  	env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } )
  	env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
 -	env['ENV'] = os.environ;
 +#/c/Program Files (x86)/Windows Phone Kits/8.1/lib/ARM/WindowsPhoneCore.lib
 diff --git a/platform/winrt/gl_context_egl.cpp b/platform/winrt/gl_context_egl.cpp index ca592c5d19..fd9fbe406f 100644 --- a/platform/winrt/gl_context_egl.cpp +++ b/platform/winrt/gl_context_egl.cpp @@ -1,5 +1,7 @@  #include "gl_context_egl.h" +#include "EGL/eglext.h" +  using namespace Platform;  void ContextEGL::release_current() { @@ -22,6 +24,14 @@ int ContextEGL::get_window_height() {  	return height;  }; +void ContextEGL::reset() { + +	cleanup(); + +	window = CoreWindow::GetForCurrentThread(); +	initialize(); +}; +  void ContextEGL::swap_buffers() {  	if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE) @@ -63,7 +73,23 @@ Error ContextEGL::initialize() {  	try { -		display = eglGetDisplay(EGL_DEFAULT_DISPLAY); +		const EGLint displayAttributes[] = +		{ +			EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, +			EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, 9, +			EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, 3, +			EGL_NONE, +		}; + +		PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT")); + +		if (!eglGetPlatformDisplayEXT) +		{ +			throw Exception::CreateException(E_FAIL, L"Failed to get function eglGetPlatformDisplayEXT"); +		} + +		display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttributes); +  		if (display == EGL_NO_DISPLAY)  		{  			throw Exception::CreateException(E_FAIL, L"Failed to get default EGL display"); diff --git a/platform/winrt/gl_context_egl.h b/platform/winrt/gl_context_egl.h index 56bf654ee5..ca3760e723 100644 --- a/platform/winrt/gl_context_egl.h +++ b/platform/winrt/gl_context_egl.h @@ -32,6 +32,7 @@ public:  	virtual void swap_buffers();  	virtual Error initialize(); +	void reset();  	void cleanup(); diff --git a/platform/winrt/include/EGL/eglext.h b/platform/winrt/include/EGL/eglext.h index 9828628e75..459ecf4a3d 100644 --- a/platform/winrt/include/EGL/eglext.h +++ b/platform/winrt/include/EGL/eglext.h @@ -432,31 +432,38 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu  #define EGL_ANGLE_direct3d_display 1
  #define EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2)
  #define EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3)
 -#define EGL_D3D11_FL9_3_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-4)
  #endif /* EGL_ANGLE_direct3d_display */
  #ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
  #define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
  #endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
 +#ifndef EGL_ANGLE_surface_d3d_render_to_back_buffer
 +#define EGL_ANGLE_surface_d3d_render_to_back_buffer 1
 +#define EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER 0x320B
 +#define EGL_ANGLE_SURFACE_RENDER_TO_BACK_BUFFER 0x320C
 +#endif /* EGL_ANGLE_surface_d3d_render_to_back_buffer */
 +
  #ifndef EGL_ANGLE_platform_angle
  #define EGL_ANGLE_platform_angle 1
  #define EGL_PLATFORM_ANGLE_ANGLE          0x3201
  #define EGL_PLATFORM_ANGLE_TYPE_ANGLE     0x3202
 -#define EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3203
 +#define EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3203
 +#define EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3204
 +#define EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3205
  #endif /* EGL_ANGLE_platform_angle */
  #ifndef EGL_ANGLE_platform_angle_d3d
  #define EGL_ANGLE_platform_angle_d3d 1
 -#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3204
 -#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3205
 -#define EGL_PLATFORM_ANGLE_TYPE_D3D11_WARP_ANGLE 0x3206
 +#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3206
 +#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3207
 +#define EGL_PLATFORM_ANGLE_USE_WARP_ANGLE 0x3208
  #endif /* EGL_ANGLE_platform_angle_d3d */
  #ifndef EGL_ANGLE_platform_angle_opengl
  #define EGL_ANGLE_platform_angle_opengl 1
 -#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3207
 -#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x3208
 +#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3209
 +#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320A
  #endif /* EGL_ANGLE_platform_angle_opengl */
  #ifndef EGL_ARM_pixmap_multisample_discard
 diff --git a/platform/winrt/include/EGL/eglplatform.h b/platform/winrt/include/EGL/eglplatform.h index d2e30bddbe..b0e88f94d4 100644 --- a/platform/winrt/include/EGL/eglplatform.h +++ b/platform/winrt/include/EGL/eglplatform.h @@ -76,12 +76,12 @@  typedef HDC     EGLNativeDisplayType;
  typedef HBITMAP EGLNativePixmapType;
 -#if defined(WINAPI_FAMILY) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 +#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) /* Windows Store */
  #include <inspectable.h>
  typedef IInspectable* EGLNativeWindowType;
  #else
  typedef HWND    EGLNativeWindowType;
 -#endif // defined(WINAPI_FAMILY) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 +#endif
  #elif defined(__WINSCW__) || defined(__SYMBIAN32__)  /* Symbian */
 diff --git a/platform/winrt/include/GLSLANG/ShaderLang.h b/platform/winrt/include/GLSLANG/ShaderLang.h index 86bf221c90..d925b88f24 100644 --- a/platform/winrt/include/GLSLANG/ShaderLang.h +++ b/platform/winrt/include/GLSLANG/ShaderLang.h @@ -27,6 +27,10 @@  #include "KHR/khrplatform.h"
 +#include <map>
 +#include <string>
 +#include <vector>
 +
  //
  // This is the platform independent interface between an OGL driver
  // and the shading language compiler.
 @@ -39,20 +43,20 @@ typedef unsigned int GLenum;  }
  // Must be included after GLenum proxy typedef
 +// Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h
  #include "ShaderVars.h"
 -#ifdef __cplusplus
 -extern "C" {
 -#endif
 -
  // Version number for shader translation API.
  // It is incremented every time the API changes.
 -#define ANGLE_SH_VERSION 129
 +#define ANGLE_SH_VERSION 132
  typedef enum {
    SH_GLES2_SPEC = 0x8B40,
    SH_WEBGL_SPEC = 0x8B41,
 +  SH_GLES3_SPEC = 0x8B86,
 +  SH_WEBGL2_SPEC = 0x8B87,
 +
    // The CSS Shaders spec is a subset of the WebGL spec.
    //
    // In both CSS vertex and fragment shaders, ANGLE:
 @@ -84,31 +88,6 @@ typedef enum {    SH_HLSL11_OUTPUT = 0x8B48
  } ShShaderOutput;
 -typedef enum {
 -  SH_PRECISION_HIGHP     = 0x5001,
 -  SH_PRECISION_MEDIUMP   = 0x5002,
 -  SH_PRECISION_LOWP      = 0x5003,
 -  SH_PRECISION_UNDEFINED = 0
 -} ShPrecisionType;
 -
 -typedef enum {
 -  SH_INFO_LOG_LENGTH                = 0x8B84,
 -  SH_OBJECT_CODE_LENGTH             = 0x8B88,  // GL_SHADER_SOURCE_LENGTH
 -  SH_ACTIVE_UNIFORMS                = 0x8B86,
 -  SH_ACTIVE_UNIFORM_MAX_LENGTH      = 0x8B87,
 -  SH_ACTIVE_ATTRIBUTES              = 0x8B89,
 -  SH_ACTIVE_ATTRIBUTE_MAX_LENGTH    = 0x8B8A,
 -  SH_VARYINGS                       = 0x8BBB,
 -  SH_VARYING_MAX_LENGTH             = 0x8BBC,
 -  SH_MAPPED_NAME_MAX_LENGTH         = 0x6000,
 -  SH_NAME_MAX_LENGTH                = 0x6001,
 -  SH_HASHED_NAME_MAX_LENGTH         = 0x6002,
 -  SH_HASHED_NAMES_COUNT             = 0x6003,
 -  SH_SHADER_VERSION                 = 0x6004,
 -  SH_RESOURCES_STRING_LENGTH        = 0x6005,
 -  SH_OUTPUT_TYPE                    = 0x6006
 -} ShShaderInfo;
 -
  // Compile options.
  typedef enum {
    SH_VALIDATE                = 0,
 @@ -188,6 +167,11 @@ typedef enum {    // This flag scalarizes vec/ivec/bvec/mat constructor args.
    // It is intended as a workaround for Linux/Mac driver bugs.
    SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS = 0x40000,
 +
 +  // This flag overwrites a struct name with a unique prefix.
 +  // It is intended as a workaround for drivers that do not handle
 +  // struct scopes correctly, including all Mac drivers and Linux AMD.
 +  SH_REGENERATE_STRUCT_NAMES = 0x80000,
  } ShCompileOptions;
  // Defines alternate strategies for implementing array index clamping.
 @@ -202,14 +186,14 @@ typedef enum {  //
  // Driver must call this first, once, before doing any other
  // compiler operations.
 -// If the function succeeds, the return value is nonzero, else zero.
 +// If the function succeeds, the return value is true, else false.
  //
 -COMPILER_EXPORT int ShInitialize();
 +COMPILER_EXPORT bool ShInitialize();
  //
  // Driver should call this at shutdown.
 -// If the function succeeds, the return value is nonzero, else zero.
 +// If the function succeeds, the return value is true, else false.
  //
 -COMPILER_EXPORT int ShFinalize();
 +COMPILER_EXPORT bool ShFinalize();
  // The 64 bits hash function. The first parameter is the input string; the
  // second parameter is the string length.
 @@ -240,6 +224,12 @@ typedef struct      int EXT_frag_depth;
      int EXT_shader_texture_lod;
 +    // Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
 +    // with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
 +    // EXT_draw_buffers by using it in combination with GLES3.0 glDrawBuffers
 +    // function. This applies to Tegra K1 devices.
 +    int NV_draw_buffers;
 +
      // Set to 1 if highp precision is supported in the fragment language.
      // Default is 0.
      int FragmentPrecisionHigh;
 @@ -268,8 +258,10 @@ typedef struct  //
  // Initialize built-in resources with minimum expected values.
 +// Parameters:
 +// resources: The object to initialize. Will be comparable with memcmp.
  //
 -COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources);
 +COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources *resources);
  //
  // ShHandle held by but opaque to the driver.  It is allocated,
 @@ -278,18 +270,15 @@ COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources);  //
  // If handle creation fails, 0 will be returned.
  //
 -typedef void* ShHandle;
 +typedef void *ShHandle;
  //
 -// Returns the a concatenated list of the items in ShBuiltInResources as a string.
 +// Returns the a concatenated list of the items in ShBuiltInResources as a
 +// null-terminated string.
  // This function must be updated whenever ShBuiltInResources is changed.
  // Parameters:
  // handle: Specifies the handle of the compiler to be used.
 -// outStringLen: Specifies the size of the buffer, in number of characters. The size
 -//               of the buffer required to store the resources string can be obtained
 -//               by calling ShGetInfo with SH_RESOURCES_STRING_LENGTH.
 -// outStr: Returns a null-terminated string representing all the built-in resources.
 -COMPILER_EXPORT void ShGetBuiltInResourcesString(const ShHandle handle, size_t outStringLen, char *outStr);
 +COMPILER_EXPORT const std::string &ShGetBuiltInResourcesString(const ShHandle handle);
  //
  // Driver calls these to create and destroy compiler objects.
 @@ -307,12 +296,12 @@ COMPILER_EXPORT ShHandle ShConstructCompiler(      sh::GLenum type,
      ShShaderSpec spec,
      ShShaderOutput output,
 -    const ShBuiltInResources* resources);
 +    const ShBuiltInResources *resources);
  COMPILER_EXPORT void ShDestruct(ShHandle handle);
  //
  // Compiles the given shader source.
 -// If the function succeeds, the return value is nonzero, else zero.
 +// If the function succeeds, the return value is true, else false.
  // Parameters:
  // handle: Specifies the handle of compiler to be used.
  // shaderStrings: Specifies an array of pointers to null-terminated strings
 @@ -334,123 +323,36 @@ COMPILER_EXPORT void ShDestruct(ShHandle handle);  // SH_VARIABLES: Extracts attributes, uniforms, and varyings.
  //               Can be queried by calling ShGetVariableInfo().
  //
 -COMPILER_EXPORT int ShCompile(
 +COMPILER_EXPORT bool ShCompile(
      const ShHandle handle,
 -    const char* const shaderStrings[],
 +    const char * const shaderStrings[],
      size_t numStrings,
 -    int compileOptions
 -    );
 +    int compileOptions);
 -// Returns a parameter from a compiled shader.
 -// Parameters:
 -// handle: Specifies the compiler
 -// pname: Specifies the parameter to query.
 -// The following parameters are defined:
 -// SH_INFO_LOG_LENGTH: the number of characters in the information log
 -//                     including the null termination character.
 -// SH_OBJECT_CODE_LENGTH: the number of characters in the object code
 -//                        including the null termination character.
 -// SH_ACTIVE_ATTRIBUTES: the number of active attribute variables.
 -// SH_ACTIVE_ATTRIBUTE_MAX_LENGTH: the length of the longest active attribute
 -//                                 variable name including the null
 -//                                 termination character.
 -// SH_ACTIVE_UNIFORMS: the number of active uniform variables.
 -// SH_ACTIVE_UNIFORM_MAX_LENGTH: the length of the longest active uniform
 -//                               variable name including the null
 -//                               termination character.
 -// SH_VARYINGS: the number of varying variables.
 -// SH_VARYING_MAX_LENGTH: the length of the longest varying variable name
 -//                        including the null termination character.
 -// SH_MAPPED_NAME_MAX_LENGTH: the length of the mapped variable name including
 -//                            the null termination character.
 -// SH_NAME_MAX_LENGTH: the max length of a user-defined name including the
 -//                     null termination character.
 -// SH_HASHED_NAME_MAX_LENGTH: the max length of a hashed name including the
 -//                            null termination character.
 -// SH_HASHED_NAMES_COUNT: the number of hashed names from the latest compile.
 -// SH_SHADER_VERSION: the version of the shader language
 -// SH_OUTPUT_TYPE: the currently set language output type
 -//
 -// params: Requested parameter
 -COMPILER_EXPORT void ShGetInfo(const ShHandle handle,
 -                               ShShaderInfo pname,
 -                               size_t* params);
 +// Return the version of the shader language.
 +COMPILER_EXPORT int ShGetShaderVersion(const ShHandle handle);
 -// Returns nul-terminated information log for a compiled shader.
 +// Return the currently set language output type.
 +COMPILER_EXPORT ShShaderOutput ShGetShaderOutputType(
 +    const ShHandle handle);
 +
 +// Returns null-terminated information log for a compiled shader.
  // Parameters:
  // handle: Specifies the compiler
 -// infoLog: Specifies an array of characters that is used to return
 -//          the information log. It is assumed that infoLog has enough memory
 -//          to accomodate the information log. The size of the buffer required
 -//          to store the returned information log can be obtained by calling
 -//          ShGetInfo with SH_INFO_LOG_LENGTH.
 -COMPILER_EXPORT void ShGetInfoLog(const ShHandle handle, char* infoLog);
 +COMPILER_EXPORT const std::string &ShGetInfoLog(const ShHandle handle);
  // Returns null-terminated object code for a compiled shader.
  // Parameters:
  // handle: Specifies the compiler
 -// infoLog: Specifies an array of characters that is used to return
 -//          the object code. It is assumed that infoLog has enough memory to
 -//          accomodate the object code. The size of the buffer required to
 -//          store the returned object code can be obtained by calling
 -//          ShGetInfo with SH_OBJECT_CODE_LENGTH.
 -COMPILER_EXPORT void ShGetObjectCode(const ShHandle handle, char* objCode);
 -
 -// Returns information about a shader variable.
 -// Parameters:
 -// handle: Specifies the compiler
 -// variableType: Specifies the variable type; options include
 -//               SH_ACTIVE_ATTRIBUTES, SH_ACTIVE_UNIFORMS, SH_VARYINGS.
 -// index: Specifies the index of the variable to be queried.
 -// length: Returns the number of characters actually written in the string
 -//         indicated by name (excluding the null terminator) if a value other
 -//         than NULL is passed.
 -// size: Returns the size of the variable.
 -// type: Returns the data type of the variable.
 -// precision: Returns the precision of the variable.
 -// staticUse: Returns 1 if the variable is accessed in a statement after
 -//            pre-processing, whether or not run-time flow of control will
 -//            cause that statement to be executed.
 -//            Returns 0 otherwise.
 -// name: Returns a null terminated string containing the name of the
 -//       variable. It is assumed that name has enough memory to accormodate
 -//       the variable name. The size of the buffer required to store the
 -//       variable name can be obtained by calling ShGetInfo with
 -//       SH_ACTIVE_ATTRIBUTE_MAX_LENGTH, SH_ACTIVE_UNIFORM_MAX_LENGTH,
 -//       SH_VARYING_MAX_LENGTH.
 -// mappedName: Returns a null terminated string containing the mapped name of
 -//             the variable, It is assumed that mappedName has enough memory
 -//             (SH_MAPPED_NAME_MAX_LENGTH), or NULL if don't care about the
 -//             mapped name. If the name is not mapped, then name and mappedName
 -//             are the same.
 -COMPILER_EXPORT void ShGetVariableInfo(const ShHandle handle,
 -                                       ShShaderInfo variableType,
 -                                       int index,
 -                                       size_t* length,
 -                                       int* size,
 -                                       sh::GLenum* type,
 -                                       ShPrecisionType* precision,
 -                                       int* staticUse,
 -                                       char* name,
 -                                       char* mappedName);
 -
 -// Returns information about a name hashing entry from the latest compile.
 +COMPILER_EXPORT const std::string &ShGetObjectCode(const ShHandle handle);
 +
 +// Returns a (original_name, hash) map containing all the user defined
 +// names in the shader, including variable names, function names, struct
 +// names, and struct field names.
  // Parameters:
  // handle: Specifies the compiler
 -// index: Specifies the index of the name hashing entry to be queried.
 -// name: Returns a null terminated string containing the user defined name.
 -//       It is assumed that name has enough memory to accomodate the name.
 -//       The size of the buffer required to store the user defined name can
 -//       be obtained by calling ShGetInfo with SH_NAME_MAX_LENGTH.
 -// hashedName: Returns a null terminated string containing the hashed name of
 -//             the uniform variable, It is assumed that hashedName has enough
 -//             memory to accomodate the name. The size of the buffer required
 -//             to store the name can be obtained by calling ShGetInfo with
 -//             SH_HASHED_NAME_MAX_LENGTH.
 -COMPILER_EXPORT void ShGetNameHashingEntry(const ShHandle handle,
 -                                           int index,
 -                                           char* name,
 -                                           char* hashedName);
 +COMPILER_EXPORT const std::map<std::string, std::string> *ShGetNameHashingMap(
 +    const ShHandle handle);
  // Shader variable inspection.
  // Returns a pointer to a list of variables of the designated type.
 @@ -470,17 +372,17 @@ typedef struct      int size;
  } ShVariableInfo;
 -// Returns 1 if the passed in variables pack in maxVectors following
 +// Returns true if the passed in variables pack in maxVectors following
  // the packing rules from the GLSL 1.017 spec, Appendix A, section 7.
 -// Returns 0 otherwise. Also look at the SH_ENFORCE_PACKING_RESTRICTIONS
 +// Returns false otherwise. Also look at the SH_ENFORCE_PACKING_RESTRICTIONS
  // flag above.
  // Parameters:
  // maxVectors: the available rows of registers.
  // varInfoArray: an array of variable info (types and sizes).
  // varInfoArraySize: the size of the variable array.
 -COMPILER_EXPORT int ShCheckVariablesWithinPackingLimits(
 +COMPILER_EXPORT bool ShCheckVariablesWithinPackingLimits(
      int maxVectors,
 -    ShVariableInfo* varInfoArray,
 +    ShVariableInfo *varInfoArray,
      size_t varInfoArraySize);
  // Gives the compiler-assigned register for an interface block.
 @@ -491,7 +393,7 @@ COMPILER_EXPORT int ShCheckVariablesWithinPackingLimits(  // interfaceBlockName: Specifies the interface block
  // indexOut: output variable that stores the assigned register
  COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle,
 -                                                 const char *interfaceBlockName,
 +                                                 const std::string &interfaceBlockName,
                                                   unsigned int *indexOut);
  // Gives the compiler-assigned register for uniforms in the default
 @@ -503,11 +405,7 @@ COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle,  // interfaceBlockName: Specifies the uniform
  // indexOut: output variable that stores the assigned register
  COMPILER_EXPORT bool ShGetUniformRegister(const ShHandle handle,
 -                                          const char *uniformName,
 +                                          const std::string &uniformName,
                                            unsigned int *indexOut);
 -#ifdef __cplusplus
 -}
 -#endif
 -
  #endif // _COMPILER_INTERFACE_INCLUDED_
 diff --git a/platform/winrt/include/GLSLANG/ShaderVars.h b/platform/winrt/include/GLSLANG/ShaderVars.h index 03ddf956f1..dc452b0cf4 100644 --- a/platform/winrt/include/GLSLANG/ShaderVars.h +++ b/platform/winrt/include/GLSLANG/ShaderVars.h @@ -15,6 +15,7 @@  #include <algorithm>
  // Assume ShaderLang.h is included before ShaderVars.h, for sh::GLenum
 +// Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h
  namespace sh
  {
 @@ -39,7 +40,7 @@ enum BlockLayoutType  // Note: we must override the copy constructor and assignment operator so we can
  // work around excessive GCC binary bloating:
  // See https://code.google.com/p/angleproject/issues/detail?id=697
 -struct ShaderVariable
 +struct COMPILER_EXPORT ShaderVariable
  {
      ShaderVariable();
      ShaderVariable(GLenum typeIn, unsigned int arraySizeIn);
 @@ -49,6 +50,22 @@ struct ShaderVariable      bool isArray() const { return arraySize > 0; }
      unsigned int elementCount() const { return std::max(1u, arraySize); }
 +    bool isStruct() const { return !fields.empty(); }
 +
 +    // All of the shader's variables are described using nested data
 +    // structures. This is needed in order to disambiguate similar looking
 +    // types, such as two structs containing the same fields, but in
 +    // different orders. "findInfoByMappedName" provides an easy query for
 +    // users to dive into the data structure and fetch the unique variable
 +    // instance corresponding to a dereferencing chain of the top-level
 +    // variable.
 +    // Given a mapped name like 'a[0].b.c[0]', return the ShaderVariable
 +    // that defines 'c' in |leafVar|, and the original name 'A[0].B.C[0]'
 +    // in |originalName|, based on the assumption that |this| defines 'a'.
 +    // If no match is found, return false.
 +    bool findInfoByMappedName(const std::string &mappedFullName,
 +                              const ShaderVariable **leafVar,
 +                              std::string* originalFullName) const;
      GLenum type;
      GLenum precision;
 @@ -56,58 +73,97 @@ struct ShaderVariable      std::string mappedName;
      unsigned int arraySize;
      bool staticUse;
 +    std::vector<ShaderVariable> fields;
 +    std::string structName;
 +
 +  protected:
 +    bool isSameVariableAtLinkTime(const ShaderVariable &other,
 +                                  bool matchPrecision) const;
 +
 +    bool operator==(const ShaderVariable &other) const;
 +    bool operator!=(const ShaderVariable &other) const
 +    {
 +        return !operator==(other);
 +    }
  };
 -struct Uniform : public ShaderVariable
 +struct COMPILER_EXPORT Uniform : public ShaderVariable
  {
      Uniform();
      ~Uniform();
      Uniform(const Uniform &other);
      Uniform &operator=(const Uniform &other);
 -
 -    bool isStruct() const { return !fields.empty(); }
 -
 -    std::vector<Uniform> fields;
 +    bool operator==(const Uniform &other) const;
 +    bool operator!=(const Uniform &other) const
 +    {
 +        return !operator==(other);
 +    }
 +
 +    // Decide whether two uniforms are the same at shader link time,
 +    // assuming one from vertex shader and the other from fragment shader.
 +    // See GLSL ES Spec 3.00.3, sec 4.3.5.
 +    bool isSameUniformAtLinkTime(const Uniform &other) const;
  };
 -struct Attribute : public ShaderVariable
 +struct COMPILER_EXPORT Attribute : public ShaderVariable
  {
      Attribute();
      ~Attribute();
      Attribute(const Attribute &other);
      Attribute &operator=(const Attribute &other);
 +    bool operator==(const Attribute &other) const;
 +    bool operator!=(const Attribute &other) const
 +    {
 +        return !operator==(other);
 +    }
      int location;
  };
 -struct InterfaceBlockField : public ShaderVariable
 +struct COMPILER_EXPORT InterfaceBlockField : public ShaderVariable
  {
      InterfaceBlockField();
      ~InterfaceBlockField();
      InterfaceBlockField(const InterfaceBlockField &other);
      InterfaceBlockField &operator=(const InterfaceBlockField &other);
 +    bool operator==(const InterfaceBlockField &other) const;
 +    bool operator!=(const InterfaceBlockField &other) const
 +    {
 +        return !operator==(other);
 +    }
 +
 +    // Decide whether two InterfaceBlock fields are the same at shader
 +    // link time, assuming one from vertex shader and the other from
 +    // fragment shader.
 +    // See GLSL ES Spec 3.00.3, sec 4.3.7.
 +    bool isSameInterfaceBlockFieldAtLinkTime(
 +        const InterfaceBlockField &other) const;
 -    bool isStruct() const { return !fields.empty(); }
 -
 -    bool isRowMajorMatrix;
 -    std::vector<InterfaceBlockField> fields;
 +    bool isRowMajorLayout;
  };
 -struct Varying : public ShaderVariable
 +struct COMPILER_EXPORT Varying : public ShaderVariable
  {
      Varying();
      ~Varying();
 -    Varying(const Varying &other);
 +    Varying(const Varying &otherg);
      Varying &operator=(const Varying &other);
 +    bool operator==(const Varying &other) const;
 +    bool operator!=(const Varying &other) const
 +    {
 +        return !operator==(other);
 +    }
 -    bool isStruct() const { return !fields.empty(); }
 +    // Decide whether two varyings are the same at shader link time,
 +    // assuming one from vertex shader and the other from fragment shader.
 +    // See GLSL ES Spec 3.00.3, sec 4.3.9.
 +    bool isSameVaryingAtLinkTime(const Varying &other) const;
      InterpolationType interpolation;
 -    std::vector<Varying> fields;
 -    std::string structName;
 +    bool isInvariant;
  };
 -struct InterfaceBlock
 +struct COMPILER_EXPORT InterfaceBlock
  {
      InterfaceBlock();
      ~InterfaceBlock();
 @@ -116,6 +172,7 @@ struct InterfaceBlock      std::string name;
      std::string mappedName;
 +    std::string instanceName;
      unsigned int arraySize;
      BlockLayoutType layout;
      bool isRowMajorLayout;
 diff --git a/platform/winrt/os_winrt.cpp b/platform/winrt/os_winrt.cpp index 81f3d7adf5..89fa93c5c4 100644 --- a/platform/winrt/os_winrt.cpp +++ b/platform/winrt/os_winrt.cpp @@ -142,6 +142,11 @@ void OSWinrt::set_gl_context(ContextEGL* p_context) {  	gl_context = p_context;  }; +void OSWinrt::screen_size_changed() { + +	gl_context->reset(); +}; +  void OSWinrt::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) {      main_loop=NULL; @@ -568,8 +573,12 @@ Error OSWinrt::shell_open(String p_uri) {  String OSWinrt::get_locale() const { +#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP // this should work on phone 8.1, but it doesn't +	return "en"; +#else  	Platform::String ^language = Windows::Globalization::Language::CurrentInputMethodLanguageTag;  	return language->Data(); +#endif  }  void OSWinrt::release_rendering_thread() { diff --git a/platform/winrt/os_winrt.h b/platform/winrt/os_winrt.h index 13b77f7f01..68236309a9 100644 --- a/platform/winrt/os_winrt.h +++ b/platform/winrt/os_winrt.h @@ -228,6 +228,7 @@ public:  	virtual String get_data_dir() const;  	void set_gl_context(ContextEGL* p_context); +	void screen_size_changed();  	virtual void release_rendering_thread();  	virtual void make_rendering_thread(); diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index 57495b5cb0..1c0be60764 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -41,7 +41,6 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {  	bool solids=build_mode==BUILD_SOLIDS; -  	if (solids) {  		//here comes the sun, lalalala @@ -51,6 +50,8 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {  			Ref<ConvexPolygonShape2D> convex = memnew( ConvexPolygonShape2D );  			convex->set_points(decomp[i]);  			co->add_shape(convex,get_transform()); +			if (trigger) +				co->set_shape_as_trigger(co->get_shape_count()-1,true);  		} @@ -71,6 +72,8 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {  		concave->set_segments(segments);  		co->add_shape(concave,get_transform()); +		if (trigger) +			co->set_shape_as_trigger(co->get_shape_count()-1,true);  	} @@ -166,6 +169,18 @@ Rect2 CollisionPolygon2D::get_item_rect() const {  	return aabb;  } +void CollisionPolygon2D::set_trigger(bool p_trigger) { + +	trigger=p_trigger; +	_update_parent(); +} + +bool CollisionPolygon2D::is_trigger() const{ + +	return trigger; +} + +  void CollisionPolygon2D::_bind_methods() {  	ObjectTypeDB::bind_method(_MD("_add_to_collision_object"),&CollisionPolygon2D::_add_to_collision_object); @@ -175,14 +190,19 @@ void CollisionPolygon2D::_bind_methods() {  	ObjectTypeDB::bind_method(_MD("set_build_mode"),&CollisionPolygon2D::set_build_mode);  	ObjectTypeDB::bind_method(_MD("get_build_mode"),&CollisionPolygon2D::get_build_mode); +	ObjectTypeDB::bind_method(_MD("set_trigger"),&CollisionPolygon2D::set_trigger); +	ObjectTypeDB::bind_method(_MD("is_trigger"),&CollisionPolygon2D::is_trigger); +  	ADD_PROPERTY( PropertyInfo(Variant::INT,"build_mode",PROPERTY_HINT_ENUM,"Solids,Segments"),_SCS("set_build_mode"),_SCS("get_build_mode"));  	ADD_PROPERTY( PropertyInfo(Variant::VECTOR2_ARRAY,"polygon"),_SCS("set_polygon"),_SCS("get_polygon")); +	ADD_PROPERTY( PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger"));  }  CollisionPolygon2D::CollisionPolygon2D() {  	aabb=Rect2(-10,-10,20,20);  	build_mode=BUILD_SOLIDS; +	trigger=false;  } diff --git a/scene/2d/collision_polygon_2d.h b/scene/2d/collision_polygon_2d.h index 09c2060088..b8e27b6fb4 100644 --- a/scene/2d/collision_polygon_2d.h +++ b/scene/2d/collision_polygon_2d.h @@ -50,6 +50,7 @@ protected:  	Rect2 aabb;  	BuildMode build_mode;  	Vector<Point2> polygon; +	bool trigger;  	void _add_to_collision_object(Object *p_obj);  	void _update_parent(); @@ -60,6 +61,9 @@ protected:  	static void _bind_methods();  public: +	void set_trigger(bool p_trigger); +	bool is_trigger() const; +  	void set_build_mode(BuildMode p_mode);  	BuildMode get_build_mode() const; diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 655c6e8bf6..9d10000d2b 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -858,7 +858,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {  		//motion recover  		for(int i=0;i<get_shape_count();i++) { - +			if (is_shape_set_as_trigger(i)) +				continue;  			if (dss->collide_shape(get_shape(i)->get_rid(), get_global_transform() * get_shape_transform(i),Vector2(),margin,sr,max_shapes,res_shapes,exclude,get_layer_mask(),mask))  				collided=true; @@ -902,6 +903,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {  	for(int i=0;i<get_shape_count();i++) { +		if (is_shape_set_as_trigger(i)) +			continue;  		float lsafe,lunsafe;  		bool valid = dss->cast_motion(get_shape(i)->get_rid(), get_global_transform() * get_shape_transform(i), p_motion, 0,lsafe,lunsafe,exclude,get_layer_mask(),mask); diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 21ecac6e3d..5c047b3fef 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -870,6 +870,9 @@ Vector3 KinematicBody::move(const Vector3& p_motion) {  		for(int j=0;j<8;j++) {  			for(int i=0;i<res_shapes;i++) { +				if (is_shape_set_as_trigger(i)) +					continue; +  				Vector3 a = sr[i*2+0];  				Vector3 b = sr[i*2+1];  				//print_line(String()+a+" -> "+b); @@ -930,6 +933,8 @@ Vector3 KinematicBody::move(const Vector3& p_motion) {  	for(int i=0;i<get_shape_count();i++) { +		if (is_shape_set_as_trigger(i)) +			continue;  		float lsafe,lunsafe;  		PhysicsDirectSpaceState::ShapeRestInfo lrest; @@ -1041,6 +1046,8 @@ bool KinematicBody::can_move_to(const Vector3& p_position, bool p_discrete) {  	//fill exclude list..  	for(int i=0;i<get_shape_count();i++) { +		if (is_shape_set_as_trigger(i)) +			continue;  		bool col = dss->intersect_shape(get_shape(i)->get_rid(), xform * get_shape_transform(i),0,NULL,0,exclude,get_layer_mask(),mask);  		if (col)  |