Служба обоев GLSL показывает черный экранAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Служба обоев GLSL показывает черный экран

Сообщение Anonymous »

Я работаю над проектом Android, в котором хочу установить шейдер GLSL в качестве обоев с помощью WallpaperService. Цель состоит в том, чтобы отобразить простой шейдер серого цвета, но я столкнулся с проблемой, из-за которой на обоях отображается просто черный экран.
примечание.
Мне известно о существует редактор шейдеров, но у меня есть несколько новых идей, которые могут значительно упростить процесс создания и настройки шейдеров.
Вы можете просмотреть это, чтобы увидеть самую базовую урезанную версию, подчеркивающую проблему.Вот настройка:
Код GLSL:

Код: Выделить всё

    void main() {// basic code for testing purpose
if(gl_FragCoord.y > 250.0){
gl_FragColor = vec4(0.25);
}
else{
gl_FragColor = vec4(0.75);
}
}
Реализация WallpaperService:

Код: Выделить всё

    import android.service.wallpaper.WallpaperService
import android.view.SurfaceHolder
import com.dhruv.hellohome.glsl.MyGLSurfaceView

class GLSLWallpaperService : WallpaperService() {
private var engine: GLWallpaperEngine? = null

fun isRunning(): Boolean {
return engine != null
}

override fun onCreateEngine(): Engine {
return GLWallpaperEngine()
}

inner class GLWallpaperEngine : Engine() {
private var glSurfaceView: MyGLSurfaceView? = null

override fun onCreate(surfaceHolder: SurfaceHolder) {
super.onCreate(surfaceHolder)
glSurfaceView = MyGLSurfaceView(this@GLSLWallpaperService)
}

override fun onSurfaceCreated(holder: SurfaceHolder) {
super.onSurfaceCreated(holder)
glSurfaceView?.surfaceCreated(holder)
}

override fun onVisibilityChanged(visible: Boolean) {
super.onVisibilityChanged(visible)
if (visible) {
glSurfaceView?.onResume()
} else {
glSurfaceView?.onPause()
}
}

override fun onDestroy() {
super.onDestroy()
glSurfaceView?.let {
it.onPause()
it.onDetachedFromWindow()
}
}

override fun onSurfaceDestroyed(holder: SurfaceHolder) {
super.onSurfaceDestroyed(holder)
glSurfaceView?.surfaceDestroyed(holder)
}
}
}
Реализация GLSurfaceView:

Код: Выделить всё

    import android.content.Context
import android.opengl.GLSurfaceView
import android.util.Log
import android.view.SurfaceHolder

class MyGLSurfaceView(context: Context) : GLSurfaceView(context) {
private val renderer: MyGLRenderer

init {
setEGLContextClientVersion(2)
renderer = MyGLRenderer(ShaderData())
setRenderer(renderer)
renderMode = RENDERMODE_CONTINUOUSLY
}

override fun surfaceCreated(holder: SurfaceHolder) {
super.surfaceCreated(holder)
Log.d("MyGLSurfaceView", "Surface created")
}

override fun surfaceDestroyed(holder: SurfaceHolder) {
super.surfaceDestroyed(holder)
Log.d("MyGLSurfaceView", "Surface destroyed")
}

public override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
}
в данном случае MyGLRenderer представляет собой реализацию GLSurfaceView.Renderer, которая работает нормально.
Минифест: и, наконец, реализация GLSLWallpaperService:

Код: Выделить всё

import android.service.wallpaper.WallpaperService
import android.view.SurfaceHolder
import com.dhruv.hellohome.glsl.MyGLSurfaceView

class GLSLWallpaperService : WallpaperService() {

private var engine: GLWallpaperEngine? = null
fun isRunning(): Boolean {
return engine != null
}

override fun onCreateEngine(): Engine {
return GLWallpaperEngine()
}

override fun onDestroy() {
super.onDestroy()
}

inner class GLWallpaperEngine : Engine() {
private var glSurfaceView: MyGLSurfaceView? = null
override fun onCreate(surfaceHolder: SurfaceHolder) {
super.onCreate(surfaceHolder)
glSurfaceView = MyGLSurfaceView(this@GLSLWallpaperService)
}

override fun onSurfaceCreated(holder: SurfaceHolder) {
super.onSurfaceCreated(holder)
glSurfaceView?.surfaceCreated(holder)
}

override fun onVisibilityChanged(visible: Boolean) {
super.onVisibilityChanged(visible)
if (visible) {
glSurfaceView?.onResume()
} else {
glSurfaceView?.onPause()
}
}

override fun onDestroy() {
super.onDestroy()
glSurfaceView?.let {
it.onPause()
it.onDetachedFromWindow()
}
}

override fun onSurfaceDestroyed(holder: SurfaceHolder) {
super.onSurfaceDestroyed(holder)
glSurfaceView?.surfaceDestroyed(holder)
}
}
}
Я застрял около 2 недель и просто не могу понять, что не так.
Если кто-нибудь может мне помочь, это будет огромной помощью.
Я застрял около 2 недель и просто не могу понять, что не так.
Я застрял около 2 недель и просто не могу понять, что не так.
Если кто-нибудь может мне помочь, это будет огромной помощью.
п>

Подробнее здесь: https://stackoverflow.com/questions/787 ... ack-screen
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Служба обоев GLSL показывает черный экран
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как добавить экран, когда экран выключен, как экран будильника по умолчанию, когда будильник трепещет, экран будильника
    Anonymous » » в форуме Android
    0 Ответы
    317 Просмотры
    Последнее сообщение Anonymous
  • Черный экран смерти (по умолчанию Экспо «Добро пожаловать») экран)
    Anonymous » » в форуме IOS
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Черный экран смерти (по умолчанию Экспо «Добро пожаловать») экран)
    Anonymous » » в форуме IOS
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Эмулятор Android показывает только черный экран, ТОЛЬКО для API 34
    Гость » » в форуме Android
    0 Ответы
    51 Просмотры
    Последнее сообщение Гость

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