# Juliet\include\Graphics\Graphics ## Source Files - Header: `Juliet\include\Graphics\Graphics.h` - Source: `Juliet\src\Graphics\Graphics.cpp` ## AI Description The provided code snippet is a C++ implementation of a graphics rendering engine using the Juliet library. It includes functions for managing render passes, shaders, and graphics buffers. The `RenderPass` class represents a set of commands that can be executed together to draw graphics. The `CommandList` class manages a list of commands that are executed on a GPU. Here's a brief overview of the key functionalities: 1. **Rendering Pass Management**: - `BeginRenderPass`: Begins a new render pass with specified color and depth/stencil targets. - `EndRenderPass`: Ends the current render pass. - `SetGraphicsViewPort`, `SetScissorRect`, `SetBlendConstants`, `SetStencilReference`: Set various rendering state parameters. 2. **Shader Management**: - `CreateShader`: Loads a shader from a file and creates a shader object. - `DestroyShader`: Destroys a previously created shader object. 3. **Graphics Pipeline Management**: - `CreateGraphicsPipeline`: Creates a graphics pipeline with specified create information. - `DestroyGraphicsPipeline`: Destroys a previously created graphics pipeline object. 4. **Buffer Management**: - `CreateGraphicsBuffer`, `CreateGraphicsTransferBuffer`: Create buffers for storing graphics data. - `MapGraphicsBuffer`, `UnmapGraphicsBuffer`, `MapGraphicsTransferBuffer`, `UnmapGraphicsTransferBuffer`: Map and unmap memory from the GPU. - `CopyBuffer`, `CopyBufferToTexture`, `TransitionBufferToReadable`: Copy data between buffers or transfer data to/from textures. 5. **Descriptor Management**: - `GetDescriptorIndex`: Retrieve the descriptor index for a buffer or texture. 6. **Resource Destruction**: - `DestroyGraphicsBuffer`, `DestroyGraphicsTransferBuffer`: Destroy previously created graphics buffer and transfer buffer objects. This code snippet provides a comprehensive set of tools for managing graphics resources in a C++ application using the Juliet library, allowing developers to create complex 3D scenes efficiently. ## Symbols ### Namespace `Juliet` #### Classes, Structs & Unions - `struct IndirectDrawCommand` - `struct IndexedIndirectDrawCommand` - `struct IndirectDispatchCommand` - `struct GraphicsViewPort` #### Enums - `enum class QueueType` - `enum class IndexFormat` - `enum struct` - `enum struct` #### Functions & Methods - `extern JULIET_API GraphicsDevice* CreateGraphicsDevice(GraphicsConfig config)` - `extern JULIET_API void DestroyGraphicsDevice(NonNullPtr device)` - `// Attach To Window extern JULIET_API bool AttachToWindow(NonNullPtr device, NonNullPtr window)` - `extern JULIET_API void DetachFromWindow(NonNullPtr device, NonNullPtr window)` - `// SwapChain extern JULIET_API bool AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture)` - `extern JULIET_API bool WaitAndAcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture)` - `extern JULIET_API bool WaitForSwapchain(NonNullPtr device, NonNullPtr window)` - `extern JULIET_API TextureFormat GetSwapChainTextureFormat(NonNullPtr device, NonNullPtr window)` - `// Textures extern JULIET_API Texture* CreateTexture(NonNullPtr device, const TextureCreateInfo& createInfo)` - `extern JULIET_API void DestroyTexture(NonNullPtr device, NonNullPtr texture)` - `// Command List extern JULIET_API CommandList* AcquireCommandList(NonNullPtr device, QueueType queueType = QueueType::Graphics)` - `extern JULIET_API void SubmitCommandLists(NonNullPtr commandList)` - `// RenderPass extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, ColorTargetInfo& colorTargetInfo, DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)` - `extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, NonNullPtr colorTargetInfos, uint32 colorTargetInfoCount, DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)` - `extern JULIET_API void EndRenderPass(NonNullPtr renderPass)` - `extern JULIET_API void SetGraphicsViewPort(NonNullPtr renderPass, const GraphicsViewPort& viewPort)` - `extern JULIET_API void SetScissorRect(NonNullPtr renderPass, const Rectangle& rectangle)` - `extern JULIET_API void SetBlendConstants(NonNullPtr renderPass, FColor blendConstants)` - `extern JULIET_API void SetStencilReference(NonNullPtr renderPass, uint8 reference)` - `extern JULIET_API void BindGraphicsPipeline(NonNullPtr renderPass, NonNullPtr graphicsPipeline)` - `extern JULIET_API void DrawPrimitives(NonNullPtr renderPass, uint32 numVertices, uint32 numInstances, uint32 firstVertex, uint32 firstInstance)` - `extern JULIET_API void DrawIndexedPrimitives(NonNullPtr renderPass, uint32 numIndices, uint32 numInstances, uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance)` - `extern JULIET_API void SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, IndexFormat format, size_t indexCount, index_t offset)` - `extern JULIET_API void SetPushConstants(NonNullPtr commandList, ShaderStage stage, uint32 rootParameterIndex, uint32 numConstants, const void* constants)` - `// Fences extern JULIET_API bool WaitUntilGPUIsIdle(NonNullPtr device)` - `// Shaders extern JULIET_API Shader* CreateShader(NonNullPtr device, String filename, ShaderCreateInfo& shaderCreateInfo)` - `extern JULIET_API void DestroyShader(NonNullPtr device, NonNullPtr shader)` - `// Pipelines extern JULIET_API GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr device, const GraphicsPipelineCreateInfo& createInfo)` - `extern JULIET_API void DestroyGraphicsPipeline(NonNullPtr device, NonNullPtr graphicsPipeline)` - `#if ALLOW_SHADER_HOT_RELOAD // Allows updating the graphics pipeline shaders. Can update either one or both shaders. extern JULIET_API bool UpdateGraphicsPipelineShaders(NonNullPtr device, NonNullPtr graphicsPipeline, Shader* optional_vertexShader, Shader* optional_fragmentShader)` - `#endif // Buffers extern JULIET_API GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr device, const BufferCreateInfo& createInfo)` - `extern JULIET_API GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr device, const TransferBufferCreateInfo& createInfo)` - `extern JULIET_API void* MapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API void UnmapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API void* MapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API void UnmapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API void CopyBuffer(NonNullPtr commandList, NonNullPtr dst, NonNullPtr src, size_t size, size_t dstOffset = 0, size_t srcOffset = 0)` - `extern JULIET_API void CopyBufferToTexture(NonNullPtr commandList, NonNullPtr dst, NonNullPtr src)` - `extern JULIET_API void TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer)` - `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr texture)` - `extern JULIET_API void DestroyGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` - `extern JULIET_API void DestroyGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)`