1#include "RenderTargetsWebGPU.h"
3#include "GraphicsDeviceWebGPU.h"
9 void RenderTargetsWebGPU::initialize(GraphicsDeviceWebGPU *graphicsDeviceIn)
11 graphicsDevice = graphicsDeviceIn;
18 for(
size_t i=0; i<numViews; i++){
22 WGPUTextureViewDescriptor desc = {};
23 desc.format = texture.view_format;
24 desc.dimension = texture.view_dimension;
26 switch(desc.dimension){
27 case WGPUTextureViewDimension_2DArray:
28 desc.dimension = WGPUTextureViewDimension_2D;
30 case WGPUTextureViewDimension_CubeArray:
31 desc.dimension = WGPUTextureViewDimension_Cube;
38 desc.mipLevelCount = 1;
41 desc.aspect = WGPUTextureAspect_All;
42 render_target.view[i] = wgpuTextureCreateView(texture.texture, &desc);
43 render_target.textureHandle[i] = set.
texture;
44 render_target.format[i] = texture.view_format;
46 render_target.count = (uint32_t)numViews;
51 render_target.width = texture.width;
52 render_target.height = texture.height;
53 render_target.samples = texture.samples;
57 return render_targets.addResource(std::move(render_target));
62 if(!HandleIsValid(handle))
return;
64 for(
size_t i=0; i<target.count; i++){
65 wgpuTextureViewRelease(target.view[i]);
67 render_targets.removeResource(handle);
74 assert(target.height);
75 assert(target.samples);
77 tex_desc.target = ResourceDimensions::Texture2D;
78 tex_desc.width = target.width;
79 tex_desc.height = target.height;
84 tex_desc.samples = target.samples;
85 tex_desc.format = TextureFormat::D32_FLOAT;
89 view_desc.
texture = textureHandle;
95 ds.textureHandle = textureHandle;
102 view_desc.
texture = textureHandle;
117 WGPUTextureViewDescriptor desc = {};
118 desc.format = texture.view_format;
119 desc.dimension = texture.view_dimension;
121 switch(desc.dimension){
122 case WGPUTextureViewDimension_2DArray:
123 desc.dimension = WGPUTextureViewDimension_2D;
125 case WGPUTextureViewDimension_CubeArray:
126 desc.dimension = WGPUTextureViewDimension_Cube;
133 desc.mipLevelCount = 1;
136 desc.aspect = WGPUTextureAspect_All;
137 depth_stencil_target.view = wgpuTextureCreateView(texture.texture, &desc);
138 depth_stencil_target.format = texture.view_format;
139 depth_stencil_target.samples = texture.samples;
142 return depth_stencil_targets.addResource(std::move(depth_stencil_target));
147 if(!HandleIsValid(handle))
return;
149 wgpuTextureViewRelease(target.view);
150 depth_stencil_targets.removeResource(handle);
virtual void releaseRenderTarget(RenderTargetHandle handle) override
Release the render target with the given renderTargetHandle.
virtual DepthStencilHandle createDepthStencilTarget(const RenderTargetHandle handle) override
Creates a depth/stencil target to back the render target with the given handle.
virtual void releaseDepthStencilTarget(DepthStencilHandle handle) override
Release the depth target with the given depthStencilHandle.
virtual RenderTargetHandle createRenderTarget(const RenderTargetViewDescription *renderTargetViews, const size_t numViews) override
Create a render target using the given view descriptions.
virtual TextureHandle loadTexture(const TextureDescription &desc, const TextureData *data) override
Load a texture from the given description.
Contains all Cogs related functionality.
Describes a single depth stencil view and which resources to use from the underlying texture.
TextureHandle texture
Texture handle.
uint16_t numLayers
Number of available layers to write to.
uint8_t levelIndex
Index of the mipmap level to render to.
uint16_t layerIndex
Index of the first layer (if array) to write depth to.
Describes a single render target view and which resources to use from the underlying texture.
uint16_t layerIndex
Index of the first layer (if array) to render to.
uint16_t numLayers
Number of available layers to render to.
TextureHandle texture
Texture handle.
uint8_t levelIndex
Index of the mipmap level to render to.
@ DepthBuffer
The texture can be used as a depth target and have depth buffer values written into.