public YALCTShaderResource(YALCTFilePickerItem fileItem, Vector2 size, IntPtr imguiBinding) { UID = Guid.NewGuid().ToString("N"); Name = fileItem.Name; FileItem = fileItem; Size = size; ImguiBinding = imguiBinding; }
public void LoadShader(string path, string shaderContent) { Controller.Context.DisposeTextures(); string[] shaderParts = shaderContent.Split("*///"); if (shaderParts.Length > 1) { try { string metadataJson = shaderParts[0].Skip(2).ToSystemString(); shaderMetadata = JsonConvert.DeserializeObject <YALCTShaderMetadata>(metadataJson); if (shaderMetadata.ResourcePaths != null) { for (int i = 0; i < shaderMetadata.ResourcePaths.Length; i++) { // get absolute path YALCTFilePickerItem item = shaderMetadata.ResourcePaths[i]; YALCTFilePickerItem transformedItem = item; transformedItem.FullPath = Path.Combine(path, item.FullPath); shaderMetadata.ResourcePaths[i] = transformedItem; Controller.Context.LoadTexture(transformedItem); } } fragmentCode = shaderParts[1].Trim('\r', '\n'); } catch { // no metadata found, just load the entire code LoadShaderDefault(shaderContent); } } else { LoadShaderDefault(shaderContent); } SplitLines(); Apply(); }
public bool LoadTexture(YALCTFilePickerItem item) { try { ImageSharpTexture imageSharpTex = new ImageSharpTexture(item.FullPath); Texture texture = imageSharpTex.CreateDeviceTexture(graphicsDevice, factory); TextureView textureView = factory.CreateTextureView(texture); textureView.Name = item.Name; // as per https://github.com/mellinoe/veldrid/issues/188 TextureView imguiTextureView = factory.CreateTextureView(new TextureViewDescription(texture, PixelFormat.R8_G8_B8_A8_UNorm_SRgb)); imguiTextureView.Name = item.Name; IntPtr imguiBinding = imGuiRenderer.GetOrCreateImGuiBinding(factory, imguiTextureView); textures.Add(texture); textureViews.Add(textureView); imguiTextureViews.Add(imguiTextureView); imguiTextures.Add(new YALCTShaderResource(item, new Vector2(texture.Width, texture.Height), imguiBinding)); } catch (Exception e) { uiController.SetError(e.Message); return(false); } return(true); }