0
我已經搜索了很多,所有類似的問題和解決方案還沒有爲我工作。所以我希望有人會認識到我的問題Android的OpenGL ES 2.0交換紋理失敗
問題描述:
我想要做的是與我正在渲染的紋理交換。 當應用程序啓動時,我加載一個紋理,並呈現罰款。 後來我想替換它並再次調用相同的加載函數,從而生成新的紋理ID。當我使用新的紋理ID進行渲染時,我遇到了模型變成完全黑色的問題。
所以,如果我運行下面的上面的代碼發生了:
Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),
R.drawable.sphere_map1);
currentTexture = TextureHelper.loadTextureToOGL(bmp);
我得到的問題,完全黑色的紋理。
這裏遵循一些我用來加載紋理和繪製我的模型的重要功能 如果有人需要額外的代碼,請告訴我。因爲這是我的第一篇文章,所以請隨時就帖子的結構提出建議。
預先感謝!
public static int loadTextureToOGL(Bitmap bitmap) {
int texId[] = { -1 };
GLES20.glGenTextures(1, texId, 0);
int textureId = texId[0];
glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, mMinFilter);
glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, mMaxFilter);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0, GL_RGBA, bitmap, 0);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
GeneralUtil.printGLErrorInHex();
bitmap.recycle();
return textureId;
}
public void draw(float[] mvp) {
glUseProgram(mProgram);
glEnableVertexAttribArray(mPositionHandle);
glEnableVertexAttribArray(mNormalHandle);
glEnableVertexAttribArray(mTexCoordHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, currentTexture);
glUniform1i(mEnvTex0Handle, 0);
glUniformMatrix4fv(mMVPHandle, 1, false, mvp, 0);
glUniform3f(mColorHandle, red, green, blue);
glUniform1f(mAttSpecularHandle, attSpecular);
glUniform1f(mAttDiffuseHandle, attDiffuse);
glUniform1f(mAttAmbientHandle, attAmbient);
GeneralUtil.printGLErrorInHex();
if (model != null) {
glDrawArrays(GL_TRIANGLES, 0, model.getmNFaces() * 3);
}
}
如果您從GLUtils.texImage2D(...)中刪除內部格式,並讓GLUtils自動判斷它是否有任何機會? – harism
其實這就是我第一次這樣做,所以沒有區別:( –
你的問題不是很清楚,起初你說*如果我**重新**加載紋理,它失敗*,然後你說*如果我運行它,它會失敗*,一個片段根本不顯示任何重新加載,如果它真的只是第二次失敗,您能顯示整個上下文,顯示第一個加載和第二個加載失敗,你怎麼畫的? – Tim