>

복합 데이터 유형 인터리빙 플로트 및 부호없는 정수를 포함하는 버퍼 (SSBO 및 VBO로 사용)가 있습니다.

struct VertexData
{
    struct 
    {   
        float x; 
        float y; 
        float z; 
    } position;
    struct
    {
        float u;
        float v;
    } tex_coords;
    GLuint entity_id;
};
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData) * buffer_maxSize, nullptr, GL_DYNAMIC_DRAW);

버퍼를 지우면 다음 기능을 사용합니다 :

glClearBufferData(GL_SHADER_STORAGE_BUFFER, GL_R32UI, GL_RED, GL_UNSIGNED_INT, nullptr);

작동하지만형식 GL_R32UI 부터  실제 데이터 유형과 일치하지 않습니다 ( VertexData ) 코드가 모든 컴퓨터/드라이버에서 작동하지 않을 수 있습니다.

코드가 이식성이없는 경우 사용해야하는 올바른 기능은 무엇입니까?

<시간>

더 나은 이식성을 위해 VertexData에서 GL_FLOAT를 사용해야합니까?

  • 답변 # 1

    버퍼 객체에는 "실제 유형의 데이터"가 없습니다. 바이트를 포함합니다. 그게 다야. 그것은 저장하는 바이트를 의미하는 버퍼의 사용법이며, 그 바이트는 특정 사용법이 가지고 있다고 의미합니다. 그런 경우에도 버퍼의 데이터를 특정 방식으로 사용할 때만 의미가 있습니다.

    명확한 호출은 모든 버퍼의 바이트를 0으로 설정합니다. 해당 버퍼를 정점 데이터의 소스로 사용하고 특정 속성의 유형이 GL_FLOAT 인 경우 그런 다음 해당 속성에 대해 읽은 바이트는 CPU가 동등한 유형을 제공하는 것과 동일한 바이트 순서로 IEEE-754 32 비트 부동 소수점 값을 저장하는 것으로 해석됩니다. IEEE-754는 0 바이트의 시퀀스가 ​​잘 정의 된 값 (즉, 양의 0)을 가지므로 정의 된 동작을 갖습니다.

  • 이전 message queue - masstransit - 계약 클래스의 패턴 및 사례
  • 다음 java - invaliddefinitionexception - 내부 클래스에 대한 직렬 변환기가 없습니다