public void OnLoad(object sender) { InputHandlerInitialize(); Resourcepack.Loadresources(); Service.Tiling.LoadTilesFromMap("tilemap", new TilemapCell("grass", 640, 0, 32, 32), new TilemapCell("tree", 384, 448, 64, 64), new TilemapCell("wall", 384, 320, 32, 32), new TilemapCell("floor", 0, 640, 32, 32)); map = new World(); inputContext = new InputContext(); var graphics = CreateGraphics(); Input.Initialize(inputContext); GraphicsAPI.Initialize(Width, Height, new System.Runtime.InteropServices.HandleRef(graphics, graphics.GetHdc())); }
public static string Str(this ShaderStageType stage, GraphicsAPI apitype) { if (apitype.IsD3D()) { switch (stage) { case ShaderStageType.Vertex: return("Vertex"); case ShaderStageType.Hull: return("Hull"); case ShaderStageType.Domain: return("Domain"); case ShaderStageType.Geometry: return("Geometry"); case ShaderStageType.Pixel: return("Pixel"); case ShaderStageType.Compute: return("Compute"); } } else if (apitype == GraphicsAPI.OpenGL || apitype == GraphicsAPI.Vulkan) { switch (stage) { case ShaderStageType.Vertex: return("Vertex"); case ShaderStageType.Tess_Control: return("Tess. Control"); case ShaderStageType.Tess_Eval: return("Tess. Eval"); case ShaderStageType.Geometry: return("Geometry"); case ShaderStageType.Fragment: return("Fragment"); case ShaderStageType.Compute: return("Compute"); } } return(stage.ToString()); }
public static RenderCommand DrawGeometry(CameraData camera, Matrix4 cameraTransform) { return(new RenderCommand("Draw Geometry", (ref RenderContext context) => { if (!context.TryGetData(out GeometryRenderData geometryData)) { return; } if (!context.TryGetData(out LightsRenderData lightData)) { return; } //if (MainDevWindowGL.Window.KeyboardState.IsKeyDown(OpenTK.Windowing.GraphicsLibraryFramework.Keys.I)) // yaw += 0.1f; //if (MainDevWindowGL.Window.KeyboardState.IsKeyDown(OpenTK.Windowing.GraphicsLibraryFramework.Keys.O)) // yaw -= 0.1f; //if (MainDevWindowGL.Window.KeyboardState.IsKeyDown(OpenTK.Windowing.GraphicsLibraryFramework.Keys.K)) // pitch += 0.1f; //if (MainDevWindowGL.Window.KeyboardState.IsKeyDown(OpenTK.Windowing.GraphicsLibraryFramework.Keys.L)) // pitch -= 0.1f; Ogl.Viewport(0, 0, AppScreen.Resolution.x, AppScreen.Resolution.y); Ogl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); Light mainLight = lightData.lights[0]; Matrix4 projection = camera.CalculateProjection(); List <MeshRenderGroup> renderGroups = geometryData.GetRenderGroups(); for (int i = 0; i < renderGroups.Count; i++) { MeshRenderGroup renderGroup = renderGroups[i]; RenderMesh pair = renderGroup.MeshRender; List <Matrix4> positions = renderGroup.Transforms; pair.mat.SetDepthMap(new DepthTexture(mainLight.Framebuffer.DepthBuffer)); GraphicsAPI.UseMeshMaterial(pair.mesh, pair.mat); //Update camera pos for material //TODO: Use 'Uniform buffer objects' to globally share this data pair.mat.SetMatrix("view", cameraTransform); pair.mat.SetMatrix("projection", projection); pair.mat.SetVector3("directionalLight", new Vector3(1, 1, 1)); pair.mat.SetVector3("ambientLight", new Vector3(0.5f, 0.5f, 0.5f)); pair.mat.SetVector3("directionalDir", LIGHT_FORWARD_NORMALIZED); pair.mat.SetMatrix("lightSpace", LIGHT_VIEW * mainLight.GetProjection()); for (int p = 0; p < positions.Count; p++) { pair.mat.SetMatrix("model", positions[p]); GraphicsAPI.DrawTriangles(pair.mesh.GetIndiceCount()); } GraphicsAPI.FreeMeshMaterial(pair.mesh, pair.mat); } }));
public static string Str(this ResourceUsage usage, GraphicsAPI apitype) { if (apitype.IsD3D()) { switch (usage) { case ResourceUsage.VertexBuffer: return("Vertex Buffer"); case ResourceUsage.IndexBuffer: return("Index Buffer"); case ResourceUsage.VS_Constants: return("VS - Constant Buffer"); case ResourceUsage.GS_Constants: return("GS - Constant Buffer"); case ResourceUsage.HS_Constants: return("HS - Constant Buffer"); case ResourceUsage.DS_Constants: return("DS - Constant Buffer"); case ResourceUsage.CS_Constants: return("CS - Constant Buffer"); case ResourceUsage.PS_Constants: return("PS - Constant Buffer"); case ResourceUsage.All_Constants: return("All - Constant Buffer"); case ResourceUsage.SO: return("Stream Out"); case ResourceUsage.VS_Resource: return("VS - Resource"); case ResourceUsage.GS_Resource: return("GS - Resource"); case ResourceUsage.HS_Resource: return("HS - Resource"); case ResourceUsage.DS_Resource: return("DS - Resource"); case ResourceUsage.CS_Resource: return("CS - Resource"); case ResourceUsage.PS_Resource: return("PS - Resource"); case ResourceUsage.All_Resource: return("All - Resource"); case ResourceUsage.VS_RWResource: return("VS - UAV"); case ResourceUsage.HS_RWResource: return("HS - UAV"); case ResourceUsage.DS_RWResource: return("DS - UAV"); case ResourceUsage.GS_RWResource: return("GS - UAV"); case ResourceUsage.PS_RWResource: return("PS - UAV"); case ResourceUsage.CS_RWResource: return("CS - UAV"); case ResourceUsage.All_RWResource: return("All - UAV"); case ResourceUsage.InputTarget: return("Colour Input"); case ResourceUsage.ColourTarget: return("Rendertarget"); case ResourceUsage.DepthStencilTarget: return("Depthstencil"); case ResourceUsage.Indirect: return("Indirect argument"); case ResourceUsage.Clear: return("Clear"); case ResourceUsage.GenMips: return("Generate Mips"); case ResourceUsage.Resolve: return("Resolve"); case ResourceUsage.ResolveSrc: return("Resolve - Source"); case ResourceUsage.ResolveDst: return("Resolve - Dest"); case ResourceUsage.Copy: return("Copy"); case ResourceUsage.CopySrc: return("Copy - Source"); case ResourceUsage.CopyDst: return("Copy - Dest"); case ResourceUsage.Barrier: return("Barrier"); } } else if (apitype == GraphicsAPI.OpenGL || apitype == GraphicsAPI.Vulkan) { bool vk = (apitype == GraphicsAPI.Vulkan); switch (usage) { case ResourceUsage.VertexBuffer: return("Vertex Buffer"); case ResourceUsage.IndexBuffer: return("Index Buffer"); case ResourceUsage.VS_Constants: return("VS - Uniform Buffer"); case ResourceUsage.GS_Constants: return("GS - Uniform Buffer"); case ResourceUsage.HS_Constants: return("HS - Uniform Buffer"); case ResourceUsage.DS_Constants: return("DS - Uniform Buffer"); case ResourceUsage.CS_Constants: return("CS - Uniform Buffer"); case ResourceUsage.PS_Constants: return("PS - Uniform Buffer"); case ResourceUsage.All_Constants: return("All - Uniform Buffer"); case ResourceUsage.SO: return("Transform Feedback"); case ResourceUsage.VS_Resource: return("VS - Texture"); case ResourceUsage.GS_Resource: return("GS - Texture"); case ResourceUsage.HS_Resource: return("HS - Texture"); case ResourceUsage.DS_Resource: return("DS - Texture"); case ResourceUsage.CS_Resource: return("CS - Texture"); case ResourceUsage.PS_Resource: return("PS - Texture"); case ResourceUsage.All_Resource: return("All - Texture"); case ResourceUsage.VS_RWResource: return("VS - Image/SSBO"); case ResourceUsage.HS_RWResource: return("HS - Image/SSBO"); case ResourceUsage.DS_RWResource: return("DS - Image/SSBO"); case ResourceUsage.GS_RWResource: return("GS - Image/SSBO"); case ResourceUsage.PS_RWResource: return("PS - Image/SSBO"); case ResourceUsage.CS_RWResource: return("CS - Image/SSBO"); case ResourceUsage.All_RWResource: return("All - Image/SSBO"); case ResourceUsage.InputTarget: return("FBO Input"); case ResourceUsage.ColourTarget: return("FBO Colour"); case ResourceUsage.DepthStencilTarget: return("FBO Depthstencil"); case ResourceUsage.Indirect: return("Indirect argument"); case ResourceUsage.Clear: return("Clear"); case ResourceUsage.GenMips: return("Generate Mips"); case ResourceUsage.Resolve: return(vk ? "Resolve" : "Framebuffer blit"); case ResourceUsage.ResolveSrc: return(vk ? "Resolve - Source" : "Framebuffer blit - Source"); case ResourceUsage.ResolveDst: return(vk ? "Resolve - Dest" : "Framebuffer blit - Dest"); case ResourceUsage.Copy: return("Copy"); case ResourceUsage.CopySrc: return("Copy - Source"); case ResourceUsage.CopyDst: return("Copy - Dest"); case ResourceUsage.Barrier: return("Barrier"); } } return("Unknown Usage String"); }
public static bool IsD3D(this GraphicsAPI apitype) { return(apitype == GraphicsAPI.D3D11 || apitype == GraphicsAPI.D3D12); }
public ZenTarget(Platform platform, GraphicsAPI graphicsAPI, EngineMode engineMode) { Platform = platform; GraphicsAPI = graphicsAPI; EngineMode = engineMode; }
public PlatformFileExt(string InFileExt, Platform InPlatformMask, GraphicsAPI graphicMask = 0) { FileExt = InFileExt; PlatformMask = InPlatformMask; GraphicMask = graphicMask; }
/// <summary> /// Prüft, ob die gegebene Grafik-API zur Verfügung steht. /// </summary> /// <param name="GraphicsAPI">Die Grafik-API.</param> /// <returns>True, wenn die Grafik-API zur Verfügung steht, ansonsten false.</returns> public static bool IsSupported(GraphicsAPI GraphicsAPI) { return(graphicsAPIs.Contains(GraphicsAPI)); }
public static string Str(this ShaderStageType stage, GraphicsAPI apitype) { if (apitype.IsD3D()) { switch (stage) { case ShaderStageType.Vertex: return "Vertex"; case ShaderStageType.Hull: return "Hull"; case ShaderStageType.Domain: return "Domain"; case ShaderStageType.Geometry: return "Geometry"; case ShaderStageType.Pixel: return "Pixel"; case ShaderStageType.Compute: return "Compute"; } } else if (apitype == GraphicsAPI.OpenGL || apitype == GraphicsAPI.Vulkan) { switch (stage) { case ShaderStageType.Vertex: return "Vertex"; case ShaderStageType.Tess_Control: return "Tess. Control"; case ShaderStageType.Tess_Eval: return "Tess. Eval"; case ShaderStageType.Geometry: return "Geometry"; case ShaderStageType.Fragment: return "Fragment"; case ShaderStageType.Compute: return "Compute"; } } return stage.ToString(); }
public static string Str(this ResourceUsage usage, GraphicsAPI apitype) { if (apitype.IsD3D()) { switch (usage) { case ResourceUsage.VertexBuffer: return "Vertex Buffer"; case ResourceUsage.IndexBuffer: return "Index Buffer"; case ResourceUsage.VS_Constants: return "VS - Constant Buffer"; case ResourceUsage.GS_Constants: return "GS - Constant Buffer"; case ResourceUsage.HS_Constants: return "HS - Constant Buffer"; case ResourceUsage.DS_Constants: return "DS - Constant Buffer"; case ResourceUsage.CS_Constants: return "CS - Constant Buffer"; case ResourceUsage.PS_Constants: return "PS - Constant Buffer"; case ResourceUsage.All_Constants: return "All - Constant Buffer"; case ResourceUsage.SO: return "Stream Out"; case ResourceUsage.VS_Resource: return "VS - Resource"; case ResourceUsage.GS_Resource: return "GS - Resource"; case ResourceUsage.HS_Resource: return "HS - Resource"; case ResourceUsage.DS_Resource: return "DS - Resource"; case ResourceUsage.CS_Resource: return "CS - Resource"; case ResourceUsage.PS_Resource: return "PS - Resource"; case ResourceUsage.All_Resource: return "All - Resource"; case ResourceUsage.VS_RWResource: return "VS - UAV"; case ResourceUsage.HS_RWResource: return "HS - UAV"; case ResourceUsage.DS_RWResource: return "DS - UAV"; case ResourceUsage.GS_RWResource: return "GS - UAV"; case ResourceUsage.PS_RWResource: return "PS - UAV"; case ResourceUsage.CS_RWResource: return "CS - UAV"; case ResourceUsage.All_RWResource: return "All - UAV"; case ResourceUsage.InputTarget: return "Colour Input"; case ResourceUsage.ColourTarget: return "Rendertarget"; case ResourceUsage.DepthStencilTarget: return "Depthstencil"; case ResourceUsage.Indirect: return "Indirect argument"; case ResourceUsage.Clear: return "Clear"; case ResourceUsage.GenMips: return "Generate Mips"; case ResourceUsage.Resolve: return "Resolve"; case ResourceUsage.ResolveSrc: return "Resolve - Source"; case ResourceUsage.ResolveDst: return "Resolve - Dest"; case ResourceUsage.Copy: return "Copy"; case ResourceUsage.CopySrc: return "Copy - Source"; case ResourceUsage.CopyDst: return "Copy - Dest"; case ResourceUsage.Barrier: return "Barrier"; } } else if (apitype == GraphicsAPI.OpenGL || apitype == GraphicsAPI.Vulkan) { bool vk = (apitype == GraphicsAPI.Vulkan); switch (usage) { case ResourceUsage.VertexBuffer: return "Vertex Buffer"; case ResourceUsage.IndexBuffer: return "Index Buffer"; case ResourceUsage.VS_Constants: return "VS - Uniform Buffer"; case ResourceUsage.GS_Constants: return "GS - Uniform Buffer"; case ResourceUsage.HS_Constants: return "HS - Uniform Buffer"; case ResourceUsage.DS_Constants: return "DS - Uniform Buffer"; case ResourceUsage.CS_Constants: return "CS - Uniform Buffer"; case ResourceUsage.PS_Constants: return "PS - Uniform Buffer"; case ResourceUsage.All_Constants: return "All - Uniform Buffer"; case ResourceUsage.SO: return "Transform Feedback"; case ResourceUsage.VS_Resource: return "VS - Texture"; case ResourceUsage.GS_Resource: return "GS - Texture"; case ResourceUsage.HS_Resource: return "HS - Texture"; case ResourceUsage.DS_Resource: return "DS - Texture"; case ResourceUsage.CS_Resource: return "CS - Texture"; case ResourceUsage.PS_Resource: return "PS - Texture"; case ResourceUsage.All_Resource: return "All - Texture"; case ResourceUsage.VS_RWResource: return "VS - Image/SSBO"; case ResourceUsage.HS_RWResource: return "HS - Image/SSBO"; case ResourceUsage.DS_RWResource: return "DS - Image/SSBO"; case ResourceUsage.GS_RWResource: return "GS - Image/SSBO"; case ResourceUsage.PS_RWResource: return "PS - Image/SSBO"; case ResourceUsage.CS_RWResource: return "CS - Image/SSBO"; case ResourceUsage.All_RWResource: return "All - Image/SSBO"; case ResourceUsage.InputTarget: return "FBO Input"; case ResourceUsage.ColourTarget: return "FBO Colour"; case ResourceUsage.DepthStencilTarget: return "FBO Depthstencil"; case ResourceUsage.Indirect: return "Indirect argument"; case ResourceUsage.Clear: return "Clear"; case ResourceUsage.GenMips: return "Generate Mips"; case ResourceUsage.Resolve: return vk ? "Resolve" : "Framebuffer blit"; case ResourceUsage.ResolveSrc: return vk ? "Resolve - Source" : "Framebuffer blit - Source"; case ResourceUsage.ResolveDst: return vk ? "Resolve - Dest" : "Framebuffer blit - Dest"; case ResourceUsage.Copy: return "Copy"; case ResourceUsage.CopySrc: return "Copy - Source"; case ResourceUsage.CopyDst: return "Copy - Dest"; case ResourceUsage.Barrier: return "Barrier"; } } return "Unknown Usage String"; }
//public void DrawIndexed(int indexCount, uint instanceCount, uint indexStart, int vertexOffset, uint instanceStart) //{ // Issue a Draw command for a single instance with 4 indices. //veldridCommandList.DrawIndexed(Convert.ToUInt32(indexCount), instanceCount, indexStart, vertexOffset, instanceStart); //} #endregion #region Internal API /// <summary> /// Initialises the GraphicsDevice /// </summary> /// <param name="graphicsAPI"></param> internal void Initialise(VesselWindow window, ApplicationConfig config) { GraphicsAPI = config.GraphicsAPI; GraphicsDeviceOptions options = new GraphicsDeviceOptions { PreferStandardClipSpaceYDirection = true, PreferDepthRangeZeroToOne = true, SyncToVerticalBlank = config.VSync, Debug = config.DebugMode, }; DefaultGraphicsAPI = (GraphicsAPI)VeldridStartup.GetPlatformDefaultBackend(); if (config.GraphicsAPI == GraphicsAPI.Default) { veldridGraphicsDevice = VeldridStartup.CreateGraphicsDevice(window.WindowInternal, options, (GraphicsBackend)DefaultGraphicsAPI); } else { veldridGraphicsDevice = VeldridStartup.CreateGraphicsDevice(window.WindowInternal, options, (GraphicsBackend)config.GraphicsAPI); } //Create the Graphics Resources ResourceFactory factory = veldridGraphicsDevice.ResourceFactory; //TODO: Replace with ResourceFactory.Load("ShaderTest0"); //shader = new ShaderTechnique(this, //System.IO.File.ReadAllBytes(@"E:\Data\Projects\Vessel\VesselSharp\VesselSharp\ShaderTests\ShaderTest0.vert.spv"), //System.IO.File.ReadAllBytes(@"E:\Data\Projects\Vessel\VesselSharp\VesselSharp\ShaderTests\ShaderTest0.frag.spv"), //"ShaderTest0"); // TODO: Move pipeline to Shader class // TODO: Shader => ShaderTechnique; ComputeShader // TODO: Assets can be compiled (i.e. banks) or directories (i.e. folder of compiled assets (eg shader.shd), assets aren't packaged into an archive though) - for use during dev cuz packaging archives will probably be time consuming as f**k and decimate workflows // Create pipeline /* * pipelineDescription = new GraphicsPipelineDescription(); * pipelineDescription.BlendState = BlendStateDescription.SingleOverrideBlend; * pipelineDescription.DepthStencilState = new DepthStencilStateDescription( * depthTestEnabled: true, * depthWriteEnabled: true, * comparisonKind: ComparisonKind.LessEqual); * * pipelineDescription.RasterizerState = new RasterizerStateDescription( * cullMode: FaceCullMode.Back, * fillMode: PolygonFillMode.Solid, * frontFace: FrontFace.Clockwise, * depthClipEnabled: true, * scissorTestEnabled: false); * * pipelineDescription.PrimitiveTopology = PrimitiveTopology.TriangleStrip; * pipelineDescription.ResourceLayouts = System.Array.Empty<ResourceLayout>(); * pipelineDescription.ShaderSet = new ShaderSetDescription( * vertexLayouts: new VertexLayoutDescription[] * { * VertexPositionColor.VertexLayout, * }, * shaders: shader.Programs); * pipelineDescription.Outputs = veldridGraphicsDevice.SwapchainFramebuffer.OutputDescription; * * veldridPipeline = factory.CreateGraphicsPipeline(pipelineDescription); */ veldridCommandList = factory.CreateCommandList(); }
/// <summary> /// This function initializes the AntTweakBar library. It must be called once at the beginning of the program, just after graphic mode is initialized. /// </summary> /// <param name="graphicsAPI">This parameter specifies which graphic API is used: OpenGL, OpenGL core profile (3.2 and higher), Direct3D 9, Direct3D 10 or Direct3D 11.</param> /// <param name="device">Pointer to the Direct3D device, or IntPtr.Zero for OpenGL.</param> public static void Init(GraphicsAPI graphicsAPI, IntPtr device) { if (graphicsAPI == GraphicsAPI.Unspecified) { throw new ArgumentOutOfRangeException("graphicsAPI"); } if (!NativeMethods.TwInit(graphicsAPI, device)) { throw new AntTweakBarException("TwInit failed."); } }
public static void BindTexture2d(int textureId, int textureUnit) { GraphicsAPI.BindTexture2d(textureId, textureUnit); }