셰이더에 의해 매우 이상하게 씹히는 버텍스 속성이 있습니다. VBO에 업로드 (uint8)1
되지만 프래그먼트 셰이더가이를 인식하면으로 해석 10653532160
되거나 0x3F800000
일부 사용자가 1.0f
부동 소수점 의 비트 패턴으로 인식 할 수 있습니다 .
왜 그런지 모르겠어요? 그래도 VBO에 1 ( 0x00000001
) 로 업로드되었음을 확인할 수 있습니다 .
vertex 속성은 다음과 같이 정의됩니다.
struct Vertex{
...
glm::u8vec4 c2; // attribute with problems
};
// not-normalized
glVertexAttribPointer(aColor2, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, c2));
셰이더에는 해당 속성이
glBindAttribLocation(programID, aColor2, "c2");
버텍스 셰이더는 매우 이벤트없이 속성을 따라 전달합니다.
#version 330
in lowp uvec4 c2; // <-- this value is uploaded to the VBO as 0x00, 0x00, 0x00, 0x01;
flat out lowp uvec4 indices;
void main(){
indices = c2;
}
마지막으로 조각 셰이더가이를 파악합니다.
flat in lowp uvec4 indices; // <-- this value is now 0, 0, 0, 0x3F800000
out lowp vec4 fragColor;
void main(){
fragColor = vec4(indices) / 256.0;
}
indices
다양한 나뭇잎과 버텍스 쉐이더 0x3F800000
에 대한 indices.w
내 쉐이더 관리자에 따르면, 뭔가 있도록 홀수가 일어나고? 원인은 무엇입니까?
꼭지점 속성의 유형이 필수이므로 (focus on ) glVertexAttribIPointer
대신 사용해야 합니다. 을 참조하십시오 .glVertexAttribPointer
I
glVertexAttribPointer
에 지정된 glVertexAttribPointer
유형은 소스 버퍼의 데이터 유형이며 셰이더에서 대상 속성 유형을 지정하지 않습니다. 를 사용 glVertexAttribPointer
하면 셰이더 프로그램의 속성 유형이 부동 소수점으로 간주되고 정수 데이터가 변환됩니다.
사용하는 경우 glVertexAttribIPointer
값은 정수 값으로 남습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다