VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
renderPassUpsample.cpp
Go to the documentation of this file.
1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright 2025-2026 Arnis Lektauers
3
//
4
//
5
#include "
renderPassUpsample.h
"
6
7
#include "
platform/graphics/graphicsDevice.h
"
8
#include "
platform/graphics/shader.h
"
9
10
namespace
visutwin::canvas
11
{
12
namespace
13
{
14
constexpr
const
char
* UPSAMPLE_SOURCE = R
"(
15
#include <metal_stdlib>
16
using namespace metal;
17
18
struct QuadVertexIn {
19
float3 position [[attribute(0)]];
20
float3 normal [[attribute(1)]];
21
float2 uv0 [[attribute(2)]];
22
float4 tangent [[attribute(3)]];
23
float2 uv1 [[attribute(4)]];
24
};
25
26
struct QuadVarying {
27
float4 position [[position]];
28
float2 uv;
29
};
30
31
vertex QuadVarying upsampleVertex(QuadVertexIn in [[stage_in]])
32
{
33
QuadVarying out;
34
out.position = float4(in.position, 1.0);
35
out.uv = in.uv0;
36
return out;
37
}
38
39
fragment float4 upsampleFragment(
40
QuadVarying in [[stage_in]],
41
texture2d<float> sourceTexture [[texture(0)]],
42
sampler linearSampler [[sampler(0)]])
43
{
44
return sourceTexture.sample(linearSampler, clamp(in.uv, float2(0.0), float2(1.0)));
45
}
46
)";
47
}
48
49
RenderPassUpsample::RenderPassUpsample
(
const
std::shared_ptr<GraphicsDevice>&
device
,
Texture
* sourceTexture)
50
:
RenderPassShaderQuad
(
device
), _sourceTexture(sourceTexture)
51
{
52
// Cache the upsample shader at the device level (same rationale as downsample).
53
static
constexpr
const
char
* CACHE_KEY =
"UpsampleQuad"
;
54
auto
cached =
device
->getCachedShader(CACHE_KEY);
55
if
(!cached) {
56
ShaderDefinition
shaderDefinition;
57
shaderDefinition.
name
= CACHE_KEY;
58
shaderDefinition.
vshader
=
"upsampleVertex"
;
59
shaderDefinition.
fshader
=
"upsampleFragment"
;
60
cached =
createShader
(
device
.get(), shaderDefinition, UPSAMPLE_SOURCE);
61
device
->setCachedShader(CACHE_KEY, cached);
62
}
63
setShader
(cached);
64
}
65
66
void
RenderPassUpsample::execute
()
67
{
68
setQuadTextureBinding
(0, _sourceTexture);
69
RenderPassShaderQuad::execute
();
70
}
71
}
visutwin::canvas::RenderPass::device
std::shared_ptr< GraphicsDevice > device() const
Definition
renderPass.h:124
visutwin::canvas::RenderPassShaderQuad::setShader
void setShader(const std::shared_ptr< Shader > &shader)
Definition
renderPassShaderQuad.cpp:13
visutwin::canvas::RenderPassShaderQuad::execute
void execute() override
Definition
renderPassShaderQuad.cpp:25
visutwin::canvas::RenderPassShaderQuad::setQuadTextureBinding
void setQuadTextureBinding(const size_t slot, Texture *texture)
Definition
renderPassShaderQuad.h:35
visutwin::canvas::RenderPassShaderQuad::RenderPassShaderQuad
RenderPassShaderQuad(const std::shared_ptr< GraphicsDevice > &device)
Definition
renderPassShaderQuad.h:30
visutwin::canvas::RenderPassUpsample::execute
void execute() override
Definition
renderPassUpsample.cpp:66
visutwin::canvas::RenderPassUpsample::RenderPassUpsample
RenderPassUpsample(const std::shared_ptr< GraphicsDevice > &device, Texture *sourceTexture)
Definition
renderPassUpsample.cpp:49
visutwin::canvas::Texture
GPU texture resource supporting 2D, cubemap, volume, and array formats with mipmap management.
Definition
texture.h:57
graphicsDevice.h
visutwin::canvas
Definition
eventHandler.cpp:9
visutwin::canvas::createShader
std::shared_ptr< Shader > createShader(GraphicsDevice *graphicsDevice, const ShaderDefinition &definition, const std::string &sourceCode)
Definition
shader.cpp:39
renderPassUpsample.h
shader.h
visutwin::canvas::ShaderDefinition
Definition
shader.h:14
visutwin::canvas::ShaderDefinition::fshader
std::string fshader
Definition
shader.h:18
visutwin::canvas::ShaderDefinition::vshader
std::string vshader
Definition
shader.h:17
visutwin::canvas::ShaderDefinition::name
std::string name
Definition
shader.h:15
scene
graphics
renderPassUpsample.cpp
Generated by
1.16.1