Живые обои с OpenGL ES. Область с черным экраном при повороте устройстваAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Живые обои с OpenGL ES. Область с черным экраном при повороте устройства

Сообщение Anonymous »

У меня есть простые живые обои на основе ((Gl11ext) Gl) .gldrawtexioes для рисования растрового изображения для тестирования. Это работает нормально. Но затем устройство вращается, я вижу обрезанную область как черный прямоугольник.
Любые идеи, как ее исправить? src = "https://i.sstatic.net/h3ivzano.png"/>
public class WallpaperServiceTest extends WallpaperService{
@Override
public Engine onCreateEngine(){
return new EngineGl();
}

public class EngineGl extends Engine{
private GLSurfaceViewMy surface;
private RendererMy renderer;

class GLSurfaceViewMy extends GLSurfaceView{
public GLSurfaceViewMy(Context context){
super(context);
}
@Override
public SurfaceHolder getHolder(){
return getSurfaceHolder();
}

public void onDestroy() {
super.onDetachedFromWindow();
}
}

class RendererMy implements GLSurfaceView.Renderer{
private ByteBuffer pixelBuffer;
private Bitmap bm_buf;
private GL10 gl;

@Override
synchronized public void onSurfaceCreated( GL10 gl_, EGLConfig config){
gl = gl_;
gl.glEnable(GL11.GL_TEXTURE_2D);

int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);

gl.glBindTexture( GL11.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
}

@Override
synchronized public void onSurfaceChanged(GL10 gl_, int width, int height){
bm_buf = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bm_buf.eraseColor(0xfff00000); //just for test
pixelBuffer = ByteBuffer.allocate(width * height * 4);

gl.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, bm_buf.getWidth(), bm_buf.getHeight(),
0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, null);
((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, new int[]{0, 0, bm_buf.getWidth(), bm_buf.getHeight()}, 0);
}

@Override
synchronized public void onDrawFrame(GL10 gl_){
pixelBuffer.rewind();
bm_buf.copyPixelsToBuffer(pixelBuffer);

pixelBuffer.rewind();
gl.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, bm_buf.getWidth(), bm_buf.getHeight(), GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixelBuffer);
((GL11Ext) gl).glDrawTexiOES(0, 0, 0, bm_buf.getWidth(), bm_buf.getHeight());
}
}

@Override
public void onCreate( SurfaceHolder surfaceHolder ){
super.onCreate(surfaceHolder);
surface = new GLSurfaceViewMy( getApplicationContext() );
surface.setPreserveEGLContextOnPause( true ); //TEST!!!
renderer = new RendererMy();
surface.setRenderer( renderer );
surface.setRenderMode( GLSurfaceView.RENDERMODE_WHEN_DIRTY );
}

@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
surface.onResume();
} else {
surface.onPause();
}
}

@Override
public void onSurfaceRedrawNeeded(SurfaceHolder holder){
super.onSurfaceRedrawNeeded(holder);
surface.requestRender();
}

@Override
public void onDestroy(){
surface.onDestroy();
super.onDestroy();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... is-rotated
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»