0
我已经创建了一个纹理,并使用Android上的OpenGL ES 3.1(使用NDK)填充紫色。 问题是,着色器中的纹理查找无法按预期工作。GLSL纹理只适用于(0,0)
创建纹理就像这样:
glGenTextures(1, &mGLTexture);
glBindTexture(GL_TEXTURE_2D, mGLTexture);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, textureSize.x, textureSize.y);
vector<GLubyte> img; int i = 0;
img.resize(4 * textureSize.x * textureSize.y);
for (unsigned x = 0; x < 64; ++x) {
for (unsigned y = 0; y < 64; ++y) {
img[i * 4 + 0] = 255;
img[i * 4 + 1] = 0;
img[i * 4 + 2] = 255;
img[i * 4 + 3] = 255;
// purple with full alpha
}
}
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,
64, 64,
GL_RGBA, GL_UNSIGNED_BYTE, img.data());
没有OpenGL的错误在此过程中抛出。
我然后绑定纹理:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mGLTexture);
glUniform1i(texLocation, 0); // got texLocation using glGetUniformLocation
现在,出现问题:在我的着色器,当我抬头只在(0,0)纹理,使用FragColor = texture(tex, vec2(0,0));
它按预期工作,即事被涂成紫色。
对于所有其他纹理坐标(例如vec2(0.5f,0.5f)
),我只是到处都是黑色。
您是否尝试将'GL_MIN_FILTER'设置为'GL_LINEAR'或'GL_NEAREST'?当没有生成mipmap时,需要mipmap的插值模式将失败。 – BDL
不幸的是,GL_NEAREST和GL_LINEAR都不能解决问题。 – mrueg
您只设置img的前四个值,因为在每次迭代中i = 0。 – BDL