Fixes
-=-=-= -Added missing quaternion constructor -code completion fixes -winrt fixes
This commit is contained in:
parent
7dbc19f32d
commit
a36a774897
|
@ -12,9 +12,9 @@ Ref<ResourceInteractiveLoader> _ResourceLoader::load_interactive(const String& p
|
||||||
return ResourceLoader::load_interactive(p_path,p_type_hint);
|
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;
|
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_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("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("set_abort_on_missing_resources","abort"),&_ResourceLoader::set_abort_on_missing_resources);
|
||||||
ObjectTypeDB::bind_method(_MD("get_dependencies"),&_ResourceLoader::get_dependencies);
|
ObjectTypeDB::bind_method(_MD("get_dependencies"),&_ResourceLoader::get_dependencies);
|
||||||
|
|
|
@ -21,7 +21,7 @@ public:
|
||||||
|
|
||||||
static _ResourceLoader *get_singleton() { return singleton; }
|
static _ResourceLoader *get_singleton() { return singleton; }
|
||||||
Ref<ResourceInteractiveLoader> load_interactive(const String& p_path,const String& p_type_hint="");
|
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);
|
DVector<String> get_recognized_extensions_for_type(const String& p_type);
|
||||||
void set_abort_on_missing_resources(bool p_abort);
|
void set_abort_on_missing_resources(bool p_abort);
|
||||||
StringArray get_dependencies(const String& p_path);
|
StringArray get_dependencies(const String& p_path);
|
||||||
|
|
|
@ -136,7 +136,7 @@ public:
|
||||||
|
|
||||||
static int b;
|
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));
|
b = (int)((a>0.0f) ? (a + 0.5f):(a -0.5f));
|
||||||
|
|
||||||
#elif defined(_MSC_VER) && _MSC_VER < 1800
|
#elif defined(_MSC_VER) && _MSC_VER < 1800
|
||||||
|
|
|
@ -110,6 +110,7 @@ void register_core_types() {
|
||||||
|
|
||||||
|
|
||||||
ObjectTypeDB::register_type<Reference>();
|
ObjectTypeDB::register_type<Reference>();
|
||||||
|
ObjectTypeDB::register_type<WeakRef>();
|
||||||
ObjectTypeDB::register_type<ResourceImportMetadata>();
|
ObjectTypeDB::register_type<ResourceImportMetadata>();
|
||||||
ObjectTypeDB::register_type<Resource>();
|
ObjectTypeDB::register_type<Resource>();
|
||||||
ObjectTypeDB::register_type<FuncRef>();
|
ObjectTypeDB::register_type<FuncRef>();
|
||||||
|
|
|
@ -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]);
|
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) {
|
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]);
|
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::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_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_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);
|
_VariantCall::add_constructor(_VariantCall::Color_init2,Variant::COLOR,"r",Variant::REAL,"g",Variant::REAL,"b",Variant::REAL);
|
||||||
|
|
|
@ -341,7 +341,11 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp;
|
||||||
# ifdef _WINDOWS_ /* Favor Windows over C runtime fns */
|
# ifdef _WINDOWS_ /* Favor Windows over C runtime fns */
|
||||||
# define CVT_PTR(ptr) (ptr)
|
# define CVT_PTR(ptr) (ptr)
|
||||||
# define CVT_PTR_NOCHECK(ptr) (ptr)
|
# define CVT_PTR_NOCHECK(ptr) (ptr)
|
||||||
|
# ifdef WINRT_ENABLED
|
||||||
|
# define png_strlen strlen
|
||||||
|
# else
|
||||||
# define png_strlen lstrlenA
|
# define png_strlen lstrlenA
|
||||||
|
# endif
|
||||||
# define png_memcmp memcmp
|
# define png_memcmp memcmp
|
||||||
# define png_memcpy CopyMemory
|
# define png_memcpy CopyMemory
|
||||||
# define png_memset memset
|
# define png_memset memset
|
||||||
|
|
|
@ -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
|
/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
|
||||||
* 64 bit compiler */
|
* 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
|
# define VORBIS_FPU_CONTROL
|
||||||
|
|
||||||
typedef ogg_int16_t vorbis_fpu_control;
|
typedef ogg_int16_t vorbis_fpu_control;
|
||||||
|
|
|
@ -606,6 +606,16 @@ static bool _guess_expression_type(GDCompletionContext& context,const GDParser::
|
||||||
|
|
||||||
if (base.type==Variant::OBJECT) {
|
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)) {
|
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);
|
v.get_method_list(&mi);
|
||||||
for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) {
|
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();
|
MethodInfo mi = E->get();
|
||||||
r_type.type=mi.return_val.type;
|
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;
|
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()) {
|
if (context.function && context.function->name!=StringName()) {
|
||||||
|
|
||||||
int argindex = -1;
|
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++) {
|
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;
|
List<MethodInfo> methods;
|
||||||
ObjectTypeDB::get_method_list(type,&methods);
|
ObjectTypeDB::get_method_list(type,&methods);
|
||||||
for(List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
|
for(List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
|
||||||
|
if (E->get().name.begins_with("_"))
|
||||||
|
continue;
|
||||||
if (E->get().arguments.size())
|
if (E->get().arguments.size())
|
||||||
result.insert(E->get().name+"(");
|
result.insert(E->get().name+"(");
|
||||||
else
|
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;
|
String n = p_info.name;
|
||||||
int idx = n.find(":");
|
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)
|
if (p_info.type==Variant::OBJECT && p_info.hint==PROPERTY_HINT_RESOURCE_TYPE)
|
||||||
return p_info.hint_string;
|
return p_info.hint_string;
|
||||||
if (p_info.type==Variant::NIL)
|
if (p_info.type==Variant::NIL) {
|
||||||
|
if (p_isarg)
|
||||||
|
return "var";
|
||||||
|
else
|
||||||
return "void";
|
return "void";
|
||||||
|
}
|
||||||
|
|
||||||
return Variant::get_type_name(p_info.type);
|
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++) {
|
for(int i=0;i<m->get_argument_count();i++) {
|
||||||
if (i>0)
|
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]);
|
const GDParser::BuiltInFunctionNode *fn = static_cast<const GDParser::BuiltInFunctionNode*>(op->arguments[0]);
|
||||||
MethodInfo mi = GDFunctions::get_info(fn->function);
|
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++) {
|
for(int i=0;i<mi.arguments.size();i++) {
|
||||||
if (i>0)
|
if (i>0)
|
||||||
arghint+=", ";
|
arghint+=", ";
|
||||||
|
@ -1674,7 +1691,6 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base
|
||||||
isfunction=true;
|
isfunction=true;
|
||||||
case GDParser::COMPLETION_INDEX: {
|
case GDParser::COMPLETION_INDEX: {
|
||||||
|
|
||||||
print_line("index");
|
|
||||||
const GDParser::Node *node = p.get_completion_node();
|
const GDParser::Node *node = p.get_completion_node();
|
||||||
if (node->type!=GDParser::Node::TYPE_OPERATOR)
|
if (node->type!=GDParser::Node::TYPE_OPERATOR)
|
||||||
break;
|
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 (_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.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) {
|
if (!isfunction) {
|
||||||
ObjectTypeDB::get_integer_constant_list(t.obj_type,r_options);
|
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);
|
ObjectTypeDB::get_method_list(t.obj_type,&mi);
|
||||||
for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) {
|
for (List<MethodInfo>::Element *E=mi.front();E;E=E->next()) {
|
||||||
|
|
||||||
|
if (E->get().name.begins_with("_"))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (E->get().arguments.size())
|
if (E->get().arguments.size())
|
||||||
options.insert(E->get().name+"(");
|
options.insert(E->get().name+"(");
|
||||||
else
|
else
|
||||||
|
@ -1700,6 +1745,7 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (t.value.get_type()==Variant::NIL) {
|
if (t.value.get_type()==Variant::NIL) {
|
||||||
Variant::CallError ce;
|
Variant::CallError ce;
|
||||||
t.value=Variant::construct(t.type,NULL,0,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;
|
} break;
|
||||||
case GDParser::COMPLETION_CALL_ARGUMENTS: {
|
case GDParser::COMPLETION_CALL_ARGUMENTS: {
|
||||||
|
|
||||||
|
|
|
@ -1756,6 +1756,7 @@ bool GDScript::_update_exports() {
|
||||||
return changed;
|
return changed;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GDScript::update_exports() {
|
void GDScript::update_exports() {
|
||||||
|
|
|
@ -178,7 +178,7 @@ static Windows::Foundation::Point _get_pixel_position(CoreWindow^ window, Window
|
||||||
// Compute coordinates normalized from 0..1.
|
// Compute coordinates normalized from 0..1.
|
||||||
// If the coordinates need to be sized to the SDL window,
|
// If the coordinates need to be sized to the SDL window,
|
||||||
// we'll do that after.
|
// 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.X = rawPosition.X / window->Bounds.Width;
|
||||||
outputPosition.Y = rawPosition.Y / window->Bounds.Height;
|
outputPosition.Y = rawPosition.Y / window->Bounds.Height;
|
||||||
#else
|
#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.
|
// 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.
|
// 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.
|
// It is therefore up to the app to handle rotation-specific logic in its rendering code.
|
||||||
|
//os->screen_size_changed();
|
||||||
|
UpdateWindowSize(args->Size);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::UpdateWindowSize(Size size)
|
void App::UpdateWindowSize(Size size)
|
||||||
{
|
{
|
||||||
/*
|
float dpi;
|
||||||
|
#if (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP)
|
||||||
DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView();
|
DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView();
|
||||||
Size pixelSize(ConvertDipsToPixels(size.Width, currentDisplayInformation->LogicalDpi), ConvertDipsToPixels(size.Height, currentDisplayInformation->LogicalDpi));
|
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);
|
mWindowWidth = static_cast<GLsizei>(pixelSize.Width);
|
||||||
mWindowHeight = static_cast<GLsizei>(pixelSize.Height);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,59 @@ def get_flags():
|
||||||
def configure(env):
|
def configure(env):
|
||||||
|
|
||||||
env.Append(CPPPATH=['#platform/winrt', '#platform/winrt/include'])
|
env.Append(CPPPATH=['#platform/winrt', '#platform/winrt/include'])
|
||||||
|
arch = ""
|
||||||
|
|
||||||
|
if os.getenv('PLATFORM') == "ARM":
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
arch = "arm"
|
||||||
|
|
||||||
|
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'])
|
||||||
|
|
||||||
|
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'))
|
||||||
|
|
||||||
|
if (env["target"]=="release"):
|
||||||
|
|
||||||
|
env.Append(CCFLAGS=['/O2'])
|
||||||
|
env.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS'])
|
||||||
|
|
||||||
|
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['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(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'])
|
env.Append(LIBPATH=['#platform/winrt/x64/lib'])
|
||||||
|
@ -62,6 +114,15 @@ def configure(env):
|
||||||
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(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(CXXFLAGS=string.split('/ZW'))
|
||||||
env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR']+'\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR']+'\\References\\CommonConfiguration\\Neutral'])
|
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=['/Gd','/GR','/nologo', '/EHsc'])
|
#env.Append(CCFLAGS=['/Gd','/GR','/nologo', '/EHsc'])
|
||||||
#env.Append(CXXFLAGS=['/TP', '/ZW'])
|
#env.Append(CXXFLAGS=['/TP', '/ZW'])
|
||||||
|
@ -69,7 +130,6 @@ def configure(env):
|
||||||
##env.Append(CCFLAGS=['/I'+os.getenv("WindowsSdkDir")+"/Include"])
|
##env.Append(CCFLAGS=['/I'+os.getenv("WindowsSdkDir")+"/Include"])
|
||||||
env.Append(CCFLAGS=['/DWINRT_ENABLED'])
|
env.Append(CCFLAGS=['/DWINRT_ENABLED'])
|
||||||
env.Append(CCFLAGS=['/DWINDOWS_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=['/DRTAUDIO_ENABLED'])
|
||||||
#env.Append(CCFLAGS=['/DWIN32'])
|
#env.Append(CCFLAGS=['/DWIN32'])
|
||||||
env.Append(CCFLAGS=['/DTYPED_METHOD_BIND'])
|
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 = { '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.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
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "gl_context_egl.h"
|
#include "gl_context_egl.h"
|
||||||
|
|
||||||
|
#include "EGL/eglext.h"
|
||||||
|
|
||||||
using namespace Platform;
|
using namespace Platform;
|
||||||
|
|
||||||
void ContextEGL::release_current() {
|
void ContextEGL::release_current() {
|
||||||
|
@ -22,6 +24,14 @@ int ContextEGL::get_window_height() {
|
||||||
return height;
|
return height;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void ContextEGL::reset() {
|
||||||
|
|
||||||
|
cleanup();
|
||||||
|
|
||||||
|
window = CoreWindow::GetForCurrentThread();
|
||||||
|
initialize();
|
||||||
|
};
|
||||||
|
|
||||||
void ContextEGL::swap_buffers() {
|
void ContextEGL::swap_buffers() {
|
||||||
|
|
||||||
if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE)
|
if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE)
|
||||||
|
@ -63,7 +73,23 @@ Error ContextEGL::initialize() {
|
||||||
|
|
||||||
try {
|
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)
|
if (display == EGL_NO_DISPLAY)
|
||||||
{
|
{
|
||||||
throw Exception::CreateException(E_FAIL, L"Failed to get default EGL display");
|
throw Exception::CreateException(E_FAIL, L"Failed to get default EGL display");
|
||||||
|
|
|
@ -32,6 +32,7 @@ public:
|
||||||
virtual void swap_buffers();
|
virtual void swap_buffers();
|
||||||
|
|
||||||
virtual Error initialize();
|
virtual Error initialize();
|
||||||
|
void reset();
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
|
|
|
@ -432,31 +432,38 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
|
||||||
#define EGL_ANGLE_direct3d_display 1
|
#define EGL_ANGLE_direct3d_display 1
|
||||||
#define EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2)
|
#define EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2)
|
||||||
#define EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3)
|
#define EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3)
|
||||||
#define EGL_D3D11_FL9_3_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-4)
|
|
||||||
#endif /* EGL_ANGLE_direct3d_display */
|
#endif /* EGL_ANGLE_direct3d_display */
|
||||||
|
|
||||||
#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
|
#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
|
||||||
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
|
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
|
||||||
#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
|
#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
|
#ifndef EGL_ANGLE_platform_angle
|
||||||
#define EGL_ANGLE_platform_angle 1
|
#define EGL_ANGLE_platform_angle 1
|
||||||
#define EGL_PLATFORM_ANGLE_ANGLE 0x3201
|
#define EGL_PLATFORM_ANGLE_ANGLE 0x3201
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3202
|
#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 */
|
#endif /* EGL_ANGLE_platform_angle */
|
||||||
|
|
||||||
#ifndef EGL_ANGLE_platform_angle_d3d
|
#ifndef EGL_ANGLE_platform_angle_d3d
|
||||||
#define EGL_ANGLE_platform_angle_d3d 1
|
#define EGL_ANGLE_platform_angle_d3d 1
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3204
|
#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3206
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3205
|
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3207
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_WARP_ANGLE 0x3206
|
#define EGL_PLATFORM_ANGLE_USE_WARP_ANGLE 0x3208
|
||||||
#endif /* EGL_ANGLE_platform_angle_d3d */
|
#endif /* EGL_ANGLE_platform_angle_d3d */
|
||||||
|
|
||||||
#ifndef EGL_ANGLE_platform_angle_opengl
|
#ifndef EGL_ANGLE_platform_angle_opengl
|
||||||
#define EGL_ANGLE_platform_angle_opengl 1
|
#define EGL_ANGLE_platform_angle_opengl 1
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3207
|
#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3209
|
||||||
#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x3208
|
#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320A
|
||||||
#endif /* EGL_ANGLE_platform_angle_opengl */
|
#endif /* EGL_ANGLE_platform_angle_opengl */
|
||||||
|
|
||||||
#ifndef EGL_ARM_pixmap_multisample_discard
|
#ifndef EGL_ARM_pixmap_multisample_discard
|
||||||
|
|
|
@ -76,12 +76,12 @@
|
||||||
typedef HDC EGLNativeDisplayType;
|
typedef HDC EGLNativeDisplayType;
|
||||||
typedef HBITMAP EGLNativePixmapType;
|
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>
|
#include <inspectable.h>
|
||||||
typedef IInspectable* EGLNativeWindowType;
|
typedef IInspectable* EGLNativeWindowType;
|
||||||
#else
|
#else
|
||||||
typedef HWND EGLNativeWindowType;
|
typedef HWND EGLNativeWindowType;
|
||||||
#endif // defined(WINAPI_FAMILY) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
#endif
|
||||||
|
|
||||||
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
|
|
||||||
#include "KHR/khrplatform.h"
|
#include "KHR/khrplatform.h"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
//
|
//
|
||||||
// This is the platform independent interface between an OGL driver
|
// This is the platform independent interface between an OGL driver
|
||||||
// and the shading language compiler.
|
// and the shading language compiler.
|
||||||
|
@ -39,20 +43,20 @@ typedef unsigned int GLenum;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be included after GLenum proxy typedef
|
// Must be included after GLenum proxy typedef
|
||||||
|
// Note: make sure to increment ANGLE_SH_VERSION when changing ShaderVars.h
|
||||||
#include "ShaderVars.h"
|
#include "ShaderVars.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Version number for shader translation API.
|
// Version number for shader translation API.
|
||||||
// It is incremented every time the API changes.
|
// It is incremented every time the API changes.
|
||||||
#define ANGLE_SH_VERSION 129
|
#define ANGLE_SH_VERSION 132
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SH_GLES2_SPEC = 0x8B40,
|
SH_GLES2_SPEC = 0x8B40,
|
||||||
SH_WEBGL_SPEC = 0x8B41,
|
SH_WEBGL_SPEC = 0x8B41,
|
||||||
|
|
||||||
|
SH_GLES3_SPEC = 0x8B86,
|
||||||
|
SH_WEBGL2_SPEC = 0x8B87,
|
||||||
|
|
||||||
// The CSS Shaders spec is a subset of the WebGL spec.
|
// The CSS Shaders spec is a subset of the WebGL spec.
|
||||||
//
|
//
|
||||||
// In both CSS vertex and fragment shaders, ANGLE:
|
// In both CSS vertex and fragment shaders, ANGLE:
|
||||||
|
@ -84,31 +88,6 @@ typedef enum {
|
||||||
SH_HLSL11_OUTPUT = 0x8B48
|
SH_HLSL11_OUTPUT = 0x8B48
|
||||||
} ShShaderOutput;
|
} 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.
|
// Compile options.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SH_VALIDATE = 0,
|
SH_VALIDATE = 0,
|
||||||
|
@ -188,6 +167,11 @@ typedef enum {
|
||||||
// This flag scalarizes vec/ivec/bvec/mat constructor args.
|
// This flag scalarizes vec/ivec/bvec/mat constructor args.
|
||||||
// It is intended as a workaround for Linux/Mac driver bugs.
|
// It is intended as a workaround for Linux/Mac driver bugs.
|
||||||
SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS = 0x40000,
|
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;
|
} ShCompileOptions;
|
||||||
|
|
||||||
// Defines alternate strategies for implementing array index clamping.
|
// Defines alternate strategies for implementing array index clamping.
|
||||||
|
@ -202,14 +186,14 @@ typedef enum {
|
||||||
//
|
//
|
||||||
// Driver must call this first, once, before doing any other
|
// Driver must call this first, once, before doing any other
|
||||||
// compiler operations.
|
// 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.
|
// 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
|
// The 64 bits hash function. The first parameter is the input string; the
|
||||||
// second parameter is the string length.
|
// second parameter is the string length.
|
||||||
|
@ -240,6 +224,12 @@ typedef struct
|
||||||
int EXT_frag_depth;
|
int EXT_frag_depth;
|
||||||
int EXT_shader_texture_lod;
|
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.
|
// Set to 1 if highp precision is supported in the fragment language.
|
||||||
// Default is 0.
|
// Default is 0.
|
||||||
int FragmentPrecisionHigh;
|
int FragmentPrecisionHigh;
|
||||||
|
@ -268,8 +258,10 @@ typedef struct
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize built-in resources with minimum expected values.
|
// 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,
|
// 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.
|
// 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.
|
// This function must be updated whenever ShBuiltInResources is changed.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// handle: Specifies the handle of the compiler to be used.
|
// handle: Specifies the handle of the compiler to be used.
|
||||||
// outStringLen: Specifies the size of the buffer, in number of characters. The size
|
COMPILER_EXPORT const std::string &ShGetBuiltInResourcesString(const ShHandle handle);
|
||||||
// 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);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Driver calls these to create and destroy compiler objects.
|
// Driver calls these to create and destroy compiler objects.
|
||||||
|
@ -307,12 +296,12 @@ COMPILER_EXPORT ShHandle ShConstructCompiler(
|
||||||
sh::GLenum type,
|
sh::GLenum type,
|
||||||
ShShaderSpec spec,
|
ShShaderSpec spec,
|
||||||
ShShaderOutput output,
|
ShShaderOutput output,
|
||||||
const ShBuiltInResources* resources);
|
const ShBuiltInResources *resources);
|
||||||
COMPILER_EXPORT void ShDestruct(ShHandle handle);
|
COMPILER_EXPORT void ShDestruct(ShHandle handle);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Compiles the given shader source.
|
// 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:
|
// Parameters:
|
||||||
// handle: Specifies the handle of compiler to be used.
|
// handle: Specifies the handle of compiler to be used.
|
||||||
// shaderStrings: Specifies an array of pointers to null-terminated strings
|
// 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.
|
// SH_VARIABLES: Extracts attributes, uniforms, and varyings.
|
||||||
// Can be queried by calling ShGetVariableInfo().
|
// Can be queried by calling ShGetVariableInfo().
|
||||||
//
|
//
|
||||||
COMPILER_EXPORT int ShCompile(
|
COMPILER_EXPORT bool ShCompile(
|
||||||
const ShHandle handle,
|
const ShHandle handle,
|
||||||
const char* const shaderStrings[],
|
const char * const shaderStrings[],
|
||||||
size_t numStrings,
|
size_t numStrings,
|
||||||
int compileOptions
|
int compileOptions);
|
||||||
);
|
|
||||||
|
|
||||||
// Returns a parameter from a compiled shader.
|
// Return the version of the shader language.
|
||||||
|
COMPILER_EXPORT int ShGetShaderVersion(const ShHandle handle);
|
||||||
|
|
||||||
|
// Return the currently set language output type.
|
||||||
|
COMPILER_EXPORT ShShaderOutput ShGetShaderOutputType(
|
||||||
|
const ShHandle handle);
|
||||||
|
|
||||||
|
// Returns null-terminated information log for a compiled shader.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// handle: Specifies the compiler
|
// handle: Specifies the compiler
|
||||||
// pname: Specifies the parameter to query.
|
COMPILER_EXPORT const std::string &ShGetInfoLog(const ShHandle handle);
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Returns nul-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);
|
|
||||||
|
|
||||||
// Returns null-terminated object code for a compiled shader.
|
// Returns null-terminated object code for a compiled shader.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// handle: Specifies the compiler
|
// handle: Specifies the compiler
|
||||||
// infoLog: Specifies an array of characters that is used to return
|
COMPILER_EXPORT const std::string &ShGetObjectCode(const ShHandle handle);
|
||||||
// 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.
|
// 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:
|
// Parameters:
|
||||||
// handle: Specifies the compiler
|
// handle: Specifies the compiler
|
||||||
// variableType: Specifies the variable type; options include
|
COMPILER_EXPORT const std::map<std::string, std::string> *ShGetNameHashingMap(
|
||||||
// SH_ACTIVE_ATTRIBUTES, SH_ACTIVE_UNIFORMS, SH_VARYINGS.
|
const ShHandle handle);
|
||||||
// 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.
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Shader variable inspection.
|
// Shader variable inspection.
|
||||||
// Returns a pointer to a list of variables of the designated type.
|
// Returns a pointer to a list of variables of the designated type.
|
||||||
|
@ -470,17 +372,17 @@ typedef struct
|
||||||
int size;
|
int size;
|
||||||
} ShVariableInfo;
|
} 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.
|
// 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.
|
// flag above.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// maxVectors: the available rows of registers.
|
// maxVectors: the available rows of registers.
|
||||||
// varInfoArray: an array of variable info (types and sizes).
|
// varInfoArray: an array of variable info (types and sizes).
|
||||||
// varInfoArraySize: the size of the variable array.
|
// varInfoArraySize: the size of the variable array.
|
||||||
COMPILER_EXPORT int ShCheckVariablesWithinPackingLimits(
|
COMPILER_EXPORT bool ShCheckVariablesWithinPackingLimits(
|
||||||
int maxVectors,
|
int maxVectors,
|
||||||
ShVariableInfo* varInfoArray,
|
ShVariableInfo *varInfoArray,
|
||||||
size_t varInfoArraySize);
|
size_t varInfoArraySize);
|
||||||
|
|
||||||
// Gives the compiler-assigned register for an interface block.
|
// Gives the compiler-assigned register for an interface block.
|
||||||
|
@ -491,7 +393,7 @@ COMPILER_EXPORT int ShCheckVariablesWithinPackingLimits(
|
||||||
// interfaceBlockName: Specifies the interface block
|
// interfaceBlockName: Specifies the interface block
|
||||||
// indexOut: output variable that stores the assigned register
|
// indexOut: output variable that stores the assigned register
|
||||||
COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle,
|
COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle,
|
||||||
const char *interfaceBlockName,
|
const std::string &interfaceBlockName,
|
||||||
unsigned int *indexOut);
|
unsigned int *indexOut);
|
||||||
|
|
||||||
// Gives the compiler-assigned register for uniforms in the default
|
// 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
|
// interfaceBlockName: Specifies the uniform
|
||||||
// indexOut: output variable that stores the assigned register
|
// indexOut: output variable that stores the assigned register
|
||||||
COMPILER_EXPORT bool ShGetUniformRegister(const ShHandle handle,
|
COMPILER_EXPORT bool ShGetUniformRegister(const ShHandle handle,
|
||||||
const char *uniformName,
|
const std::string &uniformName,
|
||||||
unsigned int *indexOut);
|
unsigned int *indexOut);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // _COMPILER_INTERFACE_INCLUDED_
|
#endif // _COMPILER_INTERFACE_INCLUDED_
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
// Assume ShaderLang.h is included before ShaderVars.h, for sh::GLenum
|
// 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
|
namespace sh
|
||||||
{
|
{
|
||||||
|
@ -39,7 +40,7 @@ enum BlockLayoutType
|
||||||
// Note: we must override the copy constructor and assignment operator so we can
|
// Note: we must override the copy constructor and assignment operator so we can
|
||||||
// work around excessive GCC binary bloating:
|
// work around excessive GCC binary bloating:
|
||||||
// See https://code.google.com/p/angleproject/issues/detail?id=697
|
// See https://code.google.com/p/angleproject/issues/detail?id=697
|
||||||
struct ShaderVariable
|
struct COMPILER_EXPORT ShaderVariable
|
||||||
{
|
{
|
||||||
ShaderVariable();
|
ShaderVariable();
|
||||||
ShaderVariable(GLenum typeIn, unsigned int arraySizeIn);
|
ShaderVariable(GLenum typeIn, unsigned int arraySizeIn);
|
||||||
|
@ -49,6 +50,22 @@ struct ShaderVariable
|
||||||
|
|
||||||
bool isArray() const { return arraySize > 0; }
|
bool isArray() const { return arraySize > 0; }
|
||||||
unsigned int elementCount() const { return std::max(1u, arraySize); }
|
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 type;
|
||||||
GLenum precision;
|
GLenum precision;
|
||||||
|
@ -56,58 +73,97 @@ struct ShaderVariable
|
||||||
std::string mappedName;
|
std::string mappedName;
|
||||||
unsigned int arraySize;
|
unsigned int arraySize;
|
||||||
bool staticUse;
|
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();
|
~Uniform();
|
||||||
Uniform(const Uniform &other);
|
Uniform(const Uniform &other);
|
||||||
Uniform &operator=(const Uniform &other);
|
Uniform &operator=(const Uniform &other);
|
||||||
|
bool operator==(const Uniform &other) const;
|
||||||
|
bool operator!=(const Uniform &other) const
|
||||||
|
{
|
||||||
|
return !operator==(other);
|
||||||
|
}
|
||||||
|
|
||||||
bool isStruct() const { return !fields.empty(); }
|
// Decide whether two uniforms are the same at shader link time,
|
||||||
|
// assuming one from vertex shader and the other from fragment shader.
|
||||||
std::vector<Uniform> fields;
|
// 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();
|
~Attribute();
|
||||||
Attribute(const Attribute &other);
|
Attribute(const Attribute &other);
|
||||||
Attribute &operator=(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;
|
int location;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InterfaceBlockField : public ShaderVariable
|
struct COMPILER_EXPORT InterfaceBlockField : public ShaderVariable
|
||||||
{
|
{
|
||||||
InterfaceBlockField();
|
InterfaceBlockField();
|
||||||
~InterfaceBlockField();
|
~InterfaceBlockField();
|
||||||
InterfaceBlockField(const InterfaceBlockField &other);
|
InterfaceBlockField(const InterfaceBlockField &other);
|
||||||
InterfaceBlockField &operator=(const InterfaceBlockField &other);
|
InterfaceBlockField &operator=(const InterfaceBlockField &other);
|
||||||
|
bool operator==(const InterfaceBlockField &other) const;
|
||||||
|
bool operator!=(const InterfaceBlockField &other) const
|
||||||
|
{
|
||||||
|
return !operator==(other);
|
||||||
|
}
|
||||||
|
|
||||||
bool isStruct() const { return !fields.empty(); }
|
// 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 isRowMajorMatrix;
|
bool isRowMajorLayout;
|
||||||
std::vector<InterfaceBlockField> fields;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Varying : public ShaderVariable
|
struct COMPILER_EXPORT Varying : public ShaderVariable
|
||||||
{
|
{
|
||||||
Varying();
|
Varying();
|
||||||
~Varying();
|
~Varying();
|
||||||
Varying(const Varying &other);
|
Varying(const Varying &otherg);
|
||||||
Varying &operator=(const Varying &other);
|
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;
|
InterpolationType interpolation;
|
||||||
std::vector<Varying> fields;
|
bool isInvariant;
|
||||||
std::string structName;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InterfaceBlock
|
struct COMPILER_EXPORT InterfaceBlock
|
||||||
{
|
{
|
||||||
InterfaceBlock();
|
InterfaceBlock();
|
||||||
~InterfaceBlock();
|
~InterfaceBlock();
|
||||||
|
@ -116,6 +172,7 @@ struct InterfaceBlock
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string mappedName;
|
std::string mappedName;
|
||||||
|
std::string instanceName;
|
||||||
unsigned int arraySize;
|
unsigned int arraySize;
|
||||||
BlockLayoutType layout;
|
BlockLayoutType layout;
|
||||||
bool isRowMajorLayout;
|
bool isRowMajorLayout;
|
||||||
|
|
|
@ -142,6 +142,11 @@ void OSWinrt::set_gl_context(ContextEGL* p_context) {
|
||||||
gl_context = 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) {
|
void OSWinrt::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) {
|
||||||
|
|
||||||
main_loop=NULL;
|
main_loop=NULL;
|
||||||
|
@ -568,8 +573,12 @@ Error OSWinrt::shell_open(String p_uri) {
|
||||||
|
|
||||||
String OSWinrt::get_locale() const {
|
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;
|
Platform::String ^language = Windows::Globalization::Language::CurrentInputMethodLanguageTag;
|
||||||
return language->Data();
|
return language->Data();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSWinrt::release_rendering_thread() {
|
void OSWinrt::release_rendering_thread() {
|
||||||
|
|
|
@ -228,6 +228,7 @@ public:
|
||||||
virtual String get_data_dir() const;
|
virtual String get_data_dir() const;
|
||||||
|
|
||||||
void set_gl_context(ContextEGL* p_context);
|
void set_gl_context(ContextEGL* p_context);
|
||||||
|
void screen_size_changed();
|
||||||
|
|
||||||
virtual void release_rendering_thread();
|
virtual void release_rendering_thread();
|
||||||
virtual void make_rendering_thread();
|
virtual void make_rendering_thread();
|
||||||
|
|
|
@ -41,7 +41,6 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {
|
||||||
|
|
||||||
bool solids=build_mode==BUILD_SOLIDS;
|
bool solids=build_mode==BUILD_SOLIDS;
|
||||||
|
|
||||||
|
|
||||||
if (solids) {
|
if (solids) {
|
||||||
|
|
||||||
//here comes the sun, lalalala
|
//here comes the sun, lalalala
|
||||||
|
@ -51,6 +50,8 @@ void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {
|
||||||
Ref<ConvexPolygonShape2D> convex = memnew( ConvexPolygonShape2D );
|
Ref<ConvexPolygonShape2D> convex = memnew( ConvexPolygonShape2D );
|
||||||
convex->set_points(decomp[i]);
|
convex->set_points(decomp[i]);
|
||||||
co->add_shape(convex,get_transform());
|
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);
|
concave->set_segments(segments);
|
||||||
|
|
||||||
co->add_shape(concave,get_transform());
|
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;
|
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() {
|
void CollisionPolygon2D::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("_add_to_collision_object"),&CollisionPolygon2D::_add_to_collision_object);
|
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("set_build_mode"),&CollisionPolygon2D::set_build_mode);
|
||||||
ObjectTypeDB::bind_method(_MD("get_build_mode"),&CollisionPolygon2D::get_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::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::VECTOR2_ARRAY,"polygon"),_SCS("set_polygon"),_SCS("get_polygon"));
|
||||||
|
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"trigger"),_SCS("set_trigger"),_SCS("is_trigger"));
|
||||||
}
|
}
|
||||||
|
|
||||||
CollisionPolygon2D::CollisionPolygon2D() {
|
CollisionPolygon2D::CollisionPolygon2D() {
|
||||||
|
|
||||||
aabb=Rect2(-10,-10,20,20);
|
aabb=Rect2(-10,-10,20,20);
|
||||||
build_mode=BUILD_SOLIDS;
|
build_mode=BUILD_SOLIDS;
|
||||||
|
trigger=false;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ protected:
|
||||||
Rect2 aabb;
|
Rect2 aabb;
|
||||||
BuildMode build_mode;
|
BuildMode build_mode;
|
||||||
Vector<Point2> polygon;
|
Vector<Point2> polygon;
|
||||||
|
bool trigger;
|
||||||
|
|
||||||
void _add_to_collision_object(Object *p_obj);
|
void _add_to_collision_object(Object *p_obj);
|
||||||
void _update_parent();
|
void _update_parent();
|
||||||
|
@ -60,6 +61,9 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
void set_trigger(bool p_trigger);
|
||||||
|
bool is_trigger() const;
|
||||||
|
|
||||||
void set_build_mode(BuildMode p_mode);
|
void set_build_mode(BuildMode p_mode);
|
||||||
BuildMode get_build_mode() const;
|
BuildMode get_build_mode() const;
|
||||||
|
|
||||||
|
|
|
@ -858,7 +858,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
|
||||||
//motion recover
|
//motion recover
|
||||||
for(int i=0;i<get_shape_count();i++) {
|
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))
|
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;
|
collided=true;
|
||||||
|
|
||||||
|
@ -902,6 +903,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
|
||||||
|
|
||||||
for(int i=0;i<get_shape_count();i++) {
|
for(int i=0;i<get_shape_count();i++) {
|
||||||
|
|
||||||
|
if (is_shape_set_as_trigger(i))
|
||||||
|
continue;
|
||||||
|
|
||||||
float lsafe,lunsafe;
|
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);
|
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);
|
||||||
|
|
|
@ -870,6 +870,9 @@ Vector3 KinematicBody::move(const Vector3& p_motion) {
|
||||||
for(int j=0;j<8;j++) {
|
for(int j=0;j<8;j++) {
|
||||||
for(int i=0;i<res_shapes;i++) {
|
for(int i=0;i<res_shapes;i++) {
|
||||||
|
|
||||||
|
if (is_shape_set_as_trigger(i))
|
||||||
|
continue;
|
||||||
|
|
||||||
Vector3 a = sr[i*2+0];
|
Vector3 a = sr[i*2+0];
|
||||||
Vector3 b = sr[i*2+1];
|
Vector3 b = sr[i*2+1];
|
||||||
//print_line(String()+a+" -> "+b);
|
//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++) {
|
for(int i=0;i<get_shape_count();i++) {
|
||||||
|
|
||||||
|
|
||||||
|
if (is_shape_set_as_trigger(i))
|
||||||
|
continue;
|
||||||
|
|
||||||
float lsafe,lunsafe;
|
float lsafe,lunsafe;
|
||||||
PhysicsDirectSpaceState::ShapeRestInfo lrest;
|
PhysicsDirectSpaceState::ShapeRestInfo lrest;
|
||||||
|
@ -1041,6 +1046,8 @@ bool KinematicBody::can_move_to(const Vector3& p_position, bool p_discrete) {
|
||||||
//fill exclude list..
|
//fill exclude list..
|
||||||
for(int i=0;i<get_shape_count();i++) {
|
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);
|
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)
|
if (col)
|
||||||
|
|
Loading…
Reference in New Issue