127 lines
8.9 KiB
Markdown
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)`
|
|
|