From 8402b5c407f6815af65c944be4b7f457e8a7b0a1 Mon Sep 17 00:00:00 2001 From: eita Date: Tue, 19 May 2020 17:12:32 +0700 Subject: [PATCH] Optimize code and clean code --- build.gradle | 2 +- .../main/java/jp/eita/canvasgl/CanvasGL.kt | 24 +++---- .../main/java/jp/eita/canvasgl/ICanvasGL.kt | 1 + .../jp/eita/canvasgl/glcanvas/BasicTexture.kt | 31 +++----- .../eita/canvasgl/glcanvas/BitmapTexture.kt | 1 - .../jp/eita/canvasgl/glcanvas/GLCanvas.kt | 5 +- .../eita/canvasgl/glcanvas/GLCanvasUtils.kt | 27 ++++--- .../jp/eita/canvasgl/glcanvas/GLES20Canvas.kt | 72 +++++++++---------- .../jp/eita/canvasgl/glcanvas/GLES20IdImpl.kt | 6 +- .../jp/eita/canvasgl/glcanvas/RawTexture.kt | 4 +- .../glcanvas/TextureMatrixTransformer.kt | 1 + .../eita/canvasgl/glcanvas/UploadedTexture.kt | 4 +- .../eita/canvasgl/glview/GLContinuousView.kt | 8 +-- .../java/jp/eita/canvasgl/glview/GLView.kt | 64 ++++++++++------- .../glview/texture/gles/EGLLogWrapper.kt | 23 ++---- .../glview/texture/gles/EglContextWrapper.kt | 9 +-- .../canvasgl/glview/texture/gles/EglHelper.kt | 16 ++--- .../canvasgl/glview/texture/gles/GLThread.kt | 42 +++-------- .../eita/canvasgl/pathManager/PathManager.kt | 2 +- .../canvasgl/pathManager/PathManagerConfig.kt | 10 +-- .../pathManager/bezier/BezierPathManager.kt | 4 +- .../canvasgl/textureFilter/ContrastFilter.kt | 4 +- .../textureFilter/DarkenBlendFilter.kt | 1 + .../eita/canvasgl/textureFilter/HueFilter.kt | 10 +-- .../java/jp/eita/canvasgl/util/FileLogger.kt | 1 + .../java/jp/eita/canvasgl/util/Loggers.kt | 1 + .../java/jp/eita/canvasgl/util/MathUtils.kt | 2 - .../java/jp/eita/example/AnimatorUtils.kt | 63 ---------------- .../example/main/bubble/BubbleActivity.kt | 70 +----------------- .../example/main/reaction/ReactionActivity.kt | 37 +++++----- .../jp/eita/example/model/MovableObject.kt | 5 +- .../java/jp/eita/example/model/Reaction.kt | 6 +- .../eita/example/structure/AlphaGenerator.kt | 48 ------------- .../jp/eita/example/structure/AlphaList.kt | 58 --------------- .../eita/example/structure/ScaleRatioList.kt | 62 ---------------- .../structure/ScaleSizeRatioGenerator.kt | 50 ------------- 36 files changed, 183 insertions(+), 591 deletions(-) delete mode 100644 openglsample/src/main/java/jp/eita/example/AnimatorUtils.kt delete mode 100644 openglsample/src/main/java/jp/eita/example/structure/AlphaGenerator.kt delete mode 100644 openglsample/src/main/java/jp/eita/example/structure/AlphaList.kt delete mode 100644 openglsample/src/main/java/jp/eita/example/structure/ScaleRatioList.kt delete mode 100644 openglsample/src/main/java/jp/eita/example/structure/ScaleSizeRatioGenerator.kt diff --git a/build.gradle b/build.gradle index 240a1ca..314a655 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.6.3' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/opengl/src/main/java/jp/eita/canvasgl/CanvasGL.kt b/opengl/src/main/java/jp/eita/canvasgl/CanvasGL.kt index 2774463..7e10be5 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/CanvasGL.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/CanvasGL.kt @@ -34,13 +34,13 @@ import kotlin.math.roundToInt /** * All the depth of textures are the same. So the texture drawn after will cover the texture drawn before. */ -class CanvasGL constructor(override val glCanvas: GLCanvas = GLES20Canvas()) : ICanvasGL { +class CanvasGL : ICanvasGL { private val bitmapTextureMap: MutableMap = WeakHashMap() - private val defaultTextureFilter: BasicTextureFilter + private val defaultTextureFilter: BasicTextureFilter = BasicTextureFilter() - private val canvasBackgroundColor: FloatArray + private val canvasBackgroundColor = FloatArray(4) private val surfaceTextureMatrix = FloatArray(16) @@ -50,28 +50,24 @@ class CanvasGL constructor(override val glCanvas: GLCanvas = GLES20Canvas()) : I override var height = 0 private set - private val defaultDrawShapeFilter: BasicDrawShapeFilter + private val defaultDrawShapeFilter: BasicDrawShapeFilter = BasicDrawShapeFilter() private val drawCircleFilter = DrawCircleFilter() private var currentTextureFilter: TextureFilter? = null - init { - glCanvas.setOnPreDrawShapeListener(object : GLCanvas.OnPreDrawShapeListener { + override val glCanvas: GLCanvas = GLES20Canvas().apply { + onPreDrawShapeListener = object : GLCanvas.OnPreDrawShapeListener { override fun onPreDraw(program: Int, drawShapeFilter: DrawShapeFilter?) { drawShapeFilter?.onPreDraw(program, this@CanvasGL) } + } - }) - glCanvas.setOnPreDrawTextureListener(object : GLCanvas.OnPreDrawTextureListener { + onPreDrawTextureListener = object : GLCanvas.OnPreDrawTextureListener { override fun onPreDraw(textureProgram: Int, texture: BasicTexture?, textureFilter: TextureFilter?) { textureFilter!!.onPreDraw(textureProgram, texture!!, this@CanvasGL) } - - }) - defaultTextureFilter = BasicTextureFilter() - defaultDrawShapeFilter = BasicDrawShapeFilter() - canvasBackgroundColor = FloatArray(4) + } } override fun bindBitmapToTexture(whichTexture: Int, bitmap: Bitmap): BitmapTexture? { @@ -332,7 +328,7 @@ class CanvasGL constructor(override val glCanvas: GLCanvas = GLES20Canvas()) : I glCanvas.setSize(width, height) } - override fun resume() { } + override fun resume() {} override fun pause() { currentTextureFilter?.destroy() diff --git a/opengl/src/main/java/jp/eita/canvasgl/ICanvasGL.kt b/opengl/src/main/java/jp/eita/canvasgl/ICanvasGL.kt index f1a6187..910c726 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/ICanvasGL.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/ICanvasGL.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl import android.graphics.Bitmap diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BasicTexture.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BasicTexture.kt index 63e58e5..c140453 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BasicTexture.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BasicTexture.kt @@ -22,13 +22,11 @@ import java.util.* // BasicTexture is a Texture corresponds to a real GL secondBitmap. // The state of a BasicTexture indicates whether its data is loaded to GL memory. // If a BasicTexture is loaded into GL memory, it has a GL secondBitmap id. -abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: Int = 0, state: Int = STATE_UNLOADED) : Texture { +abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: Int = -1, protected var state: Int = STATE_UNLOADED) : Texture { - var id = -1 + var id = id protected set - protected var state: Int - override var width = UNSPECIFIED protected set @@ -43,24 +41,17 @@ abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: var textureHeight = 0 protected set - protected var canvasRef: GLCanvas? = null + protected var canvasRef: GLCanvas? = canvas - private var hasBorder1 = false + var hasBorder = false var isRecycled = false protected set init { - setAssociatedCanvas(canvas) - this.id = id - this.state = state synchronized(ALL_TEXTURES) { ALL_TEXTURES.put(this, null) } } - protected fun setAssociatedCanvas(canvas: GLCanvas?) { - canvasRef = canvas - } - /** * Sets the content size of this secondBitmap. In OpenGL, the actual secondBitmap * size must be of power of 2, the size of the content may be smaller. @@ -91,11 +82,7 @@ abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: // Currently our background is black, so we can draw the thumbnails without // enabling blending. fun hasBorder(): Boolean { - return hasBorder1 - } - - protected fun setBorder(hasBorder: Boolean) { - hasBorder1 = hasBorder + return hasBorder } override fun draw(canvas: GLCanvas?, x: Int, y: Int) { @@ -139,7 +126,7 @@ abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: id = -1 // Don't free it again. } state = STATE_UNLOADED - setAssociatedCanvas(null) + canvasRef = null } protected fun finalize() { @@ -184,9 +171,9 @@ abstract class BasicTexture protected constructor(canvas: GLCanvas? = null, id: fun invalidateAllTextures() { synchronized(ALL_TEXTURES) { - for (t in ALL_TEXTURES.keys) { - t.state = STATE_UNLOADED - t.setAssociatedCanvas(null) + for (basicTexture in ALL_TEXTURES.keys) { + basicTexture.state = STATE_UNLOADED + basicTexture.canvasRef = null } } } diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BitmapTexture.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BitmapTexture.kt index 16c7df3..47657f5 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BitmapTexture.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/BitmapTexture.kt @@ -34,5 +34,4 @@ class BitmapTexture constructor(var bitmap: Bitmap, hasBorder: Boolean = false) override val isOpaque: Boolean get() = false - } \ No newline at end of file diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvas.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvas.kt index e9601fc..4317796 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvas.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvas.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.glcanvas import android.graphics.Bitmap @@ -211,10 +212,6 @@ interface GLCanvas { */ fun getBounds(bounds: Rect?, x: Int, y: Int, width: Int, height: Int) - fun setOnPreDrawTextureListener(l: OnPreDrawTextureListener?) - - fun setOnPreDrawShapeListener(l: OnPreDrawShapeListener?) - interface OnPreDrawTextureListener { fun onPreDraw(textureProgram: Int, texture: BasicTexture?, textureFilter: TextureFilter?) diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvasUtils.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvasUtils.kt index 8974ac1..adee80c 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvasUtils.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLCanvasUtils.kt @@ -42,7 +42,18 @@ object GLCanvasUtils { private const val MASK_STRING = "********************************" - private val CRC_TABLE = LongArray(256) + private val CRC_TABLE = LongArray(256).apply { + var part: Long + + for (i in 0..255) { + part = i.toLong() + for (j in 0..7) { + val x = if (part.toInt() and 1 != 0) POLY64REV else 0 + part = part.shr(1) xor x + } + this[i] = part + } + } // Throws AssertionError if the input is false. fun assertTrue(cond: Boolean) { @@ -326,18 +337,4 @@ object GLCanvasUtils { fun debug(message: String?, vararg args: Any?) { Log.v(DEBUG_TAG, String.format(message!!, *args)) } - - init { - // http://bioinf.cs.ucl.ac.uk/downloads/crc64/crc64.c - var part: Long - - for (i in 0..255) { - part = i.toLong() - for (j in 0..7) { - val x = if (part.toInt() and 1 != 0) POLY64REV else 0 - part = part.shr(1) xor x - } - CRC_TABLE[i] = part - } - } } \ No newline at end of file diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20Canvas.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20Canvas.kt index 9ff333d..4e4f2f1 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20Canvas.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20Canvas.kt @@ -100,7 +100,9 @@ class GLES20Canvas : GLCanvas { // Keep track of restore state private var mMatrices = FloatArray(INITIAL_RESTORE_STATE_SIZE * MATRIX_SIZE) - private var mAlphas = FloatArray(INITIAL_RESTORE_STATE_SIZE) + private var mAlphas = FloatArray(INITIAL_RESTORE_STATE_SIZE).apply { + this[mCurrentAlphaIndex] = 1f + } private val mSaveFlags = IntArrayCustom() @@ -122,13 +124,22 @@ class GLES20Canvas : GLCanvas { private var mScreenHeight = 0 // GL programs - private var mDrawProgram: Int + private var mDrawProgram: Int = assembleProgram( + loadShader(GLES20.GL_VERTEX_SHADER, BasicDrawShapeFilter.DRAW_VERTEX_SHADER), + loadShader(GLES20.GL_FRAGMENT_SHADER, BasicDrawShapeFilter.DRAW_FRAGMENT_SHADER), + mDrawParameters, + mTempIntArray + ) private var mTextureProgram = 0 private var mOesTextureProgram = 0 - private var mMeshProgram = 0 + private var mMeshProgram: Int = 0.apply{ + val textureFragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, BasicTextureFilter.TEXTURE_FRAGMENT_SHADER) + val meshVertexShader = loadShader(GLES20.GL_VERTEX_SHADER, MESH_VERTEX_SHADER) + assembleProgram(meshVertexShader, textureFragmentShader, mMeshParameters, mTempIntArray) + } // GL buffer containing BOX_COORDINATES private val mBoxCoordinates: Int @@ -137,9 +148,9 @@ class GLES20Canvas : GLCanvas { private var mDrawShapeFilter: DrawShapeFilter? = null - private var onPreDrawTextureListener: OnPreDrawTextureListener? = null + var onPreDrawTextureListener: OnPreDrawTextureListener? = null - private var onPreDrawShapeListener: OnPreDrawShapeListener? = null + var onPreDrawShapeListener: OnPreDrawShapeListener? = null // Keep track of statistics for debugging private var mCountDrawMesh = 0 @@ -155,27 +166,19 @@ class GLES20Canvas : GLCanvas { private val mFrameBuffer = IntArray(1) // Bound textures. - private val mTargetTextures = ArrayList() + private val mTargetTextures = ArrayList().apply { + add(null) + } - override val gLId: GLId? = GLES20IdImpl() + override val gLId: GLId = GLES20IdImpl() init { Matrix.setIdentityM(mTempTextureMatrix, 0) Matrix.setIdentityM(mMatrices, mCurrentMatrixIndex) - mAlphas[mCurrentAlphaIndex] = 1f - mTargetTextures.add(null) - val boxBuffer = createBuffer(BOX_COORDINATES) - mBoxCoordinates = uploadBuffer(boxBuffer) - mDrawProgram = assembleProgram(loadShader(GLES20.GL_VERTEX_SHADER, BasicDrawShapeFilter.DRAW_VERTEX_SHADER), loadShader(GLES20.GL_FRAGMENT_SHADER, BasicDrawShapeFilter.DRAW_FRAGMENT_SHADER), mDrawParameters, mTempIntArray) - val textureFragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, BasicTextureFilter.TEXTURE_FRAGMENT_SHADER) - val meshVertexShader = loadShader(GLES20.GL_VERTEX_SHADER, MESH_VERTEX_SHADER) - setupMeshProgram(meshVertexShader, textureFragmentShader) GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA) checkError() - } - - private fun setupMeshProgram(meshVertexShader: Int, textureFragmentShader: Int) { - mMeshProgram = assembleProgram(meshVertexShader, textureFragmentShader, mMeshParameters, mTempIntArray) + val boxBuffer = createBuffer(BOX_COORDINATES) + mBoxCoordinates = uploadBuffer(boxBuffer) } override fun setSize(width: Int, height: Int) { @@ -321,9 +324,7 @@ class GLES20Canvas : GLCanvas { private fun draw(type: Int, offset: Int, count: Int, x: Float, y: Float, width: Float, height: Float, color: Int, lineWidth: Float) { prepareDraw(offset, color, lineWidth) - if (onPreDrawShapeListener != null) { - onPreDrawShapeListener!!.onPreDraw(mDrawProgram, mDrawShapeFilter) - } + onPreDrawShapeListener?.onPreDraw(mDrawProgram, mDrawShapeFilter) draw(mDrawParameters, type, count, x, y, width, height, null) } @@ -441,11 +442,8 @@ class GLES20Canvas : GLCanvas { private fun drawTextureRect(texture: BasicTexture?, textureMatrix: FloatArray?, target: RectF, customMVPMatrix: ICustomMVPMatrix?) { val params = prepareTexture(texture) setPosition(params, OFFSET_FILL_RECT) - // printMatrix("texture matrix", textureMatrix, 0); GLES20.glUniformMatrix4fv(params[INDEX_TEXTURE_MATRIX].handle, 1, false, textureMatrix, 0) - if (onPreDrawTextureListener != null) { - onPreDrawTextureListener!!.onPreDraw(if (texture!!.target == GLES20.GL_TEXTURE_2D) mTextureProgram else mOesTextureProgram, texture, mTextureFilter) - } + onPreDrawTextureListener?.onPreDraw(if (texture!!.target == GLES20.GL_TEXTURE_2D) mTextureProgram else mOesTextureProgram, texture, mTextureFilter) checkError() if (texture!!.isFlippedVertically) { save(GLCanvas.SAVE_FLAG_MATRIX) @@ -563,12 +561,12 @@ class GLES20Canvas : GLCanvas { synchronized(mUnboundTextures) { var ids = mUnboundTextures if (mUnboundTextures.size() > 0) { - gLId!!.glDeleteTextures(ids.size(), ids.internalArray, 0) + gLId.glDeleteTextures(ids.size(), ids.internalArray, 0) ids.clear() } ids = mDeleteBuffers if (ids.size() > 0) { - gLId!!.glDeleteBuffers(ids.size(), ids.internalArray, 0) + gLId.glDeleteBuffers(ids.size(), ids.internalArray, 0) ids.clear() } } @@ -691,7 +689,7 @@ class GLES20Canvas : GLCanvas { } private fun uploadBuffer(buffer: Buffer?, elementSize: Int): Int { - gLId!!.glGenBuffers(1, mTempIntArray, 0) + gLId.glGenBuffers(1, mTempIntArray, 0) checkError() val bufferId = mTempIntArray[0] GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufferId) @@ -766,14 +764,6 @@ class GLES20Canvas : GLCanvas { return assembleProgram(vertexShaderHandle, fragmentShaderHandle, shaderParameters, mTempIntArray) } - override fun setOnPreDrawTextureListener(l: OnPreDrawTextureListener?) { - onPreDrawTextureListener = l - } - - override fun setOnPreDrawShapeListener(l: OnPreDrawShapeListener?) { - onPreDrawShapeListener = l - } - abstract class ShaderParameter(protected val mName: String) { var handle = 0 @@ -796,13 +786,21 @@ class GLES20Canvas : GLCanvas { } companion object { + const val POSITION_ATTRIBUTE = "aPosition" + const val COLOR_UNIFORM = "uColor" + const val MATRIX_UNIFORM = "uMatrix" + const val TEXTURE_MATRIX_UNIFORM = "uTextureMatrix" + const val TEXTURE_SAMPLER_UNIFORM = "uTextureSampler" + const val ALPHA_UNIFORM = "uAlpha" + const val TEXTURE_COORD_ATTRIBUTE = "aTextureCoordinate" + const val MESH_VERTEX_SHADER = ("" + "uniform mat4 " + MATRIX_UNIFORM + ";\n" + "attribute vec2 " + POSITION_ATTRIBUTE + ";\n" diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20IdImpl.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20IdImpl.kt index 5b6e17b..9cdad19 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20IdImpl.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/GLES20IdImpl.kt @@ -19,12 +19,12 @@ import android.opengl.GLES20 class GLES20IdImpl : GLId { - private val mTempIntArray: IntArray = IntArray(1) + private val tempIntArray: IntArray = IntArray(1) override fun generateTexture(): Int { - GLES20.glGenTextures(1, mTempIntArray, 0) + GLES20.glGenTextures(1, tempIntArray, 0) GLES20Canvas.checkError() - return mTempIntArray[0] + return tempIntArray[0] } override fun glGenBuffers(n: Int, buffers: IntArray, offset: Int) { diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/RawTexture.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/RawTexture.kt index 633e23c..53a5a00 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/RawTexture.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/RawTexture.kt @@ -27,7 +27,7 @@ class RawTexture constructor(width: Int, height: Int, override val isOpaque: Boo var isNeedInvalidate = false /** - * @param isFlipped whether vertically flip this texture + * [isFlippedVertically] whether vertically flip this texture */ override var isFlippedVertically = false @@ -45,7 +45,7 @@ class RawTexture constructor(width: Int, height: Int, override val isOpaque: Boo } canvas.setTextureParameters(this) state = STATE_LOADED - setAssociatedCanvas(canvas) + canvasRef = canvas } override fun onBind(canvas: GLCanvas): Boolean { diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/TextureMatrixTransformer.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/TextureMatrixTransformer.kt index 2ff3eff..6926946 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/TextureMatrixTransformer.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/TextureMatrixTransformer.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.glcanvas import android.graphics.RectF diff --git a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/UploadedTexture.kt b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/UploadedTexture.kt index b6014be..de1a45d 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glcanvas/UploadedTexture.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glcanvas/UploadedTexture.kt @@ -58,8 +58,8 @@ abstract class UploadedTexture protected constructor(hasBorder: Boolean = false) get() = GL11.GL_TEXTURE_2D init { + super.hasBorder = hasBorder if (hasBorder) { - setBorder(true) border = 1 } } @@ -194,7 +194,7 @@ abstract class UploadedTexture protected constructor(hasBorder: Boolean = false) freeBitmap() } // Update secondBitmap state. - setAssociatedCanvas(canvas) + canvasRef = canvas state = STATE_LOADED mContentValid = true } else { diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/GLContinuousView.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/GLContinuousView.kt index 98db264..791dd31 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/GLContinuousView.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/GLContinuousView.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.glview import android.content.Context @@ -25,12 +26,9 @@ abstract class GLContinuousView : GLView { constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) - override fun init() { - super.init() + init { renderMode = RENDERMODE_CONTINUOUSLY } - override fun onGLDraw(canvas: ICanvasGL) { - - } + override fun onGLDraw(canvas: ICanvasGL) = Unit } \ No newline at end of file diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/GLView.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/GLView.kt index 8bd2e11..5190141 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/GLView.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/GLView.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.glview import android.content.Context @@ -40,17 +41,19 @@ abstract class GLView : GLSurfaceView, GLSurfaceView.Renderer { constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) init { - init() + initGLView() } - protected open fun init() { - setZOrderOnTop(true) - setEGLContextClientVersion(2) - setEGLConfigChooser(8, 8, 8, 8, 16, 0) - preserveEGLContextOnPause = true - holder.setFormat(PixelFormat.TRANSLUCENT) - setRenderer(this) - renderMode = RENDERMODE_WHEN_DIRTY + private fun initGLView() { + apply { + setZOrderOnTop(true) + setEGLContextClientVersion(2) + setEGLConfigChooser(8, 8, 8, 8, 16, 0) + preserveEGLContextOnPause = true + holder.setFormat(PixelFormat.TRANSLUCENT) + setRenderer(this) + renderMode = RENDERMODE_WHEN_DIRTY + } } override fun onSurfaceCreated(gl: GL10, config: EGLConfig) { @@ -58,30 +61,33 @@ abstract class GLView : GLSurfaceView, GLSurfaceView.Renderer { } override fun onSurfaceChanged(gl: GL10, width: Int, height: Int) { - canvas!!.setSize(width, height) + canvas?.let { + it.setSize(width, height) + it + } } override fun onDrawFrame(gl: GL10) { this.gl = gl - canvas!!.clearBuffer() - onGLDraw(canvas!!) + canvas?.let { + it.clearBuffer() + onGLDraw(it) + } } - /** - * May call twice at first. - */ - protected abstract fun onGLDraw(canvas: ICanvasGL) - fun restart() { onResume() } fun stop() { onPause() - canvas?.pause() + canvas?.let { + it.pause() + it + } } - fun destroy() {} + open fun destroy() { } override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { super.onSizeChanged(w, h, oldw, oldh) @@ -89,18 +95,22 @@ abstract class GLView : GLSurfaceView, GLSurfaceView.Renderer { } fun getDrawingBitmap(rect: Rect, getDrawingCacheCallback: GetDrawingCacheCallback) { - queueEvent(Runnable { - if (gl == null) { - return@Runnable + queueEvent { + gl?.let { + onDrawFrame(it) + onDrawFrame(it) + val bitmapFromGLSurface = createBitmapFromGLSurface(rect.left, rect.top, rect.right, rect.bottom, height) + post { getDrawingCacheCallback.onFetch(bitmapFromGLSurface) } } - onDrawFrame(gl!!) - onDrawFrame(gl!!) - val bitmapFromGLSurface = createBitmapFromGLSurface(rect.left, rect.top, rect.right, rect.bottom, height) - post { getDrawingCacheCallback.onFetch(bitmapFromGLSurface) } - }) + } requestRender() } + /** + * May call twice at first. + */ + protected abstract fun onGLDraw(canvas: ICanvasGL) + interface OnSizeChangeCallback { fun onSizeChange(w: Int, h: Int, oldw: Int, oldh: Int) diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EGLLogWrapper.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EGLLogWrapper.kt index b525ecc..6761354 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EGLLogWrapper.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EGLLogWrapper.kt @@ -24,15 +24,13 @@ import javax.microedition.khronos.egl.* /** * For Test */ -class EGLLogWrapper(egl: EGL, configFlags: Int, log: Writer?) : EGL11 { +class EGLLogWrapper(egl: EGL, configFlags: Int, var log: Writer?) : EGL11 { - var mLog: Writer? + var logArgumentNames: Boolean = GLDebugHelper.CONFIG_LOG_ARGUMENT_NAMES and configFlags != 0 - var logArgumentNames: Boolean + var checkError: Boolean = GLDebugHelper.CONFIG_CHECK_GL_ERROR and configFlags != 0 - var checkError: Boolean - - private val egl10: EGL10 + private val egl10: EGL10 = egl as EGL10 private var argCount = 0 @@ -349,7 +347,7 @@ class EGLLogWrapper(egl: EGL, configFlags: Int, log: Writer?) : EGL11 { private fun log(message: String) { try { - mLog!!.write(message) + log!!.write(message) } catch (e: IOException) { // Ignore exception, keep on trying } @@ -377,9 +375,9 @@ class EGLLogWrapper(egl: EGL, configFlags: Int, log: Writer?) : EGL11 { private fun flush() { try { - mLog!!.flush() + log!!.flush() } catch (e: IOException) { - mLog = null + log = null } } @@ -516,11 +514,4 @@ class EGLLogWrapper(egl: EGL, configFlags: Int, log: Writer?) : EGL11 { } } } - - init { - egl10 = egl as EGL10 - mLog = log - logArgumentNames = GLDebugHelper.CONFIG_LOG_ARGUMENT_NAMES and configFlags != 0 - checkError = GLDebugHelper.CONFIG_CHECK_GL_ERROR and configFlags != 0 - } } \ No newline at end of file diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglContextWrapper.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglContextWrapper.kt index 828d4e7..cff0c74 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglContextWrapper.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglContextWrapper.kt @@ -21,9 +21,9 @@ import javax.microedition.khronos.egl.EGLContext open class EglContextWrapper { - open lateinit var eglContextOld: EGLContext + open var eglContextOld: EGLContext = EGL10.EGL_NO_CONTEXT - open var eglContext: android.opengl.EGLContext? = null + open var eglContext: android.opengl.EGLContext = EGL14.EGL_NO_CONTEXT class EGLNoContextWrapper : EglContextWrapper() { @@ -34,11 +34,6 @@ open class EglContextWrapper { internal fun setEglContextOld(eglContextOld: EGLContext) { } - - init { - eglContextOld = EGL10.EGL_NO_CONTEXT - eglContext = EGL14.EGL_NO_CONTEXT - } } companion object { diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglHelper.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglHelper.kt index 6b9fc93..82cd854 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglHelper.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/EglHelper.kt @@ -20,13 +20,13 @@ import jp.eita.canvasgl.util.FileLogger import jp.eita.canvasgl.util.Loggers import javax.microedition.khronos.egl.* -class EglHelper : IEglHelper { +class EglHelper( + private val eglConfigChooser: GLThread.EGLConfigChooser, - private val eglConfigChooser: GLThread.EGLConfigChooser + private val eglContextFactory: GLThread.EGLContextFactory, - private val eglContextFactory: GLThread.EGLContextFactory - - private val eglWindowSurfaceFactory: GLThread.EGLWindowSurfaceFactory + private val eglWindowSurfaceFactory: GLThread.EGLWindowSurfaceFactory +) : IEglHelper { private var egl: EGL10? = null @@ -38,12 +38,6 @@ class EglHelper : IEglHelper { private var eglContext1: EGLContext? = null - constructor(eglConfigChooser: GLThread.EGLConfigChooser, eglContextFactory: GLThread.EGLContextFactory, eglWindowSurfaceFactory: GLThread.EGLWindowSurfaceFactory) { - this.eglConfigChooser = eglConfigChooser - this.eglContextFactory = eglContextFactory - this.eglWindowSurfaceFactory = eglWindowSurfaceFactory - } - /** * Initialize EGL for a given configuration spec. * diff --git a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/GLThread.kt b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/GLThread.kt index b1c204c..3c06506 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/GLThread.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/glview/texture/gles/GLThread.kt @@ -89,18 +89,15 @@ class GLThread internal constructor(private val mEGLConfigChooser: EGLConfigChoo private var changeSurface = false - var eglContext: EglContextWrapper? = EGL_NO_CONTEXT_WRAPPER + var eglContext: EglContextWrapper? = sharedEglContext private set + private val mChoreographerRenderWrapper = ChoreographerRenderWrapper(this) private var frameTimeNanos: Long = 0 private var mEglHelper: IEglHelper? = null - init { - eglContext = sharedEglContext - } - fun setSurface(surface: Any) { if (mSurface !== surface) { changeSurface = true @@ -669,16 +666,9 @@ class GLThread internal constructor(private val mEGLConfigChooser: EGLConfigChoo } } - abstract class BaseConfigChooser(configSpec: IntArray, contextClientVersion: Int) : EGLConfigChooser { - - protected var mConfigSpec: IntArray - - private val contextClientVersion: Int + abstract class BaseConfigChooser(configSpec: IntArray, private val contextClientVersion: Int) : EGLConfigChooser { - init { - mConfigSpec = filterConfigSpec(configSpec) - this.contextClientVersion = contextClientVersion - } + protected var mConfigSpec: IntArray = filterConfigSpec(configSpec) override fun chooseConfig(egl: EGL10, display: EGLDisplay?): EGLConfig { val numConfig = IntArray(1) @@ -774,19 +764,19 @@ class GLThread internal constructor(private val mEGLConfigChooser: EGLConfigChoo EGL10.EGL_NONE), contextClientVersion) { // Subclasses can adjust these values: - protected var mRedSize: Int + protected var mRedSize: Int = redSize - protected var mGreenSize: Int + protected var mGreenSize: Int = greenSize - protected var mBlueSize: Int + protected var mBlueSize: Int = blueSize - protected var mAlphaSize: Int + protected var mAlphaSize: Int = alphaSize - protected var mDepthSize: Int + protected var mDepthSize: Int = depthSize - protected var mStencilSize: Int + protected var mStencilSize: Int = stencilSize - private val mValue: IntArray + private val mValue: IntArray = IntArray(1) override fun chooseConfig(egl: EGL10, display: EGLDisplay?, configs: Array): EGLConfig? { @@ -821,16 +811,6 @@ class GLThread internal constructor(private val mEGLConfigChooser: EGLConfigChoo defaultValue } } - - init { - mValue = IntArray(1) - mRedSize = redSize - mGreenSize = greenSize - mBlueSize = blueSize - mAlphaSize = alphaSize - mDepthSize = depthSize - mStencilSize = stencilSize - } } /** diff --git a/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManager.kt b/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManager.kt index 0ac93b8..59e6400 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManager.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManager.kt @@ -22,7 +22,7 @@ import android.graphics.PointF open class PathManager> { - lateinit var config: T + open lateinit var config: T /** * @return path which is List[PointF] after calculating. diff --git a/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManagerConfig.kt b/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManagerConfig.kt index 54f5db9..aef9bc7 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManagerConfig.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/pathManager/PathManagerConfig.kt @@ -39,7 +39,7 @@ open class PathManagerConfig = ArrayList() - open fun addLevel(level: Level): AlphaConfig { + open fun addLevel(level: Level) { if (listLevel.isNotEmpty()) { val previousLevel = listLevel[listLevel.size - 1] when { @@ -53,7 +53,6 @@ open class PathManagerConfig = ArrayList() - open fun addLevel(level: Level): ScaleSizeConfig { + open fun addLevel(level: Level) { if (listLevel.isNotEmpty()) { val previousLevel = listLevel[listLevel.size - 1] when { @@ -82,7 +81,6 @@ open class PathManagerConfig() { - init { - config = BezierPathManagerConfig() - } + override var config: BezierPathManagerConfig = BezierPathManagerConfig() override fun generateListPoint(): List { config.point?.let { pointConfig -> diff --git a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/ContrastFilter.kt b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/ContrastFilter.kt index 3084ad3..76269d8 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/ContrastFilter.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/ContrastFilter.kt @@ -37,8 +37,8 @@ class ContrastFilter(@param:FloatRange(from = 0.0, to = 4.0) private var contras setFloat(contrastLocation, contrast) } - override fun setValue(@FloatRange(from = 0.0, to = 4.0) contrast: Float) { - this.contrast = contrast + override fun setValue(@FloatRange(from = 0.0, to = 4.0) value: Float) { + this.contrast = value } companion object { diff --git a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/DarkenBlendFilter.kt b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/DarkenBlendFilter.kt index 9ce68b9..f16e1a9 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/DarkenBlendFilter.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/DarkenBlendFilter.kt @@ -18,6 +18,7 @@ package jp.eita.canvasgl.textureFilter import android.graphics.Bitmap class DarkenBlendFilter : TwoTextureFilter { + override val fragmentShader: String get() = DARKEN_BLEND_FRAGMENT_SHADER diff --git a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/HueFilter.kt b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/HueFilter.kt index 4357ff3..67d4b83 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/textureFilter/HueFilter.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/textureFilter/HueFilter.kt @@ -25,23 +25,19 @@ class HueFilter(@FloatRange(from = 0.0, to = 360.0) hue: Float) : BasicTextureFi private var mHueLocation = 0 - private var hueAdjust: Float + private var hueAdjust: Float = hue % 360.0f * Math.PI.toFloat() / 180.0f override val fragmentShader: String get() = HUE_FRAGMENT_SHADER - init { - hueAdjust = hue % 360.0f * Math.PI.toFloat() / 180.0f - } - override fun onPreDraw(program: Int, texture: BasicTexture, canvas: ICanvasGL) { super.onPreDraw(program, texture, canvas) mHueLocation = GLES20.glGetUniformLocation(program, UNIFORM_HUE) setFloat(mHueLocation, hueAdjust) } - override fun setValue(@FloatRange(from = 0.0, to = 360.0) hue: Float) { - hueAdjust = hue % 360.0f * Math.PI.toFloat() / 180.0f + override fun setValue(@FloatRange(from = 0.0, to = 360.0) value: Float) { + hueAdjust = value % 360.0f * Math.PI.toFloat() / 180.0f } companion object { diff --git a/opengl/src/main/java/jp/eita/canvasgl/util/FileLogger.kt b/opengl/src/main/java/jp/eita/canvasgl/util/FileLogger.kt index 99abcb6..f1fbd90 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/util/FileLogger.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/util/FileLogger.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.util import android.os.Process diff --git a/opengl/src/main/java/jp/eita/canvasgl/util/Loggers.kt b/opengl/src/main/java/jp/eita/canvasgl/util/Loggers.kt index cb6b249..3875aec 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/util/Loggers.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/util/Loggers.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.canvasgl.util import android.util.Log diff --git a/opengl/src/main/java/jp/eita/canvasgl/util/MathUtils.kt b/opengl/src/main/java/jp/eita/canvasgl/util/MathUtils.kt index d829546..3f55a08 100644 --- a/opengl/src/main/java/jp/eita/canvasgl/util/MathUtils.kt +++ b/opengl/src/main/java/jp/eita/canvasgl/util/MathUtils.kt @@ -16,8 +16,6 @@ * */ -@file:Suppress("unused") - package jp.eita.canvasgl.util import android.graphics.PointF diff --git a/openglsample/src/main/java/jp/eita/example/AnimatorUtils.kt b/openglsample/src/main/java/jp/eita/example/AnimatorUtils.kt deleted file mode 100644 index 4e8c8f3..0000000 --- a/openglsample/src/main/java/jp/eita/example/AnimatorUtils.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* - * - * * Copyright [2020 - Present] [Lê Trần Ngọc Thành - 瑛太 (eita)] [kineita (Github)] - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package jp.eita.example - -import android.os.Handler -import jp.eita.canvasgl.glview.GLObject -import jp.eita.canvasgl.util.Loggers -import jp.eita.example.model.MovableObject -import jp.eita.example.structure.AlphaGenerator -import jp.eita.example.structure.ScaleSizeRatioGenerator - -object AnimatorUtils { - - private val TAG: String = AnimatorUtils::class.simpleName.toString() - - fun animateScaleSize(movableObject: MovableObject, scaleSizeRatio: Float, timeDelayToAnimate: Long) { - val scaleSizeRatioGenerator = ScaleSizeRatioGenerator(scaleSizeRatio) - val runnable: Runnable = object : Runnable { - override fun run() { - if (movableObject.status == GLObject.Status.DESTROY) { - Loggers.d(TAG, "End of scale size runnable") - return - } - - movableObject.scaleSizeRatio = scaleSizeRatioGenerator.scaleRatioValue - Handler().postDelayed(this, timeDelayToAnimate) - } - } - Handler().postDelayed(runnable, timeDelayToAnimate) - } - - fun animateAlpha(movableObject: MovableObject, alpha: Int, timeDelayToAnimate: Long) { - val alphaGenerator = AlphaGenerator(alpha) - val runnable: Runnable = object : Runnable { - override fun run() { - if (movableObject.status == GLObject.Status.DESTROY) { - Loggers.d(TAG, "End of alpha runnable") - return - } - - movableObject.alpha = alphaGenerator.alphaValue - Handler().postDelayed(this, timeDelayToAnimate) - } - } - Handler().postDelayed(runnable, timeDelayToAnimate) - } -} \ No newline at end of file diff --git a/openglsample/src/main/java/jp/eita/example/main/bubble/BubbleActivity.kt b/openglsample/src/main/java/jp/eita/example/main/bubble/BubbleActivity.kt index f175ae2..74cbb89 100644 --- a/openglsample/src/main/java/jp/eita/example/main/bubble/BubbleActivity.kt +++ b/openglsample/src/main/java/jp/eita/example/main/bubble/BubbleActivity.kt @@ -18,17 +18,12 @@ package jp.eita.example.main.bubble import android.graphics.Bitmap import android.graphics.PointF import android.os.Bundle -import android.os.Handler -import android.text.Editable -import android.text.TextWatcher import androidx.appcompat.app.AppCompatActivity +import jp.eita.canvasgl.textureFilter.* import jp.eita.canvasgl.util.BitmapUtils import jp.eita.canvasgl.util.OpenGLUtil -import jp.eita.canvasgl.textureFilter.* import jp.eita.example.R import jp.eita.example.model.Bubble -import jp.eita.example.structure.AlphaList -import jp.eita.example.structure.ScaleRatioList import kotlinx.android.synthetic.main.activity_opengl_bubble.* import java.util.* import kotlin.collections.ArrayList @@ -39,36 +34,11 @@ class BubbleActivity : AppCompatActivity() { private lateinit var bitmap: Bitmap - private val scaleRatioList: ScaleRatioList = ScaleRatioList() - - private val alphaList: AlphaList = AlphaList(0) - - private val runnable = Runnable { - loopChangingPropertiesBubbles() - } - - init { -// Handler().postDelayed(runnable, 150) - } - - private fun loopChangingPropertiesBubbles() { - changingPropertiesBubbles() - Handler().postDelayed(runnable, 150) - } - - private fun changingPropertiesBubbles() { - for (i in 0 until gl_view_bubble.movableCollisionObjectList.size) { - gl_view_bubble.movableCollisionObjectList[i].scaleSizeRatio = scaleRatioList.listDetails[i].scaleRatioValue - gl_view_bubble.movableCollisionObjectList[i].alpha = alphaList.listDetails[i].scaleRatioValue - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_opengl_bubble) title = getString(R.string.bubble_title) setUpBitmap() - setUpEditTextScaleRatio() initFilterList(upFilterList) setUpButtonLike() } @@ -80,37 +50,6 @@ class BubbleActivity : AppCompatActivity() { // anim_gl_view.alpha = 0.6f } - private fun setUpEditTextScaleRatio() { - editTextScaleRatio.addTextChangedListener(object : TextWatcher { - - override fun afterTextChanged(s: Editable?) { - try { - val value: Double = if (s == null || s.toString() == "") { - return - } else if (s.toString() == "0.") { - 0.1 - } else { - s.toString().toDouble() - } - gl_view_bubble.onPause() -// anim_gl_view.updateScaleRatioForAllBubbles(value.toFloat()) - gl_view_bubble.onResume() - } catch (ex: Exception) { - - } - } - - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { - - } - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - - } - - }) - } - private fun initFilterList(filterList: MutableList) { filterList.add(PixelationFilter(1f)) filterList.add(ContrastFilter(1.6f)) @@ -145,9 +84,8 @@ class BubbleActivity : AppCompatActivity() { editTextScaleRatio.text.toString().toFloat() } val alpha = 255 - scaleRatioList.add(scaleRatio) - alphaList.add(alpha) - val bubble = Bubble( + + return Bubble( PointF(x, y - 700), vx, vy, @@ -158,8 +96,6 @@ class BubbleActivity : AppCompatActivity() { scaleSizeRatio = scaleRatio, alpha = alpha ) - - return bubble } override fun onResume() { diff --git a/openglsample/src/main/java/jp/eita/example/main/reaction/ReactionActivity.kt b/openglsample/src/main/java/jp/eita/example/main/reaction/ReactionActivity.kt index 0da8622..7c5796c 100644 --- a/openglsample/src/main/java/jp/eita/example/main/reaction/ReactionActivity.kt +++ b/openglsample/src/main/java/jp/eita/example/main/reaction/ReactionActivity.kt @@ -44,24 +44,25 @@ class ReactionActivity : AppCompatActivity() { private lateinit var bitmap: Bitmap - private val pathManager = BezierPathManager() - - init { - pathManager.config.point = BezierPathManagerConfig.PointConfig(3) - pathManager.config.point!!.size = 60 - pathManager.config.scaleSize = BezierPathManagerConfig.ScaleSizeConfig() - pathManager.config.scaleSize!!.size = 60 - pathManager.config.scaleSize!! - .addLevel(ScaleSizeConfig.Level(0, 1f)) - .addLevel(ScaleSizeConfig.Level(20, 1.5f)) - .addLevel(ScaleSizeConfig.Level(40, 1.8f)) - .addLevel(ScaleSizeConfig.Level(60, 0.8f)) - pathManager.config.alpha = BezierPathManagerConfig.AlphaConfig() - pathManager.config.alpha!!.size = 60 - pathManager.config.alpha!! - .addLevel(AlphaConfig.Level(0, 150)) - .addLevel(AlphaConfig.Level(30, 255)) - .addLevel(AlphaConfig.Level(60, 120)) + private val pathManager = BezierPathManager().apply { + config.apply { + point = BezierPathManagerConfig.PointConfig(3) + .also { it.size = 60 } + scaleSize = BezierPathManagerConfig.ScaleSizeConfig() + .apply { + addLevel(ScaleSizeConfig.Level(0, 1f)) + addLevel(ScaleSizeConfig.Level(20, 1.5f)) + addLevel(ScaleSizeConfig.Level(40, 1.8f)) + addLevel(ScaleSizeConfig.Level(60, 0.8f)) + } + .also { it.size = 60 } + alpha = BezierPathManagerConfig.AlphaConfig() + .apply { + addLevel(AlphaConfig.Level(0, 60)) + addLevel(AlphaConfig.Level(60, 255)) + } + .also { it.size = 60 } + } } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/openglsample/src/main/java/jp/eita/example/model/MovableObject.kt b/openglsample/src/main/java/jp/eita/example/model/MovableObject.kt index ac7a18d..3cd578e 100644 --- a/openglsample/src/main/java/jp/eita/example/model/MovableObject.kt +++ b/openglsample/src/main/java/jp/eita/example/model/MovableObject.kt @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package jp.eita.example.model import android.graphics.Canvas @@ -62,7 +63,9 @@ open class MovableObject( override fun normalDraw(canvas: Canvas) {} - override fun onDestroy() {} + override fun onDestroy() { + this.status = Status.DESTROY + } companion object { diff --git a/openglsample/src/main/java/jp/eita/example/model/Reaction.kt b/openglsample/src/main/java/jp/eita/example/model/Reaction.kt index c17774b..cad8d39 100644 --- a/openglsample/src/main/java/jp/eita/example/model/Reaction.kt +++ b/openglsample/src/main/java/jp/eita/example/model/Reaction.kt @@ -24,6 +24,7 @@ import jp.eita.canvasgl.ICanvasGL import jp.eita.canvasgl.pathManager.bezier.BezierPathManager import jp.eita.canvasgl.textureFilter.BasicTextureFilter import jp.eita.canvasgl.textureFilter.TextureFilter +import jp.eita.canvasgl.util.Loggers import jp.eita.canvasgl.util.MathUtils class Reaction( @@ -85,6 +86,7 @@ class Reaction( } private fun runPosition() { + Loggers.d("Testing", listPostion[crawlerListPosition].toString()) if (crawlerListPosition >= listPostion.size) { return } @@ -108,8 +110,4 @@ class Reaction( alpha = listAlpha[crawlerListAlpha] crawlerListAlpha++ } - - override fun onDestroy() { - status = Status.DESTROY - } } \ No newline at end of file diff --git a/openglsample/src/main/java/jp/eita/example/structure/AlphaGenerator.kt b/openglsample/src/main/java/jp/eita/example/structure/AlphaGenerator.kt deleted file mode 100644 index 96e377b..0000000 --- a/openglsample/src/main/java/jp/eita/example/structure/AlphaGenerator.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * - * * Copyright [2020 - Present] [Lê Trần Ngọc Thành - 瑛太 (eita)] [kineita (Github)] - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package jp.eita.example.structure - -class AlphaGenerator(val originalValue: Int) { - - private var rangeAlpha = intArrayOf( - originalValue, - (originalValue * 0.8).toInt(), - (originalValue * 0.7).toInt(), - (originalValue * 0.4).toInt(), - (originalValue * 0.7).toInt(), - (originalValue * 0.8).toInt(), - originalValue - ) - - private var crawlerAlpha: Int = 0 - - val alphaValue: Int - get() { - when { - crawlerAlpha >= rangeAlpha.size - 1 -> { - crawlerAlpha = 0 - } - else -> { - crawlerAlpha += 1 - } - } - - return rangeAlpha[crawlerAlpha] - } -} \ No newline at end of file diff --git a/openglsample/src/main/java/jp/eita/example/structure/AlphaList.kt b/openglsample/src/main/java/jp/eita/example/structure/AlphaList.kt deleted file mode 100644 index 10b0050..0000000 --- a/openglsample/src/main/java/jp/eita/example/structure/AlphaList.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright [2020 - Present] [Lê Trần Ngọc Thành - 瑛太 (eita)] [kineita (Github)] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package jp.eita.example.structure - -class AlphaList(initialCapacity: Int) : ArrayList(initialCapacity) { - - val listDetails: MutableList = ArrayList() - - override fun add(element: Int): Boolean { - listDetails.add(Detail(element)) - return super.add(element) - } - - class Detail(value: Int) { - - private var rangeAlpha = intArrayOf( - value, - (value * 0.8).toInt(), - (value * 0.7).toInt(), - (value * 0.4).toInt(), - (value * 0.2).toInt(), - (value * 0.4).toInt(), - (value * 0.6).toInt(), - (value * 0.7).toInt(), - (value * 0.8).toInt(), - value - ) - - private var crawlerAlpha: Int = 0 - - val scaleRatioValue: Int - get() { - when { - crawlerAlpha >= rangeAlpha.size - 1 -> { - crawlerAlpha = 0 - } - else -> { - crawlerAlpha += 1 - } - } - - return rangeAlpha[crawlerAlpha] - } - } -} \ No newline at end of file diff --git a/openglsample/src/main/java/jp/eita/example/structure/ScaleRatioList.kt b/openglsample/src/main/java/jp/eita/example/structure/ScaleRatioList.kt deleted file mode 100644 index e6961f3..0000000 --- a/openglsample/src/main/java/jp/eita/example/structure/ScaleRatioList.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright [2020 - Present] [Lê Trần Ngọc Thành - 瑛太 (eita)] [kineita (Github)] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package jp.eita.example.structure - -class ScaleRatioList : ArrayList() { - - val listDetails: MutableList = ArrayList() - - override fun add(element: Float): Boolean { - listDetails.add(Detail(element)) - return super.add(element) - } - - class Detail(val originalValue: Float) { - - private var rangeScaleRatio: FloatArray = floatArrayOf( - originalValue * 1.0f, - originalValue * 0.9f, - originalValue * 0.8f, - originalValue * 0.7f, - originalValue * 0.6f, - originalValue * 0.5f, - originalValue * 0.4f, - originalValue * 0.4f, - originalValue * 0.5f, - originalValue * 0.6f, - originalValue * 0.7f, - originalValue * 0.8f, - originalValue * 1.0f - ) - - private var crawlerRangeScaleRatio: Int = 0 - - val scaleRatioValue: Float - get() { - when { - crawlerRangeScaleRatio >= rangeScaleRatio.size - 1 -> { - crawlerRangeScaleRatio = 0 - } - else -> { - crawlerRangeScaleRatio += 1 - } - } - - return rangeScaleRatio[crawlerRangeScaleRatio] - } - } -} \ No newline at end of file diff --git a/openglsample/src/main/java/jp/eita/example/structure/ScaleSizeRatioGenerator.kt b/openglsample/src/main/java/jp/eita/example/structure/ScaleSizeRatioGenerator.kt deleted file mode 100644 index a10c359..0000000 --- a/openglsample/src/main/java/jp/eita/example/structure/ScaleSizeRatioGenerator.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * * Copyright [2020 - Present] [Lê Trần Ngọc Thành - 瑛太 (eita)] [kineita (Github)] - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package jp.eita.example.structure - -class ScaleSizeRatioGenerator(val originalValue: Float) { - - private var rangeScaleRatio: FloatArray = floatArrayOf( - originalValue * 0.4f, - originalValue * 0.5f, - originalValue * 0.6f, - originalValue * 0.7f, - originalValue, - originalValue * 0.7f, - originalValue * 0.6f, - originalValue * 0.5f, - originalValue * 0.4f - ) - - private var crawlerRangeScaleRatio: Int = 0 - - val scaleRatioValue: Float - get() { - when { - crawlerRangeScaleRatio >= rangeScaleRatio.size - 1 -> { - crawlerRangeScaleRatio = 0 - } - else -> { - crawlerRangeScaleRatio += 1 - } - } - - return rangeScaleRatio[crawlerRangeScaleRatio] - } -} \ No newline at end of file