QShaderDescription Class

셰이더의 인터페이스에 대해 설명합니다. 더 보기...

Header: #include <QShaderDescription>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
이후: Qt 6.6

공용 유형

(since 6.6) struct BlockVariable
(since 6.6) struct BuiltinVariable
(since 6.6) struct InOutVariable
(since 6.6) struct PushConstantBlock
(since 6.6) struct StorageBlock
(since 6.6) struct UniformBlock
enum BuiltinType { PositionBuiltin, PointSizeBuiltin, ClipDistanceBuiltin, CullDistanceBuiltin, VertexIdBuiltin, …, InstanceIndexBuiltin }
enum ImageFlag { ReadOnlyImage, WriteOnlyImage }
flags ImageFlags
enum ImageFormat { ImageFormatUnknown, ImageFormatRgba32f, ImageFormatRgba16f, ImageFormatR32f, ImageFormatRgba8, …, ImageFormatR8ui }
enum QualifierFlag { QualifierReadOnly, QualifierWriteOnly, QualifierCoherent, QualifierVolatile, QualifierRestrict }
flags QualifierFlags
enum TessellationMode { UnknownTessellationMode, TrianglesTessellationMode, QuadTessellationMode, IsolineTessellationMode }
enum TessellationPartitioning { UnknownTessellationPartitioning, EqualTessellationPartitioning, FractionalEvenTessellationPartitioning, FractionalOddTessellationPartitioning }
enum TessellationWindingOrder { UnknownTessellationWindingOrder, CwTessellationWindingOrder, CcwTessellationWindingOrder }
enum VariableType { Unknown, Float, Vec2, Vec3, Vec4, …, Half4 }

공용 함수

QShaderDescription()
QShaderDescription(const QShaderDescription &other)
~QShaderDescription()
QList<QShaderDescription::InOutVariable> combinedImageSamplers() const
std::array<uint, 3> computeShaderLocalSize() const
QList<QShaderDescription::BuiltinVariable> inputBuiltinVariables() const
QList<QShaderDescription::InOutVariable> inputVariables() const
bool isValid() const
QList<QShaderDescription::BuiltinVariable> outputBuiltinVariables() const
QList<QShaderDescription::InOutVariable> outputVariables() const
QList<QShaderDescription::PushConstantBlock> pushConstantBlocks() const
void serialize(QDataStream *stream, int version) const
QList<QShaderDescription::StorageBlock> storageBlocks() const
QList<QShaderDescription::InOutVariable> storageImages() const
QShaderDescription::TessellationMode tessellationMode() const
uint tessellationOutputVertexCount() const
QShaderDescription::TessellationPartitioning tessellationPartitioning() const
QShaderDescription::TessellationWindingOrder tessellationWindingOrder() const
QByteArray toJson() const
QList<QShaderDescription::UniformBlock> uniformBlocks() const
QShaderDescription &operator=(const QShaderDescription &other)

정적 공용 멤버

QShaderDescription deserialize(QDataStream *stream, int version)
bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

상세 설명

경고: QShader 및 QShaderDescription을 포함한 Qt GUI 모듈의 QRhi 클래스군은 제한된 호환성 보장을 제공합니다. 이러한 클래스에 대한 소스 또는 바이너리 호환성 보장은 없으므로 API는 애플리케이션이 개발된 Qt 버전에서만 작동하도록 보장됩니다. 그러나 소스와 호환되지 않는 변경은 최소한으로 유지하는 것을 목표로 하며 마이너 릴리스(6.7, 6.8 등)에서만 이루어질 것입니다. 애플리케이션에서 이러한 클래스를 사용하려면 Qt::GuiPrivate (CMake를 사용하는 경우)에 링크하고 헤더에 rhi 접두사(예: #include <rhi/qshaderdescription.h>)를 포함하세요.

셰이더에는 일반적으로 일련의 입력과 출력이 있습니다. 예를 들어 버텍스 셰이더에는 여러 입력 변수가 있으며 하나 이상의 균일 버퍼를 사용하여 애플리케이션에서 제공하는 데이터(예: 모델뷰 매트릭스)에 액세스할 수 있습니다. 조각 단계의 셰이더는 버텍스 단계에서 데이터를 수신하며(간단한 설정에서) 균일 버퍼, 이미지 및 샘플러의 데이터에 의존할 수도 있습니다.

버텍스 입력과 유니폼 버퍼의 레이아웃(멤버의 이름, 크기, 오프셋 등)과 관련하여 애플리케이션과 프레임워크는 런타임에 이를 동적으로 파악해야 할 수 있습니다. 이는 셰이더가 내장되어 있지 않고 사용자와 같은 외부 주체가 제공하는 경우 일반적으로 발생합니다.

최신의 린 그래픽 API는 런타임에 셰이더 리플렉션 정보를 쿼리하는 방법을 더 이상 제공하지 않을 수 있습니다. 따라서 이러한 데이터는 이제 QShaderBaker 에서 자동으로 생성되며 모든 QShader 에 대해 QShaderDescription 객체로 제공됩니다.

예제

다음 버텍스 셰이더를 예로 들어 보겠습니다:

#version 440

layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;
layout(location = 0) out vec3 v_color;

layout(std140, binding = 0) uniform buf {
    mat4 mvp;
    float opacity;
} ubuf;

void main()
{
    v_color = color;
    gl_Position = ubuf.mvp * position;
}

이 셰이더에는 두 개의 입력이 있습니다: 위치 0에 vec4 유형이 있는 position 과 위치 1에 color 유형이 있는 vec3. 하나의 출력이 있습니다: v_color 라는 하나의 출력이 있지만, 일반적으로 애플리케이션에서는 흥미롭지 않습니다. 더 중요한 것은 바인딩 0에 크기가 68바이트이고 멤버가 2개인 균일한 블록이 있고, 오프셋 0에 mvp 이라는 4x4 행렬이 있으며, 오프셋 64에 opacity 이라는 부동 소수점이 있다는 것입니다.

이 모든 것은 QShaderDescription 오브젝트에 의해 설명됩니다. QShaderDescription은 JSON 및 QDataStream 을 통해 바이너리 형식으로 직렬화할 수 있으며, 이 바이너리 형식에서 역직렬화할 수 있습니다. 실제로는 QShader 에서 관련 QShaderDescription을 자동으로 처리하기 때문에 거의 필요하지 않지만, 위 셰이더의 QShaderDescription을 ( qsb 도구의 -d 옵션처럼) JSON으로 작성한다면 다음과 같이 보일 것입니다:

{
    "inputs": [
        {
            "location": 1,
            "name": "color",
            "type": "vec3"
        },
        {
            "location": 0,
            "name": "position",
            "type": "vec4"
        }
    ],
    "outputs": [
        {
            "location": 0,
            "name": "v_color",
            "type": "vec3"
        }
    ],
    "uniformBlocks": [
        {
            "binding": 0,
            "blockName": "buf",
            "members": [
                {
                    "matrixStride": 16,
                    "name": "mvp",
                    "offset": 0,
                    "size": 64,
                    "type": "mat4"
                },
                {
                    "name": "opacity",
                    "offset": 64,
                    "size": 4,
                    "type": "float"
                }
            ],
            "set": 0,
            "size": 68,
            "structName": "ubuf"
        }
    ]
}

C++ API를 사용하면 위와 같은 데이터 구조에 액세스할 수 있습니다. 단순화를 위해 내부 구조에는 공용 데이터 멤버만 포함되며, 향후 레이아웃이 변경될 가능성이 낮다는 점도 고려했습니다.

QShaderBakerQShader참조하세요 .

멤버 유형 문서

enum QShaderDescription::BuiltinType

기본 제공 변수 유형.

상수
QShaderDescription::PositionBuiltin0
QShaderDescription::PointSizeBuiltin1
QShaderDescription::ClipDistanceBuiltin3
QShaderDescription::CullDistanceBuiltin4
QShaderDescription::VertexIdBuiltin5
QShaderDescription::InstanceIdBuiltin6
QShaderDescription::PrimitiveIdBuiltin7
QShaderDescription::InvocationIdBuiltin8
QShaderDescription::LayerBuiltin9
QShaderDescription::ViewportIndexBuiltin10
QShaderDescription::TessLevelOuterBuiltin11
QShaderDescription::TessLevelInnerBuiltin12
QShaderDescription::TessCoordBuiltin13
QShaderDescription::PatchVerticesBuiltin14
QShaderDescription::FragCoordBuiltin15
QShaderDescription::PointCoordBuiltin16
QShaderDescription::FrontFacingBuiltin17
QShaderDescription::SampleIdBuiltin18
QShaderDescription::SamplePositionBuiltin19
QShaderDescription::SampleMaskBuiltin20
QShaderDescription::FragDepthBuiltin22
QShaderDescription::NumWorkGroupsBuiltin24
QShaderDescription::WorkgroupSizeBuiltin25
QShaderDescription::WorkgroupIdBuiltin26
QShaderDescription::LocalInvocationIdBuiltin27
QShaderDescription::GlobalInvocationIdBuiltin28
QShaderDescription::LocalInvocationIndexBuiltin29
QShaderDescription::VertexIndexBuiltin42
QShaderDescription::InstanceIndexBuiltin43

enum QShaderDescription::ImageFlag
플래그 QShaderDescription::ImageFlags

이미지 플래그.

Constant
QShaderDescription::ReadOnlyImage1 << 0
QShaderDescription::WriteOnlyImage1 << 1

ImageFlags 유형은 QFlags<ImageFlag>에 대한 typedef입니다. ImageFlag 값의 OR 조합을 저장합니다.

enum QShaderDescription::ImageFormat

이미지 형식.

상수
QShaderDescription::ImageFormatUnknown0
QShaderDescription::ImageFormatRgba32f1
QShaderDescription::ImageFormatRgba16f2
QShaderDescription::ImageFormatR32f3
QShaderDescription::ImageFormatRgba84
QShaderDescription::ImageFormatRgba8Snorm5
QShaderDescription::ImageFormatRg32f6
QShaderDescription::ImageFormatRg16f7
QShaderDescription::ImageFormatR11fG11fB10f8
QShaderDescription::ImageFormatR16f9
QShaderDescription::ImageFormatRgba1610
QShaderDescription::ImageFormatRgb10A211
QShaderDescription::ImageFormatRg1612
QShaderDescription::ImageFormatRg813
QShaderDescription::ImageFormatR1614
QShaderDescription::ImageFormatR815
QShaderDescription::ImageFormatRgba16Snorm16
QShaderDescription::ImageFormatRg16Snorm17
QShaderDescription::ImageFormatRg8Snorm18
QShaderDescription::ImageFormatR16Snorm19
QShaderDescription::ImageFormatR8Snorm20
QShaderDescription::ImageFormatRgba32i21
QShaderDescription::ImageFormatRgba16i22
QShaderDescription::ImageFormatRgba8i23
QShaderDescription::ImageFormatR32i24
QShaderDescription::ImageFormatRg32i25
QShaderDescription::ImageFormatRg16i26
QShaderDescription::ImageFormatRg8i27
QShaderDescription::ImageFormatR16i28
QShaderDescription::ImageFormatR8i29
QShaderDescription::ImageFormatRgba32ui30
QShaderDescription::ImageFormatRgba16ui31
QShaderDescription::ImageFormatRgba8ui32
QShaderDescription::ImageFormatR32ui33
QShaderDescription::ImageFormatRgb10a2ui34
QShaderDescription::ImageFormatRg32ui35
QShaderDescription::ImageFormatRg16ui36
QShaderDescription::ImageFormatRg8ui37
QShaderDescription::ImageFormatR16ui38
QShaderDescription::ImageFormatR8ui39

enum QShaderDescription::QualifierFlag
플래그 QShaderDescription::QualifierFlags

한정자 플래그입니다.

Constant
QShaderDescription::QualifierReadOnly1 << 0
QShaderDescription::QualifierWriteOnly1 << 1
QShaderDescription::QualifierCoherent1 << 2
QShaderDescription::QualifierVolatile1 << 3
QShaderDescription::QualifierRestrict1 << 4

QualifierFlags 유형은 QFlags<QualifierFlag>에 대한 typedef입니다. QualifierFlag 값의 OR 조합을 저장합니다.

enum QShaderDescription::TessellationMode

상수
QShaderDescription::UnknownTessellationMode0
QShaderDescription::TrianglesTessellationMode1
QShaderDescription::QuadTessellationMode2
QShaderDescription::IsolineTessellationMode3

enum QShaderDescription::TessellationPartitioning

상수
QShaderDescription::UnknownTessellationPartitioning0
QShaderDescription::EqualTessellationPartitioning1
QShaderDescription::FractionalEvenTessellationPartitioning2
QShaderDescription::FractionalOddTessellationPartitioning3

enum QShaderDescription::TessellationWindingOrder

상수
QShaderDescription::UnknownTessellationWindingOrder0
QShaderDescription::CwTessellationWindingOrder1
QShaderDescription::CcwTessellationWindingOrder2

enum QShaderDescription::VariableType

변수 또는 블록 멤버의 유형을 나타냅니다.

상수설명
QShaderDescription::Unknown0
QShaderDescription::Float1
QShaderDescription::Vec22
QShaderDescription::Vec33
QShaderDescription::Vec44
QShaderDescription::Mat25
QShaderDescription::Mat2x36
QShaderDescription::Mat2x47
QShaderDescription::Mat38
QShaderDescription::Mat3x29
QShaderDescription::Mat3x410
QShaderDescription::Mat411
QShaderDescription::Mat4x212
QShaderDescription::Mat4x313
QShaderDescription::Int14
QShaderDescription::Int215
QShaderDescription::Int316
QShaderDescription::Int417
QShaderDescription::Uint18
QShaderDescription::Uint219
QShaderDescription::Uint320
QShaderDescription::Uint421
QShaderDescription::Bool22
QShaderDescription::Bool223
QShaderDescription::Bool324
QShaderDescription::Bool425
QShaderDescription::Double26
QShaderDescription::Double227
QShaderDescription::Double328
QShaderDescription::Double429
QShaderDescription::DMat230
QShaderDescription::DMat2x331
QShaderDescription::DMat2x432
QShaderDescription::DMat333
QShaderDescription::DMat3x234
QShaderDescription::DMat3x435
QShaderDescription::DMat436
QShaderDescription::DMat4x237
QShaderDescription::DMat4x338
QShaderDescription::Sampler1D39
QShaderDescription::Sampler2D40
QShaderDescription::Sampler2DMS41
QShaderDescription::Sampler3D42
QShaderDescription::SamplerCube43
QShaderDescription::Sampler1DArray44
QShaderDescription::Sampler2DArray45
QShaderDescription::Sampler2DMSArray46
QShaderDescription::Sampler3DArray47
QShaderDescription::SamplerCubeArray48
QShaderDescription::SamplerRect49
QShaderDescription::SamplerBuffer50
QShaderDescription::SamplerExternalOES51
QShaderDescription::Sampler52별도의 샘플러용입니다.
QShaderDescription::Image1D53
QShaderDescription::Image2D54
QShaderDescription::Image2DMS55
QShaderDescription::Image3D56
QShaderDescription::ImageCube57
QShaderDescription::Image1DArray58
QShaderDescription::Image2DArray59
QShaderDescription::Image2DMSArray60
QShaderDescription::Image3DArray61
QShaderDescription::ImageCubeArray62
QShaderDescription::ImageRect63
QShaderDescription::ImageBuffer64
QShaderDescription::Struct65
QShaderDescription::Half66
QShaderDescription::Half267
QShaderDescription::Half368
QShaderDescription::Half469

멤버 함수 문서

QShaderDescription::QShaderDescription()

새로운 비어있는 QShaderDescription을 생성합니다.

참고: 비어 있다는 것은 isValid()가 새로 구성된 인스턴스에 대해 false 을 반환한다는 것을 의미합니다.

QShaderDescription::QShaderDescription(const QShaderDescription &other)

other 의 복사본을 생성합니다.

[noexcept] QShaderDescription::~QShaderDescription()

파괴자.

QList<QShaderDescription::InOutVariable> QShaderDescription::combinedImageSamplers() const

결합된 이미지 샘플러 목록을 반환합니다.

GLSL/Vulkan 셰이더를 소스로 사용하면 layout(binding = 1) uniform sampler2D tex; 유니폼은 다음을 생성합니다: (여기서는 텍스트 JSON으로 표시됨)

"combinedImageSamplers": [
     {
         "binding": 1,
         "name": "tex",
         "set": 0,
         "type": "sampler2D"
     }
 ]

다른 언어 버전의 셰이더도 반드시 결합 이미지 샘플러를 사용해야 한다는 의미는 아니며, 특히 이 개념이 모든 곳에 존재하지 않을 수 있다는 점을 고려해야 합니다. 예를 들어 HLSL 버전은 레지스터가 각각 t1과 s1인 Texture2D 및 SamplerState 객체만 사용할 가능성이 높습니다.

std::array<uint, 3> QShaderDescription::computeShaderLocalSize() const

계산 셰이더의 로컬 크기를 반환합니다.

예를 들어 다음 선언이 있는 계산 셰이더의 경우 이 함수는 { 256, 16, 1}을 반환합니다.

layout(local_size_x = 256, local_size_y = 16, local_size_z = 1) in;

[static] QShaderDescription QShaderDescription::deserialize(QDataStream *stream, int version)

stream 에서 로드한 새 QShaderDescription 을 반환합니다. version 은 qsb 버전을 지정합니다.

serialize()도 참조하세요 .

QList<QShaderDescription::BuiltinVariable> QShaderDescription::inputBuiltinVariables() const

입력으로 사용된 활성 빌트인 목록을 반환합니다. 예를 들어, gl_TessCoord 및 gl_Position 값을 읽는 테셀레이션 평가 셰이더의 경우 TessCoordBuiltinPositionBuiltin 이 여기에 나열됩니다.

QList<QShaderDescription::InOutVariable> QShaderDescription::inputVariables() const

입력 변수 목록을 반환합니다. 여기에는 버텍스 단계의 버텍스 입력(속성이라고도 함)과 다른 단계의 입력(베리에이징이라고도 함)이 포함됩니다.

bool QShaderDescription::isValid() const

QShaderDescription 에 변수 및 블록 목록 중 하나에 하나 이상의 항목이 포함되어 있으면 true를 반환합니다.

QList<QShaderDescription::BuiltinVariable> QShaderDescription::outputBuiltinVariables() const

입력으로 사용되는 활성 내장 변수 목록을 반환합니다. 예를 들어 버텍스 셰이더에는 PositionBuiltin 가 출력으로 내장되어 있는 경우가 많습니다.

QList<QShaderDescription::InOutVariable> QShaderDescription::outputVariables() const

출력 변수 목록을 반환합니다.

QList<QShaderDescription::PushConstantBlock> QShaderDescription::pushConstantBlocks() const

푸시 상수 블록의 목록을 반환합니다.

참고: Qt 렌더링 하드웨어 인터페이스와 함께 사용할 셰이더에 푸시 상수 블록을 사용하는 것은 현재 지원되지 않으므로 피하십시오.

void QShaderDescription::serialize(QDataStream *stream, int version) const

QShaderDescriptionstream 으로 직렬화합니다. version 은 qsb 버전을 지정합니다.

deserialize() 및 toJson()도 참조하세요 .

QList<QShaderDescription::StorageBlock> QShaderDescription::storageBlocks() const

셰이더 스토리지 블록 목록을 반환합니다.

예를 들어, GLSL/Vulkan 셰이더를 소스로 사용하는 경우 선언

struct Stuff {
    vec2 a;
    vec2 b;
};
layout(std140, binding = 0) buffer StuffSsbo {
    vec4 whatever;
    Stuff stuff[];
} buf;

은 다음을 생성합니다: (여기서는 텍스트 JSON으로 표시됨)

"storageBlocks": [ {
    "binding": 0,
    "blockName": "StuffSsbo",
    "instanceName": "buf",
    "knownSize": 16,
    "runtimeArrayStride": 16
    "members": [
        {
            "name": "whatever",
            "offset": 0,
            "size": 16,
            "type": "vec4"
        },
        {
            "arrayDims": [
                0
            ],
            "name": "stuff",
            "offset": 16,
            "size": 0,
            "structMembers": [
                {
                    "name": "a",
                    "offset": 0,
                    "size": 8,
                    "type": "vec2"
                },
                {
                    "name": "b",
                    "offset": 8,
                    "size": 8,
                    "type": "vec2"
                }
            ],
            "type": "struct"
        }
    ],
    "set": 0
} ]

참고: 스토리지 블록의 마지막 멤버의 크기는 정의되지 않았습니다. 이는 size 0과 [0] 의 배열 차원으로 표시됩니다. 스토리지 블록의 knownSize 은 마지막 멤버의 크기를 런타임에만 알 수 있으므로 제외됩니다. 배열 크기가 정의되지 않은 마지막 멤버의 배열 항목 사이의 바이트 단위 간격은 runtimeArrayStride 입니다. 이 값은 지정된 버퍼 메모리 레이아웃 표준(std140, std430) 규칙에 따라 결정됩니다.

참고: OpenGL 2.x 또는 OpenGL ES 3.1 이전 버전과 같은 일부 그래픽 API에서는 SSBO를 사용할 수 없습니다.

QList<QShaderDescription::InOutVariable> QShaderDescription::storageImages() const

이미지 변수 목록을 반환합니다.

이러한 변수는 컴퓨팅 셰이더에서 발생할 가능성이 높습니다. 예를 들어 layout (binding = 0, rgba8) uniform readonly image2D inputImage; 은 다음을 생성합니다: (여기서는 텍스트 JSON으로 표시됨)

"storageImages": [
     {
         "binding": 0,
         "imageFormat": "rgba8",
         "name": "inputImage",
         "set": 0,
         "type": "image2D"
     }
 ]

참고: 별도의 이미지 객체는 OpenGL 2.x 또는 3.1 이전의 OpenGL ES와 같은 일부 그래픽 API와 호환되지 않습니다.

QShaderDescription::TessellationMode QShaderDescription::tessellationMode() const

테셀레이션 컨트롤 또는 평가 셰이더의 테셀레이션 실행 모드를 반환합니다.

설정되지 않은 경우 반환되는 값은 UnknownTessellationMode 입니다.

예를 들어, 다음 선언이 있는 테셀레이션 평가 셰이더의 경우 이 함수는 TrianglesTessellationMode 을 반환합니다.

layout(triangles) in;

uint QShaderDescription::tessellationOutputVertexCount() const

출력 버텍스의 수를 반환합니다.

예를 들어, 다음 선언이 있는 테셀레이션 컨트롤 셰이더의 경우 이 함수는 3을 반환합니다.

layout(vertices = 3) out;

QShaderDescription::TessellationPartitioning QShaderDescription::tessellationPartitioning() const

테셀레이션 컨트롤 또는 평가 셰이더의 테셀레이션 파티셔닝 모드를 반환합니다.

설정되지 않은 경우 반환되는 값은 UnknownTessellationPartitioning 입니다.

예를 들어, 다음 선언이 있는 테셀레이션 평가 셰이더의 경우 이 함수는 FractionalOddTessellationPartitioning 을 반환합니다.

layout(triangles, fractional_odd_spacing, ccw) in;

QShaderDescription::TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const

테셀레이션 컨트롤 또는 평가 셰이더의 테셀레이션 와인딩 순서를 반환합니다.

설정되지 않은 경우 반환되는 값은 UnknownTessellationWindingOrder 입니다.

예를 들어, 다음 선언이 있는 테셀레이션 평가 셰이더의 경우 이 함수는 CcwTessellationWindingOrder 을 반환합니다.

layout(triangles, fractional_odd_spacing, ccw) in;

QByteArray QShaderDescription::toJson() const

데이터의 직렬화된 JSON 텍스트 버전을 반환합니다.

참고: JSON 텍스트에는 역직렬화 메서드가 제공되지 않습니다.

serialize()도 참조하세요 .

QList<QShaderDescription::UniformBlock> QShaderDescription::uniformBlocks() const

유니폼 블록 목록을 반환합니다.

QShaderDescription &QShaderDescription::operator=(const QShaderDescription &other)

이 개체에 other 을 할당합니다.

관련 비회원

[noexcept] bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

두 개의 QShaderDescription 객체 lhsrhs 가 같으면 true 를 반환합니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.