최대 8192 개의 레이어가있는 texture_2d_array를 사용하려고합니다. 그러나 2048 번째 이후의 모든 레이어에는 가비지 데이터가 포함됩니다 (텍스처를 시각화하기 위해 개별 레이어를 쿼드에 매핑하여 테스트 됨). 내 그래픽 카드2048을 넘는 텍스처 레이어에 왜 가비지 데이터가 있습니까?
glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &maxTexLayers);
반환 8192 (5770 AMD)는 AMD의 7850er에 대해 동일한와 레이어의 최대 수를 쿼리. 사용 가능한 유일한 그래픽 카드는 2048 개의 레이어를 지원하는 NVidia 480입니다.
-
: 나는 밖으로 아이디어입니다
- glTexStorage3D를 glTexImage3D로 변경 - 변경하지 않음
- 기본/최대 레벨로 재생 - 변경하지 않음
- Min_Filter는 GL_LINEAR 없습니다 - 밉맵 (glGenerateMipmaps)를 생성 변화
- - 가령하는 층의 크기를 감소 변경 없음
- 을 4x4 - 변경 없음. 4096 - 변화없이
- 수 있도록 디버그 컨텍스트 - - AMD의 7850로 전환하지 변화없이
- 오류
- 등을
(이 프로그램의 컷 다운 버전을 찾을 수 있습니다 여기에 https://mega.co.nz/#!FJ0gzIoJ!Kk0q_1xv9c7sCTi68mbKon1gDBUM1dgjrxoBJKTlj6U)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 7);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 8, GL_RGB8, 128, 128, 8192);
//glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 128, 128, 8192, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
std::vector<char> image = readImage(testImagePath);
for (unsigned int i = 0; i < 8192; ++i)
{
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, 128, 128, 1, GL_RGB, GL_UNSIGNED_BYTE, image.data());
}
GLuint tLoc = glGetUniformLocation (program, "texArray");
glProgramUniform1i (program, tLoc, 0);
:
나는 질감을 만들려면 다음 코드를 사용
그래서 다른 물건을 많이, 그것은을 가진 드라이버 버그가 될 수 드라이버가 GL_MAX_ARRAY_TEXTURE_LAYERS의 잘못된 번호를보고했지만 어쩌면 내가 놓친 뭔가 하나를 생각할 수 있습니다.
EDIT : 그런 질감은 꽤 많은 메모리를 사용한다는 것을 알고 있습니다. 그래도 그래픽 카드에 많은 양의 OpenGL을 사용할 수 있다고하더라도 OpenGL에서 할당 할 수 있다고 보장하지는 않지만 디버그 컨텍스트에 오류가 없습니다. 특히 더 OUT_OF_MEMORY을 사용할 수없고, 또한 이는 단지 5백12킬로바이트
나는이 질문이 귀하의 것으로 가정합니다 : http://devgurus.amd.com/thread/160796? 그렇지 않다면 같은 벽돌 벽에 머리를 부딪히는 다른 사람이 있습니다 ... –
귀하의 가정은 맞습니다;) –
AMD 드라이버 개발자에게이 사실을 알려 주셨으면합니다. –