У меня есть простые живые обои на основе ((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
Живые обои с OpenGL ES. Область с черным экраном при повороте устройства ⇐ Android
Форум для тех, кто программирует под Android
1758268756
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();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79769264/live-wallpaper-with-opengl-es-area-with-black-screen-when-device-is-rotated[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия