지식이 늘었다/OpenGL ES

Shader Language - precision

moneydeveloper 2020. 11. 18. 17:22
반응형

precision 을 잘못 지정하여 하루의 시간을 날린 일이 있어 해당 내용에 대해서 정리를 하겠습니다. 

 

shader 작성시에 precision 에 대해서 잘 알고 작성해야 합니다. 

precision 은 shader 에 전달되는 데이터를 얼마만큼의 bit 를 사용할지를 결정 한다고 보시면 됩니다. 

 

아래 표는 precision 에 따른 사용할 데이터의 범위이다.

 

(www.khronos.org/registry/OpenGL/specs/es/3.2/GLSL_ES_Specification_3.20.pdf )

 

 

사용방법은 간단합니다. 

precision 명령어를 통해 모든 변수에 대해서 동일하게 지정해주거나 

특졍 변수에 highp/mediump/lowp 를 지정해서 사용할 수 있습니다. 

 

example 로 마무리하겠습니다. 

 

precision highp float;
layout (location = 0)   in 		vec4 	inVertex; //precision 명령에 의해 highp 로 적용
layout (location = 1)   in lowp vec3 	inColor;  //lowp 를 명시했기에 lowp 로 적용

uniform	 mat4 MVPMatrix;	//precision 명령에 의해 highp 로 적용
out lowp vec3 outColor;		// lowp 를 명시했기에 lowp 로 적용

void main()
{
	
    highp vec4 vertex = MVPMatrix * vec4(inVertex);
    outColor = inColor;
    gl_Position = vertex;
}

 

※ 주의사항 : 그래픽카드나 제공된 SDK 에 따라서 모두 highp 로 동작할 수 있습니다.

반응형