我有一个大的WxH浮点数组:
float floatArray[W][H];
我想在片段着色器中访问它,我需要通过纹理加载/访问它,因为它的大小:
vec4 v4 = texture2D(tex, v_texCoord);
//Getting v4.x as floatArray[v_texCoord.x * W][v_texCoord.y * H]
我像这样加载纹理:
int texturenames[1];
glGenTextures(1, texturenames);
glActiveTexture(GL_TEXTURE0 + texturenames[0]);
glBindTexture(GL_TEXTURE_2D, texturenames[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, w, h, 0, GL_LUMINANCE, GL_FLOAT, floatArray);
glUniform1i(glGetUniformLocation(program_, "tex"), texturenames[0]);
我没有得到正确的价值观。请注意glTexImage2D的第三个(内部格式)和第七个(格式)参数是GL_LUMINANCE。
void glTexImage2D(GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid * data);
如何在OpenGLES2中加载和访问大浮点数组?
答案 0 :(得分:0)
简短回答 - 你不能。 OpenGL ES 2.0不支持浮点纹理。
鉴于您只想要单个通道,您可以使用RGBA unorm纹理对其进行编码,并在着色器中以算法方式恢复该值,但在移动GPU上听起来非常昂贵。
OpenGL ES 3.0支持浮动纹理,因此可以提供更多运气。