примечание.
Мне известно о существует редактор шейдеров, но у меня есть несколько новых идей, которые могут значительно упростить процесс создания и настройки шейдеров.
Вы можете просмотреть это, чтобы увидеть самую базовую урезанную версию, подчеркивающую проблему.Вот настройка:
Код 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);
}
}
Код: Выделить всё
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)
}
}
}
Код: Выделить всё
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()
}
}
Минифест:
Код: Выделить всё
Код: Выделить всё
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 недель и просто не могу понять, что не так.
Если кто-нибудь может мне помочь, это будет огромной помощью.
п>
Подробнее здесь: https://stackoverflow.com/questions/787 ... ack-screen