\r
--------------------------\r
Changes in 1.9 (not yet released)\r
+- Fix bug in rect::clipAgainst that had caused rects completely outside to the left-top of the rect to be clipped against ending up with both corners outside.\r
+ It still worked for UI in most cases as the resulting rectangle still had an area of 0.\r
+- Add getAlign functions to IGUIElement\r
- Add optional multitouch support to X11 (but disabled in IrrCompileConfig by default). Thanks @TheBrokenRail for a patch proposal based on example code from esjeon (patch #322).\r
- Slightly changed close window handling on X11 (optimized and avoids problems on some shells). Thanks @TheBrokenRail for a patch (was part of patch #322).\r
- Add getActiveColor functions to IGUIStaticText and IGUIButton (get currently used color).\r
}\r
}\r
\r
+ //! How left element border is aligned when parent is resized\r
+ EGUI_ALIGNMENT getAlignLeft() const \r
+ {\r
+ return AlignLeft;\r
+ }\r
+\r
+ //! How right element border is aligned when parent is resized\r
+ EGUI_ALIGNMENT getAlignRight() const \r
+ {\r
+ return AlignRight;\r
+ }\r
+\r
+ //! How top element border is aligned when parent is resized\r
+ EGUI_ALIGNMENT getAlignTop() const \r
+ {\r
+ return AlignTop;\r
+ }\r
+\r
+ //! How bottom element border is aligned when parent is resized\r
+ EGUI_ALIGNMENT getAlignBottom() const \r
+ {\r
+ return AlignBottom;\r
+ }\r
\r
//! Updates the absolute position.\r
virtual void updateAbsolutePosition()\r
if (other.LowerRightCorner.Y < LowerRightCorner.Y)\r
LowerRightCorner.Y = other.LowerRightCorner.Y;\r
\r
+ if (other.UpperLeftCorner.X > LowerRightCorner.X)\r
+ LowerRightCorner.X = other.UpperLeftCorner.X;\r
+ if (other.UpperLeftCorner.Y > LowerRightCorner.Y)\r
+ LowerRightCorner.Y = other.UpperLeftCorner.Y;\r
+\r
+ if (other.LowerRightCorner.X < UpperLeftCorner.X)\r
+ UpperLeftCorner.X = other.LowerRightCorner.X;\r
+ if (other.LowerRightCorner.Y < UpperLeftCorner.Y)\r
+ UpperLeftCorner.Y = other.LowerRightCorner.Y;\r
+\r
if (other.UpperLeftCorner.X > UpperLeftCorner.X)\r
UpperLeftCorner.X = other.UpperLeftCorner.X;\r
if (other.UpperLeftCorner.Y > UpperLeftCorner.Y)\r
UpperLeftCorner.Y = other.UpperLeftCorner.Y;\r
-\r
- // correct possible invalid rect resulting from clipping\r
- if (UpperLeftCorner.Y > LowerRightCorner.Y)\r
- UpperLeftCorner.Y = LowerRightCorner.Y;\r
- if (UpperLeftCorner.X > LowerRightCorner.X)\r
- UpperLeftCorner.X = LowerRightCorner.X;\r
}\r
\r
//! Moves this rectangle to fit inside another one.\r
on = 1;\r
break;\r
\r
- case EVDF_TEXTURE_NPOT: // for 2D\r
- on = 0;\r
- break;\r
-\r
case EVDF_ARB_FRAGMENT_PROGRAM_1:\r
case EVDF_ARB_VERTEX_PROGRAM_1:\r
on = 1;\r
break;\r
-#if defined(PATCH_SUPERTUX_8_0_1)\r
+#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)\r
case EVDF_TEXTURE_NPOT:\r
case EVDF_ARB_GLSL:\r
on = 1;\r
break;\r
+#else\r
+ case EVDF_TEXTURE_NPOT: // for 2D\r
+ on = 0;\r
+ break;\r
#endif\r
\r
#if defined(SOFTWARE_DRIVER_2_2D_AS_3D)\r
inline void CBurningVideoDriver::select_polygon_mipmap_inside(s4DVertex* burning_restrict face[], const size_t tex, const CSoftwareTexture2_Bound& b) const\r
{\r
#ifdef SOFTWARE_DRIVER_2_PERSPECTIVE_CORRECT\r
-#if defined(Tweak_Burning)\r
- (face[0] + 1)->Tex[tex].x = face[0]->Tex[tex].x * (face[0] + 1)->Pos.w * (b.w + Tweak.tex_w_add) + (b.cx + Tweak.tex_cx_add);\r
- (face[0] + 1)->Tex[tex].y = face[0]->Tex[tex].y * (face[0] + 1)->Pos.w * (b.h + Tweak.tex_h_add) + (b.cy + Tweak.tex_cy_add);\r
-\r
- (face[1] + 1)->Tex[tex].x = face[1]->Tex[tex].x * (face[1] + 1)->Pos.w * (b.w + Tweak.tex_w_add) + (b.cx + Tweak.tex_cx_add);\r
- (face[1] + 1)->Tex[tex].y = face[1]->Tex[tex].y * (face[1] + 1)->Pos.w * (b.h + Tweak.tex_h_add) + (b.cy + Tweak.tex_cy_add);\r
-\r
- (face[2] + 1)->Tex[tex].x = face[2]->Tex[tex].x * (face[2] + 1)->Pos.w * (b.w + Tweak.tex_w_add) + (b.cx + Tweak.tex_cx_add);\r
- (face[2] + 1)->Tex[tex].y = face[2]->Tex[tex].y * (face[2] + 1)->Pos.w * (b.h + Tweak.tex_h_add) + (b.cy + Tweak.tex_cy_add);\r
-#else\r
(face[0] + 1)->Tex[tex].x = face[0]->Tex[tex].x * (face[0] + 1)->Pos.w * b.w + b.cx;\r
(face[0] + 1)->Tex[tex].y = face[0]->Tex[tex].y * (face[0] + 1)->Pos.w * b.h + b.cy;\r
\r
\r
(face[2] + 1)->Tex[tex].x = face[2]->Tex[tex].x * (face[2] + 1)->Pos.w * b.w + b.cx;\r
(face[2] + 1)->Tex[tex].y = face[2]->Tex[tex].y * (face[2] + 1)->Pos.w * b.h + b.cy;\r
-#endif\r
#else\r
(face[0] + 1)->Tex[tex].x = face[0]->Tex[tex].x * b.w;\r
(face[0] + 1)->Tex[tex].y = face[0]->Tex[tex].y * b.h;\r
os::Printer::log("BurningVideo pointer should be 8 bytes", ELL_ERROR);\r
_IRR_DEBUG_BREAK_IF(1);\r
}\r
-#endif\r
\r
if (((unsigned long long)Transformation&15) || ((unsigned long long)TransformationFlag & 15))\r
{\r
os::Printer::log("BurningVideo Matrix Stack not 16 byte aligned", ELL_ERROR);\r
_IRR_DEBUG_BREAK_IF(1);\r
}\r
+#endif\r
\r
\r
SVSize* vSize = VertexCache.vSize;\r
//empty proxy image\r
IImage* img = createImageFromData(format, size, 0, true, false);\r
ITexture* tex = new CSoftwareTexture2(img, name, CSoftwareTexture2::IS_RENDERTARGET /*| CSoftwareTexture2::GEN_MIPMAP */, this);\r
- img->drop();\r
+ if ( img ) img->drop();\r
addTexture(tex);\r
tex->drop();\r
return tex;\r
IShaderConstantSetCallBack* callback,\r
E_MATERIAL_TYPE baseMaterial,\r
s32 userData\r
+#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)\r
+ , E_GPU_SHADING_LANGUAGE shadingLang\r
+#endif\r
)\r
{\r
s32 materialID = -1;\r
IDepthBuffer * getDepthBuffer () { return DepthBuffer; }\r
IStencilBuffer * getStencilBuffer () { return StencilBuffer; }\r
\r
- //#define Tweak_Burning\r
-#if defined(Tweak_Burning)\r
- virtual void postEventFromUser(const void* sevent) _IRR_OVERRIDE_;\r
-#endif\r
-\r
//! Adds a new material renderer to the VideoDriver, using pixel and/or\r
//! vertex shaders to render geometry.\r
virtual s32 addShaderMaterial(const c8* vertexShaderProgram,\r
u32 verticesOut = 0,\r
IShaderConstantSetCallBack* callback = 0,\r
E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID,\r
- s32 userData = 0) _IRR_OVERRIDE_;\r
+ s32 userData = 0\r
+#if defined(PATCH_SUPERTUX_8_0_1_with_1_9_0)\r
+ , E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT\r
+#endif\r
+ ) _IRR_OVERRIDE_;\r
\r
//IMaterialRendererService\r
\r
setDebugName("IBurningShader");\r
#endif\r
\r
+#if defined(ENV64BIT)\r
if (((unsigned long long)&scan & 15) || ((unsigned long long)&line & 15))\r
{\r
os::Printer::log("BurningVideo Shader not 16 byte aligned", ELL_ERROR);\r
_IRR_DEBUG_BREAK_IF(1);\r
}\r
+#endif\r
\r
Interlaced.enable = 0;\r
Interlaced.bypass = 1;\r
{\r
constructor_IBurningShader(driver);\r
BaseMaterial = baseMaterial;\r
+ UserData = userData;\r
CallBack = callback;\r
if (CallBack)\r
CallBack->grab();\r
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = c11;
GCC_NO_COMMON_BLOCKS = YES;
- "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "DEBUG=1";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "PNG_ARM_NEON_OPT=0",
+ );
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = c11;
GCC_NO_COMMON_BLOCKS = YES;
- "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "NDEBUG=1";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "NDEBUG=1",
+ "PNG_ARM_NEON_OPT=0",
+ );
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
\r
CXXINCS = -I../../include -Izlib -Ijpeglib -Ilibpng\r
CPPFLAGS += $(CXXINCS) -DIRRLICHT_EXPORTS=1\r
-CXXFLAGS += -Wall -pipe -fno-exceptions -fno-rtti -fstrict-aliasing\r
+CXXFLAGS += -Wall -pipe -fno-exceptions -fno-rtti\r
#CXXFLAGS += -std=gnu++11 -U__STRICT_ANSI__\r
ifndef NDEBUG\r
CXXFLAGS += -g -D_DEBUG\r
else\r
- ifndef EMSCRIPTEN\r
- CXXFLAGS += -fexpensive-optimizations -O3\r
- else\r
- CXXFLAGS += -O3\r
- endif\r
+ CXXFLAGS += -O3\r
endif\r
ifdef PROFILE\r
CXXFLAGS += -pg\r
CXXFLAGS += -s WASM=1\r
endif \r
else\r
- CFLAGS := -O3 -fexpensive-optimizations -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES -DPNG_ARM_NEON_OPT=0\r
+ CFLAGS := -O3 -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES -DPNG_ARM_NEON_OPT=0\r
endif\r
\r
sharedlib sharedlib_osx: CXXFLAGS += -fPIC\r
\r
//! Compiler Align\r
#if defined(_MSC_VER)\r
+#if defined(ENV64BIT)\r
#define ALIGN(x) __declspec(align(x))\r
+#else\r
+// ALIGN(16) not working\r
+#define ALIGN(x) __declspec(align(8))\r
+#endif\r
#elif defined(__GNUC__)\r
#define ALIGN(x) __attribute__ ((aligned(x)))\r
#else\r
Tests finished. 72 tests of 72 passed.\r
Compiled as DEBUG\r
-Test suite pass at GMT Tue Dec 01 13:34:31 2020\r
+Test suite pass at GMT Thu Feb 11 14:00:00 2021\r
\r