OpenGL texture1D
Я пытаюсь прочитать из шейдера фрагмента texture1d:
uniform sampler1D world;
...
texelFetch(world, 0, 0);
Я загружаю w, где w[0]=123.0f w[1]=123.0f...:
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &pt->world);
glBindTexture(GL_TEXTURE_1D, pt->world);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 2, 0, GL_RGBA, GL_FLOAT, &w);
Переплет:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, pt->world);
glUniform1i(glbPTworld, 0);
Однако фрагментный шейдер считывает vec4(0,0,0,1) вместо vec4(123,123,123,123), когда я использую ширину в glTexImage1D, отличную от единицы. Кроме того, если я использую:
glGetTexImage(GL_TEXTURE_1D, 0, GL_RGBA, GL_FLOAT, x);
Чтобы вернуть текстуру, я вижу ожидаемые значения.
1 ответ
Я вижу пару красных флажков с вашим кодом, хотя я не уверен, связаны ли они с проблемой или нет. Во-первых, вы говорите OpenGL, что ваша текстура имеет ширину всего 2 пикселя. Это верно?
Во-вторых, вы проходите GL_TEXTURE_2D
в glTexParameteri()
, но вы используете GL_TEXTURE_1D
текстурная цель. Это кажется неправильным.