Próbuję opracować animowaną tapetę na Androida za pomocą usługi tapet OpenGL, jestem w stanie stworzyć animowaną tapetę, tak jak w tym przykład autorstwa Marka F Guerra Ale chcę dodać trochę animacji sprite do mojej tapety.

Stworzyłem już animację duszka OpenGL ES w innym projekcie. Chcę tylko odtworzyć moją animację w projekcie tapety na żywo.

Ale w moim projekcie tapety na żywo nie mogę uzyskać Context i załadować moich obrazów z zasobów lub zasobów

Wszelkie sugestie, przykładowe kody lub linki dotyczące ładowania zasobów lub plików zasobów podczas korzystania z usługi glwallpaper będą bardzo pomocne.

Wszelkie sugestie i/lub przykładowe kody są mile widziane.

5
Renjith K N 19 październik 2012, 10:36

2 odpowiedzi

Najlepsza odpowiedź

Możemy użyć kontekstu, jak pokazano poniżej..

in wallpaper service class: 
------------------- 
renderer = new GlRenderer(this); 

in renderer class: 
---------------- 
private Context context; 

public GlRenderer(Context context) { 
this.context = context; 

Zamiast this możemy użyć getAssets() lub getResources() jako parametru do renderera.
Przy użyciu getAssets() możesz uzyskać pliki zapisane w folderze zasobów i używając getResources() możesz pobrać pliki umieszczone w folderze zasobów w swoim projekcie.

1
Lijo John 24 październik 2012, 11:53

Przekaż kontekst z silnika do renderera. Oto przykładowy kod do załadowania zasobu. tj. ResourceID to twoja bitmapa R.drawable.xxx. Mam to w klasie atlasu tekstur, którą stworzyłem, więc kilka rzeczy może nie być całkowicie zawartych w metodzie. Na przykład opcje, których mógłbym użyć do załadowania mapy bitowej, obejmowałyby inscaled = false, ale cokolwiek działa dla ciebie. Zmodyfikowałem to również, aby na przykład usunąć obsługę błędów.

/**
 * Load the resource and push it to the gpu memory, setup default values
 * @param gl
 * @param context
 * @param resourceID
 * @return glTextureID
 * 
 */
public int loadFromContext(GL10 gl, Context context, int resourceID) {
    mResourceID = resourceID;
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resourceID, sBitmapOptions);
    sourceWidth = bmp.getWidth();
    sourceHeight = bmp.getHeight();
    gl.glGenTextures(1, mGLTextures, 0);
    mGLTextureID = mGLTextures[0];

    // bind and set min and mag scaling to bilinear
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mGLTextureID);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    // repeat by default
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

    // upload bmp to video memory
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);

    // check error
    int error = gl.glGetError();
    if (error != GL10.GL_NO_ERROR) {
        // cleanup
        bmp.recycle();
        bmp = null;
        mLoaded = false;
            // error handling here
    } else {

        // unbind.
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        bmp.recycle();
        bmp = null;
        mLoaded = true;
        mDirty = true;

      } 
      return mGLTextureID;
}
1
ratana 24 październik 2012, 08:25