From c28c4a9db072ff0684ec84d76ce88f1576a9ae60 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Tue, 12 Dec 2023 18:52:03 -0800 Subject: [PATCH] Embed video shaders --- MoonWorks.csproj | 9 +++ lib/dav1dfile | 2 +- src/Game.cs | 3 +- src/Graphics/GraphicsDevice.cs | 75 +++++++++++------- .../Binary/video_fullscreen.vert.refresh | Bin 0 -> 1997 bytes .../Binary/video_yuv2rgba.frag.refresh | Bin 0 -> 3030 bytes .../Source}/video_fullscreen.vert | 0 .../StockShaders/Source}/video_yuv2rgba.frag | 0 8 files changed, 56 insertions(+), 33 deletions(-) create mode 100644 src/Graphics/StockShaders/Binary/video_fullscreen.vert.refresh create mode 100644 src/Graphics/StockShaders/Binary/video_yuv2rgba.frag.refresh rename src/{Video/Shaders => Graphics/StockShaders/Source}/video_fullscreen.vert (100%) rename src/{Video/Shaders => Graphics/StockShaders/Source}/video_yuv2rgba.frag (100%) diff --git a/MoonWorks.csproj b/MoonWorks.csproj index ff2f8b6..08dc026 100644 --- a/MoonWorks.csproj +++ b/MoonWorks.csproj @@ -25,4 +25,13 @@ Never + + + + MoonWorks.Graphics.StockShaders.VideoFullscreen.vert.refresh + + + MoonWorks.Graphics.StockShaders.VideoYUV2RGBA.frag.refresh + + diff --git a/lib/dav1dfile b/lib/dav1dfile index 3dcd69f..5065e2c 160000 --- a/lib/dav1dfile +++ b/lib/dav1dfile @@ -1 +1 @@ -Subproject commit 3dcd69ff85db80eea51481edd323b42c05993e1a +Subproject commit 5065e2cd4662dbe023b77a45ef967f975170dfff diff --git a/src/Game.cs b/src/Game.cs index 1b7286f..0ba395f 100644 --- a/src/Game.cs +++ b/src/Game.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using SDL2; +using SDL2; using MoonWorks.Audio; using MoonWorks.Graphics; using MoonWorks.Input; diff --git a/src/Graphics/GraphicsDevice.cs b/src/Graphics/GraphicsDevice.cs index 9920b09..191dbde 100644 --- a/src/Graphics/GraphicsDevice.cs +++ b/src/Graphics/GraphicsDevice.cs @@ -45,39 +45,54 @@ namespace MoonWorks.Graphics string basePath = System.AppContext.BaseDirectory; string videoVertPath = Path.Combine(basePath, "video_fullscreen.vert.refresh"); string videoFragPath = Path.Combine(basePath, "video_yuv2rgba.frag.refresh"); + + ShaderModule videoVertShader; + ShaderModule videoFragShader; + if (File.Exists(videoVertPath) && File.Exists(videoFragPath)) { - ShaderModule videoVertShader = new ShaderModule(this, videoVertPath); - ShaderModule videoFragShader = new ShaderModule(this, videoFragPath); - - VideoPipeline = new GraphicsPipeline( - this, - new GraphicsPipelineCreateInfo - { - AttachmentInfo = new GraphicsPipelineAttachmentInfo( - new ColorAttachmentDescription( - TextureFormat.R8G8B8A8, - ColorAttachmentBlendState.None - ) - ), - DepthStencilState = DepthStencilState.Disable, - VertexShaderInfo = GraphicsShaderInfo.Create( - videoVertShader, - "main", - 0 - ), - FragmentShaderInfo = GraphicsShaderInfo.Create( - videoFragShader, - "main", - 3 - ), - VertexInputState = VertexInputState.Empty, - RasterizerState = RasterizerState.CCW_CullNone, - PrimitiveType = PrimitiveType.TriangleList, - MultisampleState = MultisampleState.None - } - ); + videoVertShader = new ShaderModule(this, videoVertPath); + videoFragShader = new ShaderModule(this, videoFragPath); } + else + { + // use defaults + var assembly = typeof(GraphicsDevice).Assembly; + + using var vertStream = assembly.GetManifestResourceStream("MoonWorks.Graphics.StockShaders.VideoFullscreen.vert.refresh"); + using var fragStream = assembly.GetManifestResourceStream("MoonWorks.Graphics.StockShaders.VideoYUV2RGBA.frag.refresh"); + + videoVertShader = new ShaderModule(this, vertStream); + videoFragShader = new ShaderModule(this, fragStream); + } + + VideoPipeline = new GraphicsPipeline( + this, + new GraphicsPipelineCreateInfo + { + AttachmentInfo = new GraphicsPipelineAttachmentInfo( + new ColorAttachmentDescription( + TextureFormat.R8G8B8A8, + ColorAttachmentBlendState.None + ) + ), + DepthStencilState = DepthStencilState.Disable, + VertexShaderInfo = GraphicsShaderInfo.Create( + videoVertShader, + "main", + 0 + ), + FragmentShaderInfo = GraphicsShaderInfo.Create( + videoFragShader, + "main", + 3 + ), + VertexInputState = VertexInputState.Empty, + RasterizerState = RasterizerState.CCW_CullNone, + PrimitiveType = PrimitiveType.TriangleList, + MultisampleState = MultisampleState.None + } + ); FencePool = new FencePool(this); } diff --git a/src/Graphics/StockShaders/Binary/video_fullscreen.vert.refresh b/src/Graphics/StockShaders/Binary/video_fullscreen.vert.refresh new file mode 100644 index 0000000000000000000000000000000000000000..131f3a6723eca7e74fc34ae78601249f78245eb0 GIT binary patch literal 1997 zcmZ`(ZBNrs6uvMva5xYV@CETAiXGrG7BohfFBv#UmTWRY{ML}IkS4WVx|U20iHYC+ zQO3kS;J@$>_{GHMX?wQ|=p~1H&U2og*RK0-n!7_kM}$ZXFO3Q@B*sNftcv(diD4iD zSSGrwwPvl*4cdi`Cq*(QL@FYZGbzR*9ihbgBip5M1#%T~7m~u?Fz#<4kBF?O*34?X zUajqztxm`61|J;DbZpl$+qQ4D0{he=Z%pIaZp#VVIw1{)o-ZxZQBE%m4y<0q^ZYiD zOjN^(V;)+5VD)L_sxj;uFoV`Z4?FLQzBdX*x zv5)=1S8?plw%rYm+?Lh%aZ>b!j??$0F%!;)r;1KEuZ75pZO(2SvI5yf#i}l1JPM0< z#O)0*)A7wl`WnUDGBaI+rP&iFTRO9&62r+o{;c=NDt<0hZj z0yOrjV$ernUGunEGySZKcKp5$>QXyl9yJrtUMc%N3?V+hRQAKjj^pQ{Gd^=a#SYmI zd*C7d8%P>=87OCygK#e2fzqB#FwW*jf=wkj=i?@j(242K%)lnz zKwR!|7Q#5hU!XeflNe*te-A?JYro1pevtLrp;W%-7pM2+lnj|ipP2RSgzwP^m=Qu z2xToY8Rm>L*M}WXNJbs#c(eqGy`EU6&4mowyU;>eVnc?;ESx8(>a|HF{pk6UI^r;B l2^kZX4l%Ua14f`(|03&?DPMT=xM|-CLf=iA?B~RY{sM(xQ?&p9 literal 0 HcmV?d00001 diff --git a/src/Graphics/StockShaders/Binary/video_yuv2rgba.frag.refresh b/src/Graphics/StockShaders/Binary/video_yuv2rgba.frag.refresh new file mode 100644 index 0000000000000000000000000000000000000000..176e8b4cab11b1f354d8b8560720f4bdc97b806f GIT binary patch literal 3030 zcma)8*=`&~6fN8F!i32}HbMfl6P7WaG`-9k$4fGHOe9MNk1@+jYvgHLBTZ(ko*rX^ zB9VW{XYjxSuYknA@CQ8b5{YxF`*tcGTco1vy346^t8U$z&er4R7h}IoDK#;EcUq}2 zbzbGwno7oHH4cx0Z%WVW8_f-S5V!48*&*VBn$SREE~;sD4m0IxtJ7oPGQ@^l0*-zp zfHnbErT)UAb1J9SH-h!e&Gn77VE5o47{tfjFz9xAVbJbG;cnbH42hdDaGl<6ci1)o zlR%hxCz0bVS zTKkQDw@<=#WM_^$5Y|F$uH~T3d>?2lv6;)n(L7#g5_p;>iVRH>}j4@9cGda0WSyzMp%kA&~5W5ch*Jvi&?|smT--M8xy|9GLw26~Ex1h5RB+qT=W}f$9 z6GOk`;X9(AL-JVAnTI{ZJhX|EJa?e8pCr#+=w_aeU=u^XC_5Jd8qb^}$}Z--=61mi*LP_pK=0?+oHFD#Xs*LOz%NjyL0099n_kfha~8%4I&5@%?c2uY=GLkMf@f!uY!2fQ79%%k znmfUEE7}j^S3HOPPTShUS2o~(Ckk_~Z^F0maYsJx3YvXnEoS#_C)ZpUx!__}h&lVn zSbU7da$(tGaY&WVTKppx%Z+4<#qmFjt@*{Irheg`V>=bEyjQfKWfL!-N6hX?AGF<% z3pjL9*1EP^DLEK^$@e|4TK4NH7f8YA+SR&O$EbNV->+3X-zimU)$-olC_iiQ=KR>J z=W6PDz3lmJ#jBOvYF(2jC-IZ0=U1JIQ$8~-tN7+=J==9%eV|&oT&_Dc&+%PdJRbOz zQ~dyX7a^4M89Uu<@uWK~-DRdlc!uOqZSAJaT1v3XDSh^7Ya!WE42ye{I(H3;+NC literal 0 HcmV?d00001 diff --git a/src/Video/Shaders/video_fullscreen.vert b/src/Graphics/StockShaders/Source/video_fullscreen.vert similarity index 100% rename from src/Video/Shaders/video_fullscreen.vert rename to src/Graphics/StockShaders/Source/video_fullscreen.vert diff --git a/src/Video/Shaders/video_yuv2rgba.frag b/src/Graphics/StockShaders/Source/video_yuv2rgba.frag similarity index 100% rename from src/Video/Shaders/video_yuv2rgba.frag rename to src/Graphics/StockShaders/Source/video_yuv2rgba.frag