मुझे एंड्रॉइड एमुलेटर पर बनावट भ्रष्टाचार के साथ समस्याएं आ रही हैं (यह अधिकांश एंड्रॉइड उपकरणों पर ठीक चलती है)।एंड्रॉइड ओपनग्ल बनावट भ्रष्टाचार
ऊपर चित्र एक संदर्भ प्रतिपादन एंड्रॉयड 4.1 Jelly Bean चल एमुलेटर द्वारा उत्पादित सब कुछ एकदम सही ढंग से दिखता है,।
दूसरा चित्र एमुलेटर में कब्जा Android 1.6 चल रहा है। नोट विकलांग टूलबार बटनों में से कुछ की भ्रष्टाचार
तीसरे चित्र एक ही एमुलेटर में कब्जा कर लिया है (वे रंग 1f, 1f, 1f, 0.5f साथ गाया जाता है)। अंतर यह है कि अब ऊपरी-दाएं कोने में स्कोर प्रदान किया जाता है। स्कोर एक बिटमैप फ़ॉन्ट है, यह बनावट अल्फा मुखौटा है। स्कोर के बाद प्रस्तुत की गई सबकुछ इसकी बनावट को खो देती है। ध्यान दें कि पिछले स्क्रीनशॉट में बिटमैप फ़ॉन्ट भी शामिल है (लेकिन विभिन्न बनावट का उपयोग करके)।
ऐसा ही एक समस्या सैमसंग उपकरणों (मैं मॉडल याद नहीं है) में से एक पर उपस्थित थे। जब फर्श बनावट प्रदान की जाती थी, तो उस खोए हुए बनावट के बाद सबकुछ प्रस्तुत किया जाता था। समस्या तब प्रकट नहीं हुई जब मैं या तो) बनावट को बांध नहीं पाया था बी) बनावट को बांध दिया था, लेकिन इसका उपयोग करके कोई त्रिकोण नहीं बनाया सी) पीएनजी परिसंपत्ति को खरोंच से फिर से बनाया।
ओपन सेटिंग्स:
gl.glDisable(GL10.GL_LIGHTING);
gl.glDisable(GL10.GL_CULL_FACE);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glDisable(GL10.GL_DITHER);
gl.glDepthMask(false);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glBlendFunc(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glShadeModel(GL10.GL_FLAT);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE);
कैसे बनावट लोड किए गए हैं:
public void doGLLoading(Engine renderer) {
GL10 gl=renderer.getGl();
int[] ids=new int[1];
gl.glGenTextures(1, ids,0);
id=ids[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
Log.d("SpriteDraw", String.format("Texture %s has format %s",getPath(),bitmap.getConfig().toString()));
buildMipmap(gl, bitmap);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER, minFilter);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER, magFilter);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S, textureWrapS);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T, textureWrapT);
}
private void buildMipmap(GL10 gl, Bitmap bitmap) {
int level = 0;
int height = bitmap.getHeight();
int width = bitmap.getWidth();
while (height >= 1 || width >= 1) {
// First of all, generate the texture from our bitmap and set it to
// the according level
//TextureUtils.texImage2D(gl, GL10.GL_TEXTURE_2D, level, -1, bitmap, -1, 0);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0);
if (height == 1 || width == 1) {
break;
}
// Increase the mipmap level
level++;
height /= 2;
width /= 2;
Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height,
true);
// Clean up
bitmap.recycle();
bitmap = bitmap2;
}
}
नोट्स: फ़ॉन्ट gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
और GL10.glDrawArrays
का उपयोग कर गाया है। भ्रष्टाचार न केवल 1.6 एमुलेटर को प्रभावित करता है, बल्कि एंड्रॉइड की 2.x श्रृंखला को भी प्रभावित करता है, यह सोचता है कि यह प्रमुख नहीं है (अल्फा मास्क अभी भी गलत तरीके से प्रस्तुत किए गए हैं)। सभी संपत्तियों को दो बिटमैप्स की शक्ति के रूप में सही ढंग से लोड किया जाता है।
बनावट बनाम दो शक्ति है? और क्या आप सुपरपिंग या पीएनजी का उपयोग करते हैं? सामान्य पीएनजी फाइल मास्क के रूप में अल्फा को सही तरीके से आरक्षित नहीं करती हैं। लेकिन superPng इसे आरक्षित कर सकते हैं। फ़ोटोशॉप के लिए एक प्लगइन superPng – Behnam
के रूप में निर्यात करने के लिए मौजूद है हां, वे सभी की शक्तियां हैं (पोस्ट के अंत में उल्लिखित)। बिटमैप्स को ग्रेस्केल बिटमैप्स के रूप में संग्रहीत किया जाता है, जिसे एंड्रॉइड द्वारा ARGB_8888 के रूप में लोड किया जाता है, और मेरे कोड द्वारा अल्फा मास्क में परिवर्तित किया जाता है। – rkapl