Files
Juliet/Romeo/docs/Juliet_include_Graphics_Graphics.md
T

127 lines
8.9 KiB
Markdown

# 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<GraphicsDevice> device)`
- `// Attach To Window
extern JULIET_API bool AttachToWindow(NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)`
- `extern JULIET_API void DetachFromWindow(NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)`
- `// SwapChain
extern JULIET_API bool AcquireSwapChainTexture(NonNullPtr<CommandList> commandList, NonNullPtr<Window> window,
Texture** swapChainTexture)`
- `extern JULIET_API bool WaitAndAcquireSwapChainTexture(NonNullPtr<CommandList> commandList,
NonNullPtr<Window> window, Texture** swapChainTexture)`
- `extern JULIET_API bool WaitForSwapchain(NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)`
- `extern JULIET_API TextureFormat GetSwapChainTextureFormat(NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window)`
- `// Textures
extern JULIET_API Texture* CreateTexture(NonNullPtr<GraphicsDevice> device, const TextureCreateInfo& createInfo)`
- `extern JULIET_API void DestroyTexture(NonNullPtr<GraphicsDevice> device, NonNullPtr<Texture> texture)`
- `// Command List
extern JULIET_API CommandList* AcquireCommandList(NonNullPtr<GraphicsDevice> device, QueueType queueType = QueueType::Graphics)`
- `extern JULIET_API void SubmitCommandLists(NonNullPtr<CommandList> commandList)`
- `// RenderPass
extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr<CommandList> commandList, ColorTargetInfo& colorTargetInfo,
DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)`
- `extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr<CommandList> commandList,
NonNullPtr<const ColorTargetInfo> colorTargetInfos, uint32 colorTargetInfoCount,
DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)`
- `extern JULIET_API void EndRenderPass(NonNullPtr<RenderPass> renderPass)`
- `extern JULIET_API void SetGraphicsViewPort(NonNullPtr<RenderPass> renderPass, const GraphicsViewPort& viewPort)`
- `extern JULIET_API void SetScissorRect(NonNullPtr<RenderPass> renderPass, const Rectangle& rectangle)`
- `extern JULIET_API void SetBlendConstants(NonNullPtr<RenderPass> renderPass, FColor blendConstants)`
- `extern JULIET_API void SetStencilReference(NonNullPtr<RenderPass> renderPass, uint8 reference)`
- `extern JULIET_API void BindGraphicsPipeline(NonNullPtr<RenderPass> renderPass, NonNullPtr<GraphicsPipeline> graphicsPipeline)`
- `extern JULIET_API void DrawPrimitives(NonNullPtr<RenderPass> renderPass, uint32 numVertices, uint32 numInstances,
uint32 firstVertex, uint32 firstInstance)`
- `extern JULIET_API void DrawIndexedPrimitives(NonNullPtr<RenderPass> renderPass, uint32 numIndices, uint32 numInstances,
uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance)`
- `extern JULIET_API void SetIndexBuffer(NonNullPtr<CommandList> commandList, NonNullPtr<GraphicsBuffer> buffer,
IndexFormat format, size_t indexCount, index_t offset)`
- `extern JULIET_API void SetPushConstants(NonNullPtr<CommandList> commandList, ShaderStage stage,
uint32 rootParameterIndex, uint32 numConstants, const void* constants)`
- `// Fences
extern JULIET_API bool WaitUntilGPUIsIdle(NonNullPtr<GraphicsDevice> device)`
- `// Shaders
extern JULIET_API Shader* CreateShader(NonNullPtr<GraphicsDevice> device, String filename, ShaderCreateInfo& shaderCreateInfo)`
- `extern JULIET_API void DestroyShader(NonNullPtr<GraphicsDevice> device, NonNullPtr<Shader> shader)`
- `// Pipelines
extern JULIET_API GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr<GraphicsDevice> device,
const GraphicsPipelineCreateInfo& createInfo)`
- `extern JULIET_API void DestroyGraphicsPipeline(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsPipeline> 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<GraphicsDevice> device, NonNullPtr<GraphicsPipeline> graphicsPipeline,
Shader* optional_vertexShader, Shader* optional_fragmentShader)`
- `#endif
// Buffers
extern JULIET_API GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr<GraphicsDevice> device, const BufferCreateInfo& createInfo)`
- `extern JULIET_API GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr<GraphicsDevice> device,
const TransferBufferCreateInfo& createInfo)`
- `extern JULIET_API void* MapGraphicsBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsBuffer> buffer)`
- `extern JULIET_API void UnmapGraphicsBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsBuffer> buffer)`
- `extern JULIET_API void* MapGraphicsTransferBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsTransferBuffer> buffer)`
- `extern JULIET_API void UnmapGraphicsTransferBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsTransferBuffer> buffer)`
- `extern JULIET_API void CopyBuffer(NonNullPtr<CommandList> commandList, NonNullPtr<GraphicsBuffer> dst,
NonNullPtr<GraphicsTransferBuffer> src, size_t size, size_t dstOffset = 0,
size_t srcOffset = 0)`
- `extern JULIET_API void CopyBufferToTexture(NonNullPtr<CommandList> commandList, NonNullPtr<Texture> dst,
NonNullPtr<GraphicsTransferBuffer> src)`
- `extern JULIET_API void TransitionBufferToReadable(NonNullPtr<CommandList> commandList, NonNullPtr<GraphicsBuffer> buffer)`
- `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsBuffer> buffer)`
- `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr<GraphicsDevice> device, NonNullPtr<Texture> texture)`
- `extern JULIET_API void DestroyGraphicsBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsBuffer> buffer)`
- `extern JULIET_API void DestroyGraphicsTransferBuffer(NonNullPtr<GraphicsDevice> device, NonNullPtr<GraphicsTransferBuffer> buffer)`