증상
Mari 3.4v1/4.1v1 버전 이상에서는 사용자가 만든 일부 사용자 정의 셰이더에 다음과 같은 컴파일 오류가 발생할 수 있습니다.
0(2754) : error C7011: implicit cast from "uvec4" to "uvec2"
이 문서에서는 오류가 표시되는 이유와 개발자로서 사용자 정의 셰이더를 조정하여 이 문제를 해결하고 셰이더 파일을 Mari 버전 전반에서 사용할 수 있도록 하는 방법에 대해 설명합니다.
원인
3.4v1/4.1v1부터 Mari 의 텍스처 토큰 시스템이 uvec4를 사용하도록 확장되었습니다.
이전 버전의 Mari uvec2를 사용했습니다. 이는 uvec2 용으로 작성된 일부 사용자 정의 GLSL 셰이더가 uvec2 에서 uvec4 로의 텍스처 토큰 변경으로 인해 실패할 수 있음을 의미합니다.
불행하게도 Mari 3.3v1/3.4v1과 Mari 4.0x/4.1x(및 이후 버전) 사이의 텍스처 토큰 버전 변경을 정의하는 방법이 없었으며 해당 셰이더가 최신 Mari 버전.
해결
Mari 3.4v1/4.1v1에서는 문제를 해결하기 위해 GLSL 코드 내에 새로운 MARI _VERSION 정의 옵션을 도입했습니다. 이 업데이트를 통해 사용자는 Mari 버전 간에 셰이더 코드를 복제할 필요 없이 사용자 정의 셰이더에 대한 단일 코드 기반을 유지할 수 있습니다.
이는 아래와 같이 사용자의 셰이더에서 구현될 수 있습니다.
- M은 주요 버전 번호를 나타냅니다.
- mm - 0으로 채워진 부 버전 번호
- RR - 릴리스 번호는 0으로 채워집니다.
예를 들어:
#if (MARI_VERSION >= MmmRR)
// This code is compiled only on Mari M.mmvRR or newer.
...
#endif
이를 Mari 3.4v1에서 실제로 적용하려면 셰이더 파일 내에서 다음과 같이 코드를 정의해야 합니다.
#if (MARI_VERSION >= 30401)
// This code is compiled only on Mari 3.4v1 or newer.
#endif
이를 Mari 4.1v1에서 실제로 적용하려면 셰이더 파일 내에서 다음과 같이 코드를 정의해야 합니다.
#if (MARI_VERSION >= 40101)
// This code is compiled only on Mari 4.1v1 or newer.
#endif
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요