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 текстурная цель. Это кажется неправильным.

Другие вопросы по тегам