QShaderBaker Class
GLSL/Vulkan 셰이더를 SPIR-V로 컴파일하고, 다른 셰이딩 언어로 변환하며, 리플렉션 메타데이터를 수집합니다. 더 보기...
| 헤더: | #include <qshaderbaker.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS ShaderTools) target_link_libraries(mytarget PRIVATE Qt6::ShaderTools) |
| 다음부터: | Qt 6.6 |
공개 유형
| GeneratedShader | |
| enum class | GlslOption { GlslEsFragDefaultFloatPrecisionMedium } |
| flags | GlslOptions |
| enum class | SpirvOption { GenerateFullDebugInfo, StripDebugAndVarInfo } |
| flags | SpirvOptions |
공개 함수
| QShaderBaker() | |
| ~QShaderBaker() | |
| QShader | bake() |
| QString | errorMessage() const |
| void | setBatchableVertexShaderExtraInputLocation(int location) |
| void | setBreakOnShaderTranslationError(bool enable) |
| void | setGeneratedShaderVariants(const QList<QShader::Variant> &v) |
| void | setGeneratedShaders(const QList<QShaderBaker::GeneratedShader> &v) |
(since 6.9) void | setGlslOptions(QShaderBaker::GlslOptions options) |
(since 6.7) void | setMultiViewCount(int count) |
| void | setPerTargetCompilation(bool enable) |
| void | setPreamble(const QByteArray &preamble) |
| void | setSourceDevice(QIODevice *device, QShader::Stage stage, const QString &fileName = QString()) |
| void | setSourceFileName(const QString &fileName) |
| void | setSourceFileName(const QString &fileName, QShader::Stage stage) |
| void | setSourceString(const QByteArray &sourceString, QShader::Stage stage, const QString &fileName = QString()) |
| void | setSpirvOptions(QShaderBaker::SpirvOptions options) |
| void | setTessellationMode(QShaderDescription::TessellationMode mode) |
| void | setTessellationOutputVertexCount(int count) |
상세 설명
경고: QShaderBaker는 QShader 및 QShaderDescription 를 포함한 Qt GUI 모듈의 QRhi 클래스 계열과 마찬가지로, 제한된 호환성만 보장합니다. 이 클래스들에 대해서는 소스 또는 바이너리 호환성이 보장되지 않으며, 이는 해당 API가 애플리케이션이 개발된 시점의 Qt 버전에서만 작동이 보장됨을 의미합니다. 다만, 소스 비호환성 변경 사항은 최소한으로 유지되도록 노력하며, 마이너 릴리스(6.7, 6.8 등)에서만 이루어집니다. 애플리케이션에서 이 클래스를 사용하려면, CMake를 사용하는 경우 Qt::ShaderToolsPrivate 에 링크하고, rhi 접두사가 붙은 헤더 파일(예: #include <rhi/qshaderbaker.h>)을 포함시켜야 합니다.
QShaderBaker는 그래픽(버텍스, 프래그먼트 등) 또는 컴퓨트 셰이더를 입력으로 받아, 리플렉션 정보와 함께 해당 셰이더의 여러 변형(소스 또는 바이트코드)을 생성합니다. 결과는 QShader 인스턴스로 표현되며, 이 인스턴스는 간단하고 빠른 직렬화 및 역직렬화 기능도 제공합니다.
참고: 애플리케이션과 라이브러리에서는 이 클래스를 직접 사용하지 않는 것이 좋습니다. 대신, 모든 Qt 사용자는 CMake를 통해 빌드 시점에 qsb 명령줄 도구를 호출하여 오프라인 컴파일을 이용할 것을 권장합니다. qsb 도구는 QShaderBaker를 사용하여 생성된 QShader 의 직렬화 버전을 파일에 기록합니다. 이 클래스의 사용은 사용자가 제공한 셰이더 소스 문자열이나 동적으로 생성된 셰이더 소스 문자열을 다룰 때와 같이 런타임 컴파일을 피할 수 없는 경우로 제한되어야 합니다.
현재 입력 형식은 항상 Vulkan 스타일의 GLSL로 간주됩니다. 개요는 GL_KHR_vulkan_glsl 사양을 참조하십시오. 단, Qt Shader Tools 모듈은 Qt Rendering Hardware Interface 모듈의 QRhi 클래스와 함께 사용하도록 설계되었으므로, 여러 개념과 구문(푸시 상수, 스토리지 버퍼, 서브패스, 등)은 현재 적용되지 않습니다. 향후 HLSL에서 SPIR-V로의 컴파일이 적합하다고 판단되면, HLSL을 소스 형식으로 활성화하는 등 추가 옵션이 도입될 수 있습니다.
반사 메타데이터는 QShader::description()를 호출하여 결과물인 QShader 에서 가져올 수 있습니다. 많은 최신 그래픽 API가 내장된 셰이더 반사 기능을 제공하지 않기 때문에, 셰이더가 어떤 버텍스 입력 및 셰이더 리소스 세트를 기대하는지, 그리고 그 레이아웃이 어떻게 되는지 파악해야 할 때 이는 필수적입니다.
일반적인 워크플로
어떤 애플리케이션에 다음과 같은 버텍스 셰이더와 프래그먼트 셰이더가 있다고 가정해 봅시다:
버텍스 셰이더:
#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;
};
void main()
{
v_color = color;
gl_Position = mvp * position;
}프래그먼트 셰이더:
#version 440
layout(location = 0) in vec3 v_color;
layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
mat4 mvp;
float opacity;
};
void main()
{
fragColor = vec4(v_color * opacity, opacity);
}QRhiGraphicsPipeline 에 그대로 전달할 수 있는 QShader 인스턴스를 얻으려면, 셰이더 팩 생성을 오프라인에서 수행하거나 런타임에 수행하는 두 가지 옵션이 있습니다.
전자의 경우 qsb 도구를 실행해야 합니다:
qsb --glsl "100 es,120" --hlsl 50 --msl 12 color.vert -o color.vert.qsb
qsb --glsl "100 es,120" --hlsl 50 --msl 12 color.frag -o color.frag.qsb이 예제에서는 QRhi 에 적합한 변환 대상을 사용합니다. 즉, GLSL/ES 100, GLSL 120, HLSL 셰이더 모델 5.0 및 Metal 셰이딩 언어 1.2를 의미합니다.
명령줄 옵션이 setGeneratedShaders()을 통해 지정할 수 있는 항목과 어떻게 일치하는지 확인하십시오. 생성된 파일이 준비되면 애플리케이션과 함께 배포할 수 있으며(일반적으로 Qt 리소스 시스템을 통해 실행 파일에 임베드됨), 런타임에 로드하여 QShader::fromSerialized()에 전달할 수 있습니다.
여기서는 다루지 않았지만, ` qsb `는 더 많은 기능을 수행할 수 있습니다. Windows에서는 ` fxc `를, macOS에서는 적절한 XCode 도구를 호출하여 생성된 HLSL 또는 Metal 셰이더 코드를 바이트코드로 컴파일하고, 컴파일된 버전을 ` QShader`에 포함시킬 수도 있습니다. 베이킹된 셰이더 팩이 파일에 기록된 후에는 ` qsb -d `를 실행하여 그 내용을 확인할 수 있습니다. 자세한 내용은 --help 를 참조하여 qsb 를 실행하십시오.
다른 방법으로는 런타임에 동일한 작업을 수행하는 것입니다. 이를 위해서는 QShaderBaker 인스턴스를 생성하고, ` setSourceFileName()`를 호출한 다음, ` setGeneratedShaders()`를 통해 변환 대상을 설정해야 합니다:
baker.setGeneratedShaderVariants({ QShader::StandardShader });
QList<QShaderBaker::GeneratedShader> targets;
targets.append({ QShader::SpirvShader, QShaderVersion(100) });
targets.append({ QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs) });
targets.append({ QShader::SpirvShader, QShaderVersion(120) });
targets.append({ QShader::HlslShader, QShaderVersion(50) });
targets.append({ QShader::MslShader, QShaderVersion(12) });
baker.setGeneratedShaders(targets);
QShader shaders = baker.bake();
if (!shaders.isValid())
qWarning() << baker.errorMessage();QShader도 참조하십시오 .
멤버 유형 문서
[alias] QShaderBaker::GeneratedShader
std::pair<QShader::Source, QShaderVersion>의 동의어입니다.
enum class QShaderBaker::GlslOption
flags QShaderBaker::GlslOptions
| 상수 | 값 | 설명 |
|---|---|---|
QShaderBaker::GlslOption::GlslEsFragDefaultFloatPrecisionMedium | 0x01 | GLSL ES용 프래그먼트 셰이더에서 ` precision mediump float; `를 출력합니다. |
GlslOptions 유형은 QFlags<GlslOption>에 대한 typedef입니다. 이 유형은 GlslOption 값들의 OR 조합을 저장합니다.
enum class QShaderBaker::SpirvOption
flags QShaderBaker::SpirvOptions
| 상수 | 값 | 설명 |
|---|---|---|
QShaderBaker::SpirvOption::GenerateFullDebugInfo | 0x01 | SPIR-V 바이너리에 추가 디버그 정보를 생성하여 저장합니다. |
QShaderBaker::SpirvOption::StripDebugAndVarInfo | 0x02 | SPIR-V 바이너리에서 모든 디버그 정보와 변수명 정보를 제거합니다. |
SpirvOptions 유형은 QFlags<SpirvOption>에 대한 typedef입니다. 이 유형은 SpirvOption 값들의 OR 조합을 저장합니다.
멤버 함수 설명
QShaderBaker::QShaderBaker()
새로운 QShaderBaker 객체를 생성합니다.
[noexcept] QShaderBaker::~QShaderBaker()
소멸자.
QShader QShaderBaker::bake()
컴파일 및 번역 프로세스를 실행합니다.
QShader 인스턴스를 반환합니다. 프로세스가 성공적으로 완료되었는지 확인하려면 QShader::isValid()을 호출하십시오. 해당 함수가 false 를 반환하면, errorMessage()을 호출하여 로그를 가져오십시오.
이 작업은 많은 자원을 소모합니다. 애플리케이션에서 이 메서드를 호출할 때는 별도의 스레드에서 수행하는 것이 좋습니다.
참고: ` QShaderBaker ` 인스턴스는 재사용이 가능합니다. `bake()`를 호출한 후에도 동일한 인스턴스를 다른 입력값과 함께 다시 사용할 수 있습니다. 그러나 ` QShaderBaker ` 인스턴스는 수명 기간 동안 단일 스레드에서만 사용해야 합니다.
QString QShaderBaker::errorMessage() const
마지막으로 실행된 ` bake()`에서 발생한 오류 메시지를 반환하며, 오류가 없는 경우에는 빈 문자열을 반환합니다.
참고: 오류에는 파일 읽기 오류, 컴파일 오류 및 번역 오류가 포함됩니다. 대상이나 변형을 지정하지 않은 경우, 결과로 생성된 ` QShader `가 유효하지 않더라도 오류로 간주되지 않습니다.
void QShaderBaker::setBatchableVertexShaderExtraInputLocation(int location)
QShader::BatchableVertexShader 변형을 생성할 때, ` location `은 삽입된 정점 입력의 입력 위치를 지정합니다. 이 값은 기본적으로 7이며, 정점 셰이더가 이미 입력 위치 7을 사용하고 있는 경우에만 재정의해야 합니다.
void QShaderBaker::setBreakOnShaderTranslationError(bool enable)
셰이더 변환(SPIR-V에서 GLSL/HLSL/MSL로)이 실패할 때의 동작을 제어합니다. 기본적으로 이 설정은 true로 되어 있으며, 요청된 셰이더를 생성할 수 없는 경우 ` bake()`가 오류를 반환하게 됩니다. 이를 원하지 않고, 생성 가능한 부분은 생성하되 나머지는 오류 메시지 없이 건너뛰고자 한다면 ` enable `를 false로 설정하십시오.
여러 GLSL 버전을 대상으로 설정할 경우, 특정 기능이 주어진 버전으로 변환될 수 없을 때 오류가 발생할 수 있습니다. 예를 들어, textureSize()를 사용하는 셰이더를 GLSL ES 100으로 변환하려고 시도하면 "textureSize는 ESSL 100에서 지원되지 않습니다"라는 오류 메시지와 함께 bake() 호출 전체가 실패하게 됩니다. 요청된 GLSL ES 100 셰이더가 결과에 포함되지 않는 것이 허용된다면, 이 플래그를 false로 설정하면 bake() 호출이 성공적으로 수행됩니다.
void QShaderBaker::setGeneratedShaderVariants(const QList<QShader::Variant> &v)
생성될 셰이더 변형을 지정합니다. 각 셰이더 버전마다 결과 파일인 QShader 에 여러 개의 변형이 포함될 수 있습니다.
대부분의 경우 v 에는 QShader::StandardShader 라는 단일 항목이 포함됩니다.
참고: 변형이 설정되지 않은경우 , 결과 QShader 파일은 비어 있게 되어 유효하지 않게 됩니다.
void QShaderBaker::setGeneratedShaders(const QList<QShaderBaker::GeneratedShader> &v)
컴파일하거나 변환할 셰이더의 종류를 지정합니다. 기본적으로 아무것도 생성되지 않으므로, ` bake()`를 호출하기 전에 이 함수를 반드시 호출해야 합니다.
참고: 이 함수가 호출되지 않거나, ` v `가 비어 있거나 유효하지 않은 항목만 포함된경우 , 결과로 생성된 ` QShader `는 비어 있게 되어 유효하지 않게 됩니다.
예를 들어, 다른 언어로의 추가 변환 없이 SPIR-V로만 베이킹하는 것이 가능한 최소한의 대상입니다. 이를 요청하려면 다음과 같이 하십시오:
baker.setGeneratedShaders({ QShader::SpirvShader, QShaderVersion(100) });참고: QShaderBaker 는 SPIR-V 및 사람이 읽을 수 있는 소스 대상만 처리합니다. QShader::DxbcShader 또는 QShader::MetalLibShader 와 같은 API별 중간 형식으로의 추가 컴파일은 qsb 명령줄 도구를 통해 구현되며, QShaderBaker 런타임 API의 일부는 아닙니다.
[since 6.9] void QShaderBaker::setGlslOptions(QShaderBaker::GlslOptions options)
생성된 GLSL 및 GLSL ES 소스 코드에 대한 추가 options 를 설정합니다. 기본적으로 플래그는 설정되어 있지 않습니다.
이 함수는 Qt 6.9에서 도입되었습니다.
[since 6.7] void QShaderBaker::setMultiViewCount(int count)
멀티뷰를 사용하여 셰이더를 트랜스파일링할 때(예: GL_OVR_multiview2, VK_KHR_multiview 등을 사용하는 렌더러에서 gl_ViewIndex를 활용하는 버텍스 셰이더), 일부 대상의 경우 셰이더 내에서 뷰의 수를 선언해야 합니다. 이는 Vulkan 스타일의 GLSL 코드에서는 수행되지 않으며, SPIR-V나 HLSL과 같은 타깃에는 관련이 없지만, OpenGL 및 GLSL의 경우 필수적이므로 해당 값을 추가 메타데이터로 제공해야 합니다.
기본값은 0이며, 이 경우 num_views 문이 삽입되지 않습니다. 1로 설정하는 것은 어차피 기본값 num_views 이기 때문에 의미가 없습니다. 따라서 효과를 내기 위해서는 count 을 2 이상으로 설정해야 합니다. 예를 들어 2로 설정하면, 생성된 GLSL 셰이더에 layout(num_views = 2) in; 문이 포함됩니다.
count 을 2 이상으로 설정하면 몇 가지 전처리기 문도 삽입됩니다. QSHADER_VIEW_COUNT 은 count 으로 설정되며, GL_EXT_multiview 확장은 자동으로 활성화됩니다. 따라서 적절한 count 을 설정하는 것은 다른 유형의 셰이더에서도 중요할 수 있습니다. 예를 들어, 버텍스 셰이더와 프래그먼트 셰이더 간에 유니폼 버퍼를 공유하고, 두 셰이더 모두 #if QSHADER_VIEW_COUNT >= 2 와 같은 코드를 작성할 수 있어야 하는 경우입니다.
이 함수는 Qt 6.7에서 도입되었습니다.
void QShaderBaker::setPerTargetCompilation(bool enable)
타겟별 컴파일을 ` enable`로 설정합니다. 기본적으로 이 옵션은 비활성화되어 있으며, 이는 Vulkan/GLSL 소스 코드가 변형(variant)당 한 번씩 SPIR-V로 컴파일됨을 의미합니다. (즉, 기본적으로 한 번 컴파일되며, 버텍스 셰이더이고 요청된 대로 `Batchable` 변형인 경우에는 두 번 컴파일됩니다). 그 결과 생성된 SPIR-V는 이후 다양한 대상 언어(GLSL, HLSL, MSL)로 변환됩니다.
타깃별 컴파일 모드에서는 각 타깃마다 별도의 GLSL-SPIR-V 컴파일 단계가 수행되며, 이는 ` setGeneratedShaders()`를 통해 요청된 각 GLSL/HLSL/MSL 버전에 대해 적용됩니다. 입력 소스는 동일하지만, 타깃별 전처리기 정의가 삽입됩니다. 이 방식은 시간이 훨씬 더 많이 소요되지만, 애플리케이션이 단일 셰이더를 제공하고 #ifdef 블록을 사용하여 구분할 수 있게 해줍니다. 이 모드가 비활성화된 경우, 동일한 결과를 얻으려면 셰이더 파일의 여러 버전을 제공하고, 각각을 별도로 처리하며, 각 버전에 대한 {.qsb} 파일을 배포한 후, 런타임 로직에 따라 올바른 파일을 선택해야 합니다.
이 모드에서는 다음 매크로들이 자동으로 정의됩니다. 이 매크로들은 그래픽 API가 아닌 셰이딩 언어에 항상 연동된다는 점에 유의하십시오.
QSHADER_SPIRV- SPIR-V를 대상으로 할 때 정의됩니다(일반적으로 Vulkan에서 사용됨).QSHADER_SPIRV_VERSION- 대상 SPIR-V 버전 번호(예:100).QSHADER_GLSL- GLSL 또는 GLSL ES를 대상으로 할 때 정의됩니다(일반적으로 OpenGL 또는 OpenGL ES에서 사용됨).QSHADER_GLSL_VERSION- 대상 GLSL 또는 GLSL ES 버전 번호(예:100,300,330).QSHADER_GLSL_ES- GLSL ES를 대상으로 할 때만 정의됩니다.QSHADER_HLSL- HLSL을 대상으로 할 때 정의됩니다(일반적으로 Direct 3D에서 사용됨).QSHADER_HLSL_VERSION- 대상 HLSL 셰이더 모델 버전(예:50QSHADER_MSL- Metal 셰이딩 언어(Metal)를 대상으로 할 때 정의됩니다(일반적으로 Metal에서 사용됨)QSHADER_MSL_VERSION- 대상 MSL 버전(예:12또는20).
이를 통해 다음과 같은 셰이더 코드를 작성할 수 있습니다.
#if QSHADER_HLSL || QSHADER_MSL
vec2 uv = vec2(uv_coord.x, 1.0 - uv_coord.y);
#else
vec2 uv = uv_coord;
#endif참고: 버전 번호는 GLSL에서 영감을 받은 QShaderVersion 구문을 따르므로 항상 단일 정수입니다.
참고: 개별 타겟의 개수와 관계없이, QShader 당 QShaderDescription 은하나뿐입니다 . 따라서 유니폼 블록의 멤버, 버텍스 입력 등은 위에서 설명한 매크로를 사용하여 조건부로 설정해서는 안 됩니다.
경고: 그래픽 API와 셰이딩 언어 개념 간의 차이점을유의하십시오 . QShaderBaker 및 관련 도구는 결과가 이후에 어떻게 사용되는지는 무시하고, 오로지 셰이딩 언어의 개념에 따라 엄격하게 작동합니다. 따라서, 언젠가 Qt 그래픽스 스택의 상위 계층에서 Vulkan 이외의 API에도 SPIR-V를 사용하기 시작한다면, QSHADER_SPIRV가 Vulkan을 의미한다는 가정은 더 이상 성립하지 않게 될 것입니다.
void QShaderBaker::setPreamble(const QByteArray &preamble)
일반 셰이더 코드보다 먼저 처리되는 사용자 정의 버전 지시문( preamble )을 지정합니다.
이는 단순히 소스 문자열의 맨 앞에 내용을 추가하는 것 이상입니다. 즉, 모든 코드보다 앞에 배치되어야 하는 GLSL 버전 지시문의 유효성에는 영향을 미치지 않습니다. 또한, 보고된 오류 메시지의 줄 번호는 preamble 에 지정된 내용을 무시하고 그대로 유지됩니다.
서두(preamble)의 사용 사례 중 하나는 동적으로 생성된 ` #define ` 문을 투명하게 삽입하는 것입니다.
void QShaderBaker::setSourceDevice(QIODevice *device, QShader::Stage stage, const QString &fileName = QString())
소스 device 를 설정합니다. 이를 통해 단순한 파일뿐만 아니라 모든 QIODevice 을 사용할 수 있습니다. stage 는 셰이더 단계를 지정하며, 선택 사항인 fileName 에는 오류 메시지에 사용되는 파일 이름이 포함됩니다.
경고: device 에는 신뢰할 수 있는 콘텐츠가 포함되어야 합니다. 애플리케이션 개발자는 애플리케이션의 통제 범위를 벗어난 소스에서 사용자가 제공한 데이터를 전달하기 전에 잠재적인 영향을 신중하게 고려해야 합니다.
void QShaderBaker::setSourceFileName(const QString &fileName)
셰이더 소스 파일의 이름을 ` fileName`로 설정합니다. 이 파일은 ` bake()`를 호출할 때 읽어들여집니다. 셰이더 스테이지는 파일 확장자를 통해 자동으로 추론됩니다. 이를 원하지 않거나 불가능한 경우에는 대신 `stage` 인자를 사용하는 오버로드를 사용하십시오.
지원되는 파일 확장자는 다음과 같습니다:
.vert- 버텍스 셰이더.frag- 프래그먼트(픽셀) 셰이더.tesc- 테셀레이션 제어(헐) 셰이더.tese- 테셀레이션 평가(도메인) 셰이더.geom- 지오메트리 셰이더.comp- 컴퓨트 셰이더
경고: ` fileName ` 에는 신뢰할 수 있는 콘텐츠가 포함되어야 합니다. 애플리케이션 개발자는 애플리케이션의 일부가 아닌 사용자가 제공한 소스 파일을 전달하기 전에 잠재적인 영향을 신중하게 고려할 것을 권장합니다.
void QShaderBaker::setSourceFileName(const QString &fileName, QShader::Stage stage)
셰이더 소스 파일의 이름을 fileName 로 설정합니다. 이 파일은 bake()를 호출할 때 읽히게 됩니다. 셰이더 스테이지는 stage 로 지정됩니다.
경고: fileName 에는 신뢰할 수 있는 내용이 포함되어 있어야 합니다. 애플리케이션 개발자는 애플리케이션의 일부가 아닌 사용자가 제공한 소스 파일을 전달하기 전에 잠재적인 영향을 신중하게 고려해야 합니다.
void QShaderBaker::setSourceString(const QByteArray &sourceString, QShader::Stage stage, const QString &fileName = QString())
입력 셰이더 sourceString 를 설정합니다. stage 는 셰이더 단계를 지정하며, 선택 사항인 fileName 에는 오류 메시지에 사용되는 파일 이름이 포함됩니다.
경고: ` sourceString ` 에는 신뢰할 수 있는 콘텐츠가 포함되어야 합니다. 애플리케이션 개발자는 애플리케이션이 제어할 수 없는 출처에서 사용자가 제공한 데이터를 전달하기 전에 잠재적인 영향을 신중하게 고려해야 합니다.
void QShaderBaker::setSpirvOptions(QShaderBaker::SpirvOptions options)
생성된 SPIR-V 바이너리에 대한 추가 options 를 설정합니다. 기본적으로 플래그는 설정되지 않습니다.
void QShaderBaker::setTessellationMode(QShaderDescription::TessellationMode mode)
테셀레이션 제어 셰이더용 MSL 셰이더 코드를 생성할 때는 테셀레이션 mode (삼각형 또는 사각형)을 사전에 파악해야 합니다. GLSL에서는 일반적으로 테셀레이션 평가 셰이더에서 이를 선언하지만, Metal의 경우 테셀레이션 제어 셰이더에서 컴퓨트 셰이더를 생성할 때도 이를 파악해야 합니다.
설정되지 않은 경우 기본값은 삼각형입니다.
void QShaderBaker::setTessellationOutputVertexCount(int count)
테셀레이션 평가 셰이더용 MSL 셰이더 코드를 생성할 때는, 테셀레이션 제어 셰이더의 출력 버텍스 count 를 사전에 파악하고 있어야 합니다. GLSL에서는 일반적으로 테셀레이션 제어 셰이더 내에서 이를 선언하지만, Metal의 경우 테셀레이션 평가 셰이더에서 버텍스 셰이더를 생성할 때도 이를 파악하고 있어야 합니다.
설정되지 않은 경우 기본값은 3입니다.
© 2026 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.