VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
blendState.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 09.11.2025.
5//
6#pragma once
7
8#include "core/utils.h"
9
10namespace visutwin::canvas
11{
12 // Blend factor constants (indices into Metal blend factor array)
13 constexpr int BLENDMODE_ZERO = 0;
14 constexpr int BLENDMODE_ONE = 1;
15 constexpr int BLENDMODE_SRC_COLOR = 2;
17 constexpr int BLENDMODE_DST_COLOR = 4;
19 constexpr int BLENDMODE_SRC_ALPHA = 6;
22 constexpr int BLENDMODE_DST_ALPHA = 9;
24 constexpr int BLENDMODE_CONSTANT = 11;
25 constexpr int BLENDMODE_ONE_MINUS_CONSTANT = 12;
26
27 // Blend equation constants
28 constexpr int BLENDEQUATION_ADD = 0;
29 constexpr int BLENDEQUATION_SUBTRACT = 1;
31 constexpr int BLENDEQUATION_MIN = 3;
32 constexpr int BLENDEQUATION_MAX = 4;
33
43 {
44 public:
45 BlendState();
46
47 uint32_t key() const { return _target0.to_ulong(); }
48
49 bool enabled() const;
50
51 bool redWrite() const;
52 bool greenWrite() const;
53 bool blueWrite() const;
54 bool alphaWrite() const;
55
56 int colorOp() const;
57 int colorSrcFactor() const;
58 int colorDstFactor() const;
59
60 int alphaOp() const;
61 int alphaSrcFactor() const;
62 int alphaDstFactor() const;
63
64 // Setters for configuring blend state
65 void setEnabled(bool value);
66 void setColorOp(int op);
67 void setColorSrcFactor(int factor);
68 void setColorDstFactor(int factor);
69 void setAlphaOp(int op);
70 void setAlphaSrcFactor(int factor);
71 void setAlphaDstFactor(int factor);
72 void setRedWrite(bool value);
73 void setGreenWrite(bool value);
74 void setBlueWrite(bool value);
75 void setAlphaWrite(bool value);
76
77 // Factory for common blend modes
78
79 // Standard alpha blending: src*srcAlpha + dst*(1-srcAlpha)
80 static BlendState alphaBlend();
81
82 // Multiplicative blending: dst * src (used by shadow catcher)
84
85 // Additive blending: src*srcAlpha + dst*ONE (particles glow and accumulate)
87
88 private:
89 // Bit field representing the blend state for render target 0
90 BitPacking _target0;
91
92 uint32_t getField(const BitPacking& bits, const int shift, const uint32_t mask) const {
93 return ((bits.to_ulong() >> shift) & mask);
94 }
95
96 void setField(int shift, uint32_t mask, uint32_t value);
97 };
98}
void setGreenWrite(bool value)
void setAlphaSrcFactor(int factor)
static BlendState alphaBlend()
void setColorDstFactor(int factor)
static BlendState multiplicativeBlend()
void setAlphaDstFactor(int factor)
void setColorSrcFactor(int factor)
static BlendState additiveBlend()
void setAlphaWrite(bool value)
void setBlueWrite(bool value)
constexpr int BLENDMODE_ONE_MINUS_SRC_ALPHA
Definition blendState.h:21
constexpr int BLENDMODE_ONE_MINUS_DST_ALPHA
Definition blendState.h:23
constexpr int BLENDEQUATION_MAX
Definition blendState.h:32
constexpr int BLENDMODE_DST_ALPHA
Definition blendState.h:22
constexpr int BLENDMODE_ONE_MINUS_CONSTANT
Definition blendState.h:25
constexpr int BLENDMODE_ONE_MINUS_SRC_COLOR
Definition blendState.h:16
constexpr int BLENDEQUATION_REVERSE_SUBTRACT
Definition blendState.h:30
constexpr int BLENDEQUATION_MIN
Definition blendState.h:31
constexpr int BLENDMODE_ONE
Definition blendState.h:14
constexpr int BLENDEQUATION_SUBTRACT
Definition blendState.h:29
constexpr int BLENDMODE_SRC_COLOR
Definition blendState.h:15
constexpr int BLENDMODE_CONSTANT
Definition blendState.h:24
constexpr int BLENDEQUATION_ADD
Definition blendState.h:28
constexpr int BLENDMODE_ZERO
Definition blendState.h:13
std::bitset< 32 > BitPacking
Definition utils.h:12
constexpr int BLENDMODE_SRC_ALPHA
Definition blendState.h:19
constexpr int BLENDMODE_SRC_ALPHA_SATURATE
Definition blendState.h:20
constexpr int BLENDMODE_ONE_MINUS_DST_COLOR
Definition blendState.h:18
constexpr int BLENDMODE_DST_COLOR
Definition blendState.h:17