From d3ca7e27da152ce2f3d46a2ddb581f596feb213a Mon Sep 17 00:00:00 2001 From: Sebi <pape@vr.rwth-aachen.de> Date: Wed, 17 Apr 2024 16:59:09 +0200 Subject: [PATCH] Rewriting Dashers color handling and reading to support transparency --- Source/DasherVR/Private/Dasher3DWidget.cpp | 39 ++----- Source/DasherVR/Private/SDasherWidget.cpp | 108 ++++++-------------- Source/DasherVR/Public/Dasher3DWidget.h | 17 ++- Source/DasherVR/Public/SDasherWidget.h | 15 ++- Source/Thirdparty/Dasher/DasherCore | 2 +- Source/Thirdparty/Dasher/Lib/DasherCore.lib | 4 +- Source/Thirdparty/Dasher/Lib/DasherCore.pdb | Bin 10186752 -> 10326016 bytes 7 files changed, 59 insertions(+), 126 deletions(-) diff --git a/Source/DasherVR/Private/Dasher3DWidget.cpp b/Source/DasherVR/Private/Dasher3DWidget.cpp index f5d673a..d52de31 100644 --- a/Source/DasherVR/Private/Dasher3DWidget.cpp +++ b/Source/DasherVR/Private/Dasher3DWidget.cpp @@ -78,9 +78,9 @@ std::pair<Dasher::screenint, Dasher::screenint> ADasher3DWidget::TextSize(Label* return {CharScale.X, CharScale.Y}; } -void ADasher3DWidget::DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, int iColour){} +void ADasher3DWidget::DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color){} -void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, int Colour, int iOutlineColour, int iThickness) { +void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) { if (sizeX == 0 || sizeY == 0) return; const FVector Scale = FVector(FVector2D(sizeX, sizeY) / DrawingSize, @@ -88,14 +88,7 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D + FVector(extrusionLevel,extrusionLevel,0)*FLT_EPSILON; const FVector2D Translation = FVector2D(posX, posY) / DrawingSize - FVector2D(0.5f, 0.5f); - FLinearColor RectColor; - - if (ColorPalette) { - RectColor = FLinearColor(ColorPalette->Colors[Colour].Red / 255.0, ColorPalette->Colors[Colour].Green / 255.0, ColorPalette->Colors[Colour].Blue / 255.0); - } - else { - RectColor = FLinearColor::Blue; - } + const FLinearColor RectColor = FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0); BackBuffer->first.Add(FTransform(FQuat::Identity, FVector(Translation, -ExtrusionLevelToHeight(levelUnderCrosshair)) * WorldToMeters, Scale)); BackBuffer->second.Add(RectColor.R); @@ -108,7 +101,7 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D } // x & y are given as upper left corner of the character -void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, int iColour) { +void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) { float CharacterOffset = 0; // in Meters for (int i = 0; i < label->m_strText.size(); i++) @@ -154,17 +147,17 @@ void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::scr } } -void ADasher3DWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int Colour, int iOutlineColour, int iThickness) +void ADasher3DWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) { - DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, 0, Colour, iOutlineColour, iThickness); + DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, 0, color, outlineColor, iThickness); } -void ADasher3DWidget::DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, int iFillColour, int iLineColour, int iLineWidth) +void ADasher3DWidget::DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth) { //Todo } -void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour) +void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, const Dasher::ColorPalette::Color& color) { for(int i = 1; i < Number; i++) { @@ -175,14 +168,7 @@ void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour const FVector2D Translation = FVector2D((p2.x - p1.x)/2.0f + p1.x, (p2.y - p1.y)/2.0f + p1.y) / DrawingSize - FVector2D(0.5f, 0.5f); const FQuat Rotation = FQuat().MakeFromEuler({0,0,FMath::RadiansToDegrees(FMath::Atan2(static_cast<float>(p2.y - p1.y), static_cast<float>(p2.x - p1.x)))}); - FLinearColor RectColor; - - if (ColorPalette) { - RectColor = FLinearColor(ColorPalette->Colors[Colour].Red / 255.0, ColorPalette->Colors[Colour].Green / 255.0, ColorPalette->Colors[Colour].Blue / 255.0); - } - else { - RectColor = FLinearColor::Black; - } + const FLinearColor RectColor = FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0); BackBuffer->first.Add(FTransform(Rotation, FVector(Translation, 0) * WorldToMeters, Scale)); BackBuffer->second.Add(RectColor.R); @@ -195,7 +181,7 @@ void ADasher3DWidget::Polyline(point* Points, int Number, int iWidth, int Colour } } -void ADasher3DWidget::Polygon(point* Points, int Number, int fillColour, int outlineColour, int lineWidth) +void ADasher3DWidget::Polygon(point* Points, int Number, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& outlineColor, int lineWidth) { //Todo } @@ -238,11 +224,6 @@ void ADasher3DWidget::Display() } -void ADasher3DWidget::SetColourScheme(const Dasher::CColourIO::ColourInfo* pColourScheme) -{ - ColorPalette = pColourScheme; -} - bool ADasher3DWidget::IsPointVisible(Dasher::screenint x, Dasher::screenint y) { return true; diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp index dc69aa9..3f715fe 100644 --- a/Source/DasherVR/Private/SDasherWidget.cpp +++ b/Source/DasherVR/Private/SDasherWidget.cpp @@ -30,7 +30,6 @@ void SDasherWidget::UnpauseInput() InputPaused = false; } - //Event Handlers //Mouse position saved for mouse Input FReply SDasherWidget::HandleMouseMoveEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent) @@ -183,13 +182,6 @@ void SDasherWidget::SetParameter(FString ParameterName, FString Value) { } } - - -//Set the colour Scheme for dasher -void SDasherWidget::SetColourScheme(const Dasher::CColourIO::ColourInfo* pcolours) { - ColorPalette = pcolours; -} - //paints our stuff, then lets compoundwidget (super::) draw its stuff //This draws from bottom to top rectangles->lines->labels, this is enough for our use, but for more complex scenarios a proper layering system might have to be implemented int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyClippingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const @@ -212,7 +204,7 @@ int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe RectObject = static_cast<FFilledRect*>(GeneralObject.Get()); Size = { FMath::Abs(RectObject->top.X - RectObject->bottom.X), FMath::Abs(RectObject->top.Y - RectObject->bottom.Y) }; FSlateDrawElement::MakeBox(OutDrawElements, LayerId++, AllottedGeometry.ToPaintGeometry(Size, FSlateLayoutTransform(1, RectObject->top)), &MyBrush, ESlateDrawEffect::None, RectObject->color); //actually adds the box to the geometry - break; + break; case Writing: WritingObject = static_cast<FWriting*>(GeneralObject.Get()); Text = FString(UTF8_TO_TCHAR(WritingObject->label->m_strText.c_str())); @@ -280,85 +272,51 @@ void SDasherWidget::Display() { } //Functions for Drawing -void SDasherWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int colour, int iOutlineColour, int iThickness) +void SDasherWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) { - FLinearColor RectColorFG = FLinearColor(0, 0, 0); - FLinearColor RectColorBG = FLinearColor(0, 0, 0); - - FVector2D TopBG = FVector2D(x1, y1); - FVector2D BottomBG = FVector2D(x2, y2); - FVector2D TopFG(x1, y1); - FVector2D BottomFG(x2, y2); - - if (iThickness && !(colour == 99 || colour == 96)) - { - const int BGColour = iOutlineColour == -1 ? 3 : iOutlineColour; - TopFG = FVector2D(x1+iThickness, y1+iThickness); - BottomFG = FVector2D(x2-iThickness, y2-iThickness); - - RectColorBG = FLinearColor(ColorPalette->Colors[BGColour].Red / 255.0, ColorPalette->Colors[BGColour].Green / 255.0, ColorPalette->Colors[BGColour].Blue / 255.0); - BackBuffer->Add(MakeUnique<FFilledRect>(TopBG, BottomBG, RectColorBG)); - } - - - if (colour == 99 || colour == 96) - { - RectColorFG = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0, 0.5); - } - else - { - RectColorFG = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0); - } - - BackBuffer->Add(MakeUnique<FFilledRect>(TopFG, BottomFG, RectColorFG)); + FVector2D TopBG = FVector2D(x1, y1); + FVector2D BottomBG = FVector2D(x2, y2); + FVector2D TopFG(x1, y1); + FVector2D BottomFG(x2, y2); + + if (iThickness) + { + TopFG = FVector2D(x1+iThickness, y1+iThickness); + BottomFG = FVector2D(x2-iThickness, y2-iThickness); + + TArray<FVector2D> PointArray = { + {TopBG.X, TopBG.Y}, + {TopBG.X, BottomBG.Y}, + {BottomBG.X, BottomBG.Y}, + {BottomBG.X, TopBG.Y}, + {TopBG.X, TopBG.Y} + }; + + BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iThickness), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f))); + } + + if(color != Dasher::ColorPalette::noColor) + { + BackBuffer->Add(MakeUnique<FFilledRect>(TopFG, BottomFG, FLinearColor(color.Red / 255.0f, color.Green / 255.0f, color.Blue / 255.0f, color.Alpha / 255.0f))); + } } -void SDasherWidget::DrawString(CDasherScreen::Label* lab, screenint x1, screenint y1, unsigned int iSize, int colour) { - const FVector2D Pos(x1, y1); - - FLinearColor TextColor; - - if (ColorPalette) { - TextColor = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0); - } - else { - TextColor = FLinearColor::Black; - } - - BackBuffer->Add(MakeUnique<FWriting>(lab, Pos, static_cast<int>(iSize), TextColor)); +void SDasherWidget::DrawString(CDasherScreen::Label* lab, screenint x1, screenint y1, unsigned int iSize, const Dasher::ColorPalette::Color& color) { + BackBuffer->Add(MakeUnique<FWriting>(lab, FVector2D(x1, y1), static_cast<int>(iSize), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f))); } -void SDasherWidget::Polyline(CDasherScreen::point* points, int number, int iwidth, int colour) { - - FLinearColor LinearColor; - - if (ColorPalette) { - LinearColor = FLinearColor(ColorPalette->Colors[colour].Red / 255.0, ColorPalette->Colors[colour].Green / 255.0, ColorPalette->Colors[colour].Blue / 255.0); - } - else { - LinearColor = FLinearColor::Blue; - } - +void SDasherWidget::Polyline(CDasherScreen::point* points, int number, int iwidth, const Dasher::ColorPalette::Color& color) { TArray<FVector2D> PointArray; for (int i = 0; i < number; i++) { FVector2D Point(points[i].x, points[i].y); PointArray.Add(Point); } - BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), LinearColor)); + BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0f))); } //techincally polygons are just multiple polylines. Dasher doesn't actually draw polygons in our case. -void SDasherWidget::Polygon(CDasherScreen::point* points, int number, int fillcolour, int outlinecolour, int iwidth) { - FLinearColor LinearColor; - - if (ColorPalette) { - LinearColor = FLinearColor(ColorPalette->Colors[outlinecolour].Red / 255.0, ColorPalette->Colors[outlinecolour].Green / 255.0, ColorPalette->Colors[outlinecolour].Blue / 255.0); - } - else { - LinearColor = FLinearColor::Blue; - } - +void SDasherWidget::Polygon(CDasherScreen::point* points, int number, const Dasher::ColorPalette::Color& fillcolor, const Dasher::ColorPalette::Color& outlinecolor, int iwidth) { TArray<FVector2D> PointArray; for (int i = 0; i < number; i++) { FVector2D Point(points[i].x, points[i].y); @@ -366,7 +324,7 @@ void SDasherWidget::Polygon(CDasherScreen::point* points, int number, int fillco } PointArray.Add(FVector2D(points[0].x, points[0].y)); - BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), LinearColor)); + BackBuffer->Add(MakeUnique<FPolyLine>(PointArray, static_cast<float>(iwidth), FLinearColor(outlinecolor.Red / 255.0, outlinecolor.Green / 255.0, outlinecolor.Blue / 255.0, outlinecolor.Alpha / 255.0))); } //We pass through the contents of the dasher buffer diff --git a/Source/DasherVR/Public/Dasher3DWidget.h b/Source/DasherVR/Public/Dasher3DWidget.h index 2444822..df3167a 100644 --- a/Source/DasherVR/Public/Dasher3DWidget.h +++ b/Source/DasherVR/Public/Dasher3DWidget.h @@ -41,15 +41,14 @@ public: virtual void Tick(float DeltaTime) override; virtual std::pair<Dasher::screenint, Dasher::screenint> TextSize(Label* label, unsigned iFontSize) override; - virtual void DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, int iColour) override; - virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int Colour, int iOutlineColour, int iThickness) override; - virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, int Colour, int iOutlineColour, int iThickness) override; - virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, int iColour) override; - virtual void DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, int iFillColour, int iLineColour, int iLineWidth) override; - virtual void Polyline(point* Points, int Number, int iWidth, int Colour) override; - virtual void Polygon(point* Points, int Number, int fillColour, int outlineColour, int lineWidth) override; + virtual void DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color) override; + virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override; + virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override; + virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) override; + virtual void DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth) override; + virtual void Polyline(point* Points, int Number, int iWidth, const Dasher::ColorPalette::Color& color) override; + virtual void Polygon(point* Points, int Number, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& outlineColor, int lineWidth) override; virtual void Display() override; - virtual void SetColourScheme(const Dasher::CColourIO::ColourInfo* pColourScheme) override; virtual bool IsPointVisible(Dasher::screenint x, Dasher::screenint y) override; virtual bool GetScreenCoords(Dasher::screenint& iX, Dasher::screenint& iY, Dasher::CDasherView* pView) override; virtual bool MultiSizeFonts() override { return true; } @@ -69,8 +68,6 @@ public: virtual void PostInitializeComponents() override; private: - // stores color information - const Dasher::CColourIO::ColourInfo* ColorPalette = nullptr; FVector2D CursorPosition; float WorldToMeters; // normally 100 FVector2D DrawingSize = {1000,1000}; // Rendering Resolution diff --git a/Source/DasherVR/Public/SDasherWidget.h b/Source/DasherVR/Public/SDasherWidget.h index 74eac99..b3fa7ad 100644 --- a/Source/DasherVR/Public/SDasherWidget.h +++ b/Source/DasherVR/Public/SDasherWidget.h @@ -86,19 +86,17 @@ public: //set of functions inherited from Dasherscreen used for displaying, see DasherScreen for further info - virtual void SetColourScheme(const Dasher::CColourIO::ColourInfo* pcolours) override; - virtual std::pair<screenint, screenint> TextSize(CDasherScreen::Label* Label, unsigned int Size) override; - virtual void DrawString(CDasherScreen::Label *label, screenint x1, screenint y1, unsigned int size, int colour) override; + virtual void DrawString(CDasherScreen::Label *label, screenint x1, screenint y1, unsigned int size, const Dasher::ColorPalette::Color& color) override; - virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, int colour, int ioutlinecolour, int ithickness) override; + virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlinecolor, int ithickness) override; - virtual void DrawCircle(screenint icx, screenint icy, screenint ir, int ifillcolour, int ilinecolour, int ithickness) override {} //we don't really need to draw circles, so it's not implemented + virtual void DrawCircle(screenint icx, screenint icy, screenint ir, const Dasher::ColorPalette::Color& ifillcolor, const Dasher::ColorPalette::Color& ilinecolor, int ithickness) override {} //we don't really need to draw circles, so it's not implemented - virtual void Polyline(CDasherScreen::point* points, int number, int iwidth, int colour) override; + virtual void Polyline(CDasherScreen::point* points, int number, int iwidth, const Dasher::ColorPalette::Color& color) override; - virtual void Polygon(CDasherScreen::point* points, int number, int fillcolour, int outlinecolour, int iwidth) override; + virtual void Polygon(CDasherScreen::point* points, int number, const Dasher::ColorPalette::Color& fillcolor, const Dasher::ColorPalette::Color& outlinecolor, int iwidth) override; virtual void Display() override; @@ -137,7 +135,7 @@ public: //Allows to Pause Input void PauseInput(); void UnpauseInput(); - + FDasherMouseUpDelegate MouseUpListeners; FDasherMouseUpDelegate MouseDownListeners; FBufferManiputlationDelegate CharacterEntered; @@ -171,7 +169,6 @@ private: protected: // stores color information - const Dasher::CColourIO::ColourInfo* ColorPalette = nullptr; TSharedPtr<Dasher::DasherInterface> DasherMainInterface; }; diff --git a/Source/Thirdparty/Dasher/DasherCore b/Source/Thirdparty/Dasher/DasherCore index 6cc6411..a061849 160000 --- a/Source/Thirdparty/Dasher/DasherCore +++ b/Source/Thirdparty/Dasher/DasherCore @@ -1 +1 @@ -Subproject commit 6cc641100217e9e31cc949974724d2346eba7b15 +Subproject commit a061849126815c95bda625aee511b63030904236 diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.lib b/Source/Thirdparty/Dasher/Lib/DasherCore.lib index bd77a09..0541fb6 100644 --- a/Source/Thirdparty/Dasher/Lib/DasherCore.lib +++ b/Source/Thirdparty/Dasher/Lib/DasherCore.lib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91a02180462eac8d5b805d8ab56e6372f0952713e541722e1266ccdd01800930 -size 20021478 +oid sha256:461b5d6f6fec5470088444f0467fd5a7ed51f135bef940b1fc1142d950a950dd +size 19978948 diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.pdb b/Source/Thirdparty/Dasher/Lib/DasherCore.pdb index bd97442b08d1e1a2f37728fea5e52f9480e3ad91..130b41dcca7bc1dfc61498ffa647656a8c135793 100644 GIT binary patch delta 90455 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 delta 12169 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 F0|1=#K6L;9 -- GitLab