Project

General

Profile

« Previous | Next » 

Revision afaed1cd

Added by Leszek Koltunski 1 day ago

convert all GLES30 to GLES31

View differences:

src/main/java/org/distorted/library/effect/PostprocessEffectBlurred.kt
20 20

  
21 21
package org.distorted.library.effect
22 22

  
23
import android.opengl.GLES30
23
import android.opengl.GLES31
24 24
import org.distorted.library.main.DistortedFramebuffer
25 25
import org.distorted.library.main.InternalRenderState
26 26
import org.distorted.library.program.DistortedProgram
......
116 116

  
117 117
        val offset = radius+radius*radius/4
118 118
        radius = (radius+1)/2
119
        GLES30.glViewport(0, 0, w.toInt(), h.toInt())
119
        GLES31.glViewport(0, 0, w.toInt(), h.toInt())
120 120

  
121 121
        // horizontal blur
122 122
        for (i in 0..radius) mOffsets[i] = offsetsCache[offset+i]*offsetCorrW
......
125 125
        buffer.bindForOutput(1)
126 126
        buffer.setAsInput(0)
127 127

  
128
        GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE)
129
        GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE)
130

  
131
        GLES30.glColorMask(true, true, true, true)
132
        GLES30.glClearColor(1.0f, 1.0f, 1.0f, 0.0f)
133
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
134

  
135
        GLES30.glUniform1f(mProgram1!!.mUniform!![0], n)
136
        GLES30.glUniform2f(mProgram1!!.mUniform!![1], corrW, corrH)
137
        GLES30.glUniform1i(mProgram1!!.mUniform!![2], 0)
138
        GLES30.glUniform1fv(mProgram1!!.mUniform!![3], radius+1, mOffsets, 0)
139
        GLES30.glUniform1fv(mProgram1!!.mUniform!![4], radius+1, weightsCache, offset)
140
        GLES30.glUniform1i(mProgram1!!.mUniform!![5], radius)
141
        GLES30.glVertexAttribPointer(mProgram1!!.mAttribute!![0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions)
142
        GLES30.glVertexAttribPointer(mProgram1!!.mAttribute!![1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture)
143
        GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
128
        GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_S, GLES31.GL_CLAMP_TO_EDGE)
129
        GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_T, GLES31.GL_CLAMP_TO_EDGE)
130

  
131
        GLES31.glColorMask(true, true, true, true)
132
        GLES31.glClearColor(1.0f, 1.0f, 1.0f, 0.0f)
133
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT)
134

  
135
        GLES31.glUniform1f(mProgram1!!.mUniform!![0], n)
136
        GLES31.glUniform2f(mProgram1!!.mUniform!![1], corrW, corrH)
137
        GLES31.glUniform1i(mProgram1!!.mUniform!![2], 0)
138
        GLES31.glUniform1fv(mProgram1!!.mUniform!![3], radius+1, mOffsets, 0)
139
        GLES31.glUniform1fv(mProgram1!!.mUniform!![4], radius+1, weightsCache, offset)
140
        GLES31.glUniform1i(mProgram1!!.mUniform!![5], radius)
141
        GLES31.glVertexAttribPointer(mProgram1!!.mAttribute!![0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadPositions)
142
        GLES31.glVertexAttribPointer(mProgram1!!.mAttribute!![1], TEX_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadTexture)
143
        GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
144 144
        mProgram1!!.stopUsingProgram()
145 145

  
146 146
        // vertical blur
......
150 150
        buffer.bindForOutput(0)
151 151
        buffer.setAsInput(1)
152 152

  
153
        GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE)
154
        GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE)
153
        GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_S, GLES31.GL_CLAMP_TO_EDGE)
154
        GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_T, GLES31.GL_CLAMP_TO_EDGE)
155 155

  
156
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
156
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT)
157 157

  
158
        GLES30.glUniform1f(mProgram2!!.mUniform!![0], n)
159
        GLES30.glUniform2f(mProgram2!!.mUniform!![1], corrW, corrH)
160
        GLES30.glUniform1i(mProgram2!!.mUniform!![2], 0)
161
        GLES30.glUniform1fv(mProgram2!!.mUniform!![3], radius+1, mOffsets, 0)
162
        GLES30.glUniform1fv(mProgram2!!.mUniform!![4], radius+1, weightsCache, offset)
163
        GLES30.glUniform1i(mProgram2!!.mUniform!![5], radius)
164
        GLES30.glVertexAttribPointer(mProgram2!!.mAttribute!![0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions)
165
        GLES30.glVertexAttribPointer(mProgram2!!.mAttribute!![1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture)
166
        GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
158
        GLES31.glUniform1f(mProgram2!!.mUniform!![0], n)
159
        GLES31.glUniform2f(mProgram2!!.mUniform!![1], corrW, corrH)
160
        GLES31.glUniform1i(mProgram2!!.mUniform!![2], 0)
161
        GLES31.glUniform1fv(mProgram2!!.mUniform!![3], radius+1, mOffsets, 0)
162
        GLES31.glUniform1fv(mProgram2!!.mUniform!![4], radius+1, weightsCache, offset)
163
        GLES31.glUniform1i(mProgram2!!.mUniform!![5], radius)
164
        GLES31.glVertexAttribPointer(mProgram2!!.mAttribute!![0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadPositions)
165
        GLES31.glVertexAttribPointer(mProgram2!!.mAttribute!![1], TEX_DATA_SIZE, GLES31.GL_FLOAT, false, 0, mQuadTexture)
166
        GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
167 167
        mProgram1!!.stopUsingProgram()
168 168

  
169 169
        InternalRenderState.unuseStencilMark()
src/main/java/org/distorted/library/effectqueue/EffectQueueFragment.kt
20 20

  
21 21
package org.distorted.library.effectqueue
22 22

  
23
import android.opengl.GLES30
23
import android.opengl.GLES31
24 24
import org.distorted.library.effect.EffectType
25 25
import org.distorted.library.effect.FragmentEffect
26 26
import org.distorted.library.message.EffectMessageSender
......
42 42
        ///////////////////////////////////////////////////////////////////////////////////////////
43 43
        fun uniforms(mProgramH: Int, variant: Int)
44 44
        {
45
            mNumEffectsH[variant]  = GLES30.glGetUniformLocation(mProgramH, "fNumEffects")
46
            mIntUniformsH[variant] = GLES30.glGetUniformLocation(mProgramH, "fProperties")
47
            mFloUniformsH[variant] = GLES30.glGetUniformLocation(mProgramH, "fUniforms")
45
            mNumEffectsH[variant]  = GLES31.glGetUniformLocation(mProgramH, "fNumEffects")
46
            mIntUniformsH[variant] = GLES31.glGetUniformLocation(mProgramH, "fProperties")
47
            mFloUniformsH[variant] = GLES31.glGetUniformLocation(mProgramH, "fUniforms")
48 48
        }
49 49
    }
50 50
    ///////////////////////////////////////////////////////////////////////////////////////////////
......
68 68
    ///////////////////////////////////////////////////////////////////////////////////////////////
69 69
    fun send(variant: Int)
70 70
    {
71
        GLES30.glUniform1i(mNumEffectsH[variant],numEffects)
71
        GLES31.glUniform1i(mNumEffectsH[variant],numEffects)
72 72

  
73 73
        if (numEffects>0)
74 74
        {
75 75
            val arrayI = mUBI!!.backingArray
76 76
            val arrayF = mUBF!!.backingArray
77
            GLES30.glUniform4iv(mIntUniformsH[variant],numEffects,arrayI,0)
78
            GLES30.glUniform4fv(mFloUniformsH[variant],(NUM_FLOAT_UNIFORMS/4)*numEffects,arrayF,0)
77
            GLES31.glUniform4iv(mIntUniformsH[variant],numEffects,arrayI,0)
78
            GLES31.glUniform4fv(mFloUniformsH[variant],(NUM_FLOAT_UNIFORMS/4)*numEffects,arrayF,0)
79 79
        }
80 80
    }
81 81
}
src/main/java/org/distorted/library/effectqueue/EffectQueueMatrix.kt
20 20

  
21 21
package org.distorted.library.effectqueue
22 22

  
23
import android.opengl.GLES30
23
import android.opengl.GLES31
24 24
import org.distorted.library.effect.EffectType
25 25
import org.distorted.library.effect.MatrixEffect
26 26
import org.distorted.library.helpers.MatrixHelper.multiply
......
48 48
        ///////////////////////////////////////////////////////////////////////////////////////////
49 49
        fun uniforms(mProgramH: Int, variant: Int)
50 50
        {
51
            mMVPMatrixH[variant] = GLES30.glGetUniformLocation(mProgramH, "u_MVPMatrix")
52
            mMVMatrixPH[variant] = GLES30.glGetUniformLocation(mProgramH, "u_MVMatrixP")
53
            mMVMatrixVH[variant] = GLES30.glGetUniformLocation(mProgramH, "u_MVMatrixV")
51
            mMVPMatrixH[variant] = GLES31.glGetUniformLocation(mProgramH, "u_MVPMatrix")
52
            mMVMatrixPH[variant] = GLES31.glGetUniformLocation(mProgramH, "u_MVMatrixP")
53
            mMVMatrixVH[variant] = GLES31.glGetUniformLocation(mProgramH, "u_MVMatrixV")
54 54
        }
55 55
    }
56 56

  
......
116 116
        // combined Model-View-Projection matrix
117 117
        multiply(mMVPMatrix, projection, mModelViewMatrixP)
118 118

  
119
        GLES30.glUniformMatrix4fv(mMVMatrixVH[variant], 1, false, mModelViewMatrixV, 0)
120
        GLES30.glUniformMatrix4fv(mMVMatrixPH[variant], 1, false, mModelViewMatrixP, 0)
121
        GLES30.glUniformMatrix4fv(mMVPMatrixH[variant], 1, false, mMVPMatrix       , 0)
119
        GLES31.glUniformMatrix4fv(mMVMatrixVH[variant], 1, false, mModelViewMatrixV, 0)
120
        GLES31.glUniformMatrix4fv(mMVMatrixPH[variant], 1, false, mModelViewMatrixP, 0)
121
        GLES31.glUniformMatrix4fv(mMVPMatrixH[variant], 1, false, mMVPMatrix       , 0)
122 122
    }
123 123
}
src/main/java/org/distorted/library/effectqueue/EffectQueuePostprocess.kt
20 20

  
21 21
package org.distorted.library.effectqueue
22 22

  
23
import android.opengl.GLES30
23
import android.opengl.GLES31
24 24
import org.distorted.library.effect.EffectType
25 25
import org.distorted.library.effect.PostprocessEffect
26 26
import org.distorted.library.effect.VertexEffect
......
95 95
            mPreProgramH = mPreProgram!!.programHandle
96 96
            getUniforms(mPreProgramH, 2)
97 97
            MeshBase.getUniforms(mPreProgramH, 2)
98
            mPreColorH = GLES30.glGetUniformLocation(mPreProgramH, "u_Color")
99
            mPreTextureH = GLES30.glGetUniformLocation(mPreProgramH, "u_Texture")
98
            mPreColorH = GLES31.glGetUniformLocation(mPreProgramH, "u_Color")
99
            mPreTextureH = GLES31.glGetUniformLocation(mPreProgramH, "u_Texture")
100 100
        }
101 101
    }
102 102

  
......
165 165

  
166 166
        InternalRenderState.setUpStencilMark(mA != 0.0f)
167 167
        InternalRenderState.disableBlending()
168
        if (!mUseHaloDepth) GLES30.glDepthMask(false)
168
        if (!mUseHaloDepth) GLES31.glDepthMask(false)
169 169

  
170
        GLES30.glViewport(0,0,width,height)
170
        GLES31.glViewport(0,0,width,height)
171 171

  
172 172
        mPreProgram!!.useProgram()
173 173

  
......
183 183

  
184 184
        if (mA != 0.0f)
185 185
        {
186
            GLES30.glUniform4f(mPreColorH,mR,mG,mB,mA)
187
            GLES30.glUniform1i(mPreTextureH, 0)
186
            GLES31.glUniform4f(mPreColorH,mR,mG,mB,mA)
187
            GLES31.glUniform1i(mPreTextureH, 0)
188 188
        }
189 189

  
190
        GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() )
190
        GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() )
191 191
        mPreProgram!!.stopUsingProgram()
192 192

  
193 193
        InternalRenderState.restoreBlending()
194 194
        InternalRenderState.unsetUpStencilMark()
195
        if (!mUseHaloDepth) GLES30.glDepthMask(true)
195
        if (!mUseHaloDepth) GLES31.glDepthMask(true)
196 196

  
197 197
        return 1
198 198
    }
......
203 203
        var numRenders = 0
204 204
        val array = mUBF!!.backingArray
205 205

  
206
        GLES30.glDisable(GLES30.GL_BLEND)
206
        GLES31.glDisable(GLES31.GL_BLEND)
207 207

  
208 208
        for (i in 0..<numEffects)
209 209
            numRenders += (mEffects[i] as PostprocessEffect).postprocess(array,NUM_FLOAT_UNIFORMS*i, buffer)
210 210

  
211
        GLES30.glEnable(GLES30.GL_BLEND)
211
        GLES31.glEnable(GLES31.GL_BLEND)
212 212

  
213 213
        return numRenders
214 214
    }
src/main/java/org/distorted/library/effectqueue/EffectQueueVertex.kt
20 20

  
21 21
package org.distorted.library.effectqueue
22 22

  
23
import android.opengl.GLES30
23
import android.opengl.GLES31
24 24
import org.distorted.library.effect.EffectType
25 25
import org.distorted.library.effect.VertexEffect
26 26
import org.distorted.library.message.EffectMessageSender
......
48 48
        ///////////////////////////////////////////////////////////////////////////////////////////
49 49
        fun uniforms(mProgramH: Int, variant: Int)
50 50
        {
51
            mNumEffectsH[variant]   = GLES30.glGetUniformLocation(mProgramH, "vNumEffects")
52
            mInflateH[variant]      = GLES30.glGetUniformLocation(mProgramH, "u_Inflate")
53
            mIntBlockIndex[variant] = GLES30.glGetUniformBlockIndex(mProgramH, "vUniformProperties")
54
            mFloBlockIndex[variant] = GLES30.glGetUniformBlockIndex(mProgramH, "vUniformFloats")
51
            mNumEffectsH[variant]   = GLES31.glGetUniformLocation(mProgramH, "vNumEffects")
52
            mInflateH[variant]      = GLES31.glGetUniformLocation(mProgramH, "u_Inflate")
53
            mIntBlockIndex[variant] = GLES31.glGetUniformBlockIndex(mProgramH, "vUniformProperties")
54
            mFloBlockIndex[variant] = GLES31.glGetUniformBlockIndex(mProgramH, "vUniformFloats")
55 55
        }
56 56
    }
57 57

  
......
84 84
    */
85 85
    fun send(inflate: Float, programH: Int, variant: Int)
86 86
    {
87
        GLES30.glUniform1i(mNumEffectsH[variant], numEffects)
88
        GLES30.glUniform1f(mInflateH[variant], inflate)
87
        GLES31.glUniform1i(mNumEffectsH[variant], numEffects)
88
        GLES31.glUniform1f(mInflateH[variant], inflate)
89 89

  
90 90
        if (numEffects>0)
91 91
        {
92
            GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER,VERT_INT_UBO_BINDING,mUBI!!.index)
93
            GLES30.glUniformBlockBinding(programH, mIntBlockIndex[variant],VERT_INT_UBO_BINDING)
94
            GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER,VERT_FLO_UBO_BINDING,mUBF!!.index)
95
            GLES30.glUniformBlockBinding(programH,mFloBlockIndex[variant],VERT_FLO_UBO_BINDING)
92
            GLES31.glBindBufferBase(GLES31.GL_UNIFORM_BUFFER,VERT_INT_UBO_BINDING,mUBI!!.index)
93
            GLES31.glUniformBlockBinding(programH, mIntBlockIndex[variant],VERT_INT_UBO_BINDING)
94
            GLES31.glBindBufferBase(GLES31.GL_UNIFORM_BUFFER,VERT_FLO_UBO_BINDING,mUBF!!.index)
95
            GLES31.glUniformBlockBinding(programH,mFloBlockIndex[variant],VERT_FLO_UBO_BINDING)
96 96
        }
97 97
    }
98 98
}
src/main/java/org/distorted/library/main/DistortedFramebuffer.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
22
import android.opengl.GLES31
23 23

  
24 24
///////////////////////////////////////////////////////////////////////////////////////////////////
25 25
/**
......
46 46
        // COLOR
47 47
        if( mColorCreated==NOT_CREATED_YET )
48 48
        {
49
            GLES30.glGenTextures(mNumFBOs*mNumColors, mColorH, 0)
50
            GLES30.glGenFramebuffers(mNumFBOs, mFBOH, 0)
49
            GLES31.glGenTextures(mNumFBOs*mNumColors, mColorH, 0)
50
            GLES31.glGenFramebuffers(mNumFBOs, mFBOH, 0)
51 51

  
52 52
            for (i in 0 until mNumFBOs)
53 53
            {
54
                GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[i])
54
                GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[i])
55 55

  
56 56
                for (j in 0 until mNumColors)
57 57
                {
58
                    GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, mColorH!![i*mNumColors+j])
59
                    GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_REPEAT)
60
                    GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_REPEAT)
61
                    GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_NEAREST.toFloat())
62
                    GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR.toFloat())
63
                    GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA, mRealWidth, mRealHeight, 0, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null)
58
                    GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, mColorH!![i*mNumColors+j])
59
                    GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_S, GLES31.GL_REPEAT)
60
                    GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_T, GLES31.GL_REPEAT)
61
                    GLES31.glTexParameterf(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_NEAREST.toFloat())
62
                    GLES31.glTexParameterf(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_LINEAR.toFloat())
63
                    GLES31.glTexImage2D(GLES31.GL_TEXTURE_2D, 0, GLES31.GL_RGBA, mRealWidth, mRealHeight, 0, GLES31.GL_RGBA, GLES31.GL_UNSIGNED_BYTE, null)
64 64
                }
65 65

  
66
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, mColorH!![i*mNumColors], 0)
67
                GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
66
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, mColorH!![i*mNumColors], 0)
67
                GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
68 68
            }
69 69

  
70 70
            // TODO
71 71
            mColorCreated = checkStatus("color")
72
            GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
72
            GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
73 73
        }
74 74

  
75 75
        //////////////////////////////////////////////////////////////
76 76
        // DEPTH / STENCIL
77 77
        if( mDepthStencilCreated==NOT_CREATED_YET )  // we need to create a new DEPTH or STENCIL attachment
78 78
        {
79
            GLES30.glGenTextures(mNumFBOs, mDepthStencilH, 0)
79
            GLES31.glGenTextures(mNumFBOs, mDepthStencilH, 0)
80 80

  
81 81
            for (i in 0 until mNumFBOs)
82 82
            {
83
                GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, mDepthStencilH!![i])
84
                GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_REPEAT)
85
                GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_REPEAT)
86
                GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_NEAREST)
87
                GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_NEAREST)
83
                GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, mDepthStencilH!![i])
84
                GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_S, GLES31.GL_REPEAT)
85
                GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_T, GLES31.GL_REPEAT)
86
                GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_NEAREST)
87
                GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_NEAREST)
88 88

  
89 89
                if (mDepthStencil==DEPTH_NO_STENCIL)
90 90
                {
91
                    GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_DEPTH_COMPONENT, mRealWidth, mRealHeight, 0, GLES30.GL_DEPTH_COMPONENT, GLES30.GL_UNSIGNED_INT, null)
91
                    GLES31.glTexImage2D(GLES31.GL_TEXTURE_2D, 0, GLES31.GL_DEPTH_COMPONENT, mRealWidth, mRealHeight, 0, GLES31.GL_DEPTH_COMPONENT, GLES31.GL_UNSIGNED_INT, null)
92 92
                }
93 93
                else if (mDepthStencil==BOTH_DEPTH_STENCIL)
94 94
                {
95
                    GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_DEPTH24_STENCIL8, mRealWidth, mRealHeight, 0, GLES30.GL_DEPTH_STENCIL, GLES30.GL_UNSIGNED_INT_24_8, null)
95
                    GLES31.glTexImage2D(GLES31.GL_TEXTURE_2D, 0, GLES31.GL_DEPTH24_STENCIL8, mRealWidth, mRealHeight, 0, GLES31.GL_DEPTH_STENCIL, GLES31.GL_UNSIGNED_INT_24_8, null)
96 96
                }
97 97
            }
98
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
98
            GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
99 99

  
100 100
            for (i in 0 until mNumFBOs)
101 101
            {
102
                GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[i])
102
                GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[i])
103 103

  
104 104
                if (mDepthStencil==DEPTH_NO_STENCIL)
105 105
                {
106
                    GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_ATTACHMENT, GLES30.GL_TEXTURE_2D, mDepthStencilH!![i], 0)
106
                    GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_ATTACHMENT, GLES31.GL_TEXTURE_2D, mDepthStencilH!![i], 0)
107 107
                }
108 108
                else if (mDepthStencil==BOTH_DEPTH_STENCIL)
109 109
                {
110
                    GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_STENCIL_ATTACHMENT, GLES30.GL_TEXTURE_2D, mDepthStencilH!![i], 0)
110
                    GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_STENCIL_ATTACHMENT, GLES31.GL_TEXTURE_2D, mDepthStencilH!![i], 0)
111 111
                }
112 112
            }
113 113

  
114 114
            // TODO
115 115
            mDepthStencilCreated = checkStatus("depth")
116
            GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
116
            GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
117 117
        }
118 118

  
119 119
        //////////////////////////////////////////////////////////////
......
128 128

  
129 129
            for (i in 0 until mNumFBOs)
130 130
            {
131
                GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[i])
132
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_ATTACHMENT, GLES30.GL_TEXTURE_2D, 0, 0)
133
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_STENCIL_ATTACHMENT, GLES30.GL_TEXTURE_2D, 0, 0)
131
                GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[i])
132
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_ATTACHMENT, GLES31.GL_TEXTURE_2D, 0, 0)
133
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_STENCIL_ATTACHMENT, GLES31.GL_TEXTURE_2D, 0, 0)
134 134
                mDepthStencilH!![i] = 0
135 135
            }
136 136

  
137
            GLES30.glDeleteTextures(mNumFBOs, mDepthStencilH, 0)
138
            GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
137
            GLES31.glDeleteTextures(mNumFBOs, mDepthStencilH, 0)
138
            GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
139 139
        }
140 140
    }
141 141

  
......
143 143
    // TODO
144 144
    private fun checkStatus(message: String): Int
145 145
    {
146
        val status = GLES30.glCheckFramebufferStatus(GLES30.GL_FRAMEBUFFER)
146
        val status = GLES31.glCheckFramebufferStatus(GLES31.GL_FRAMEBUFFER)
147 147

  
148
        if (status!=GLES30.GL_FRAMEBUFFER_COMPLETE)
148
        if (status!=GLES31.GL_FRAMEBUFFER_COMPLETE)
149 149
        {
150 150
            DistortedLibrary.logMessage("DistortedFramebuffer: FRAMEBUFFER INCOMPLETE, $message error=$status")
151 151

  
152
            GLES30.glDeleteTextures(1, mColorH, 0)
153
            GLES30.glDeleteTextures(1, mDepthStencilH, 0)
154
            GLES30.glDeleteFramebuffers(1, mFBOH, 0)
152
            GLES31.glDeleteTextures(1, mColorH, 0)
153
            GLES31.glDeleteTextures(1, mDepthStencilH, 0)
154
            GLES31.glDeleteFramebuffers(1, mFBOH, 0)
155 155
            mFBOH[0] = 0
156 156

  
157 157
            return FAILED_TO_CREATE
......
168 168

  
169 169
        if( colorH[0]>0 )
170 170
        {
171
            GLES30.glDeleteTextures(mNumFBOs*mNumColors, colorH, 0)
171
            GLES31.glDeleteTextures(mNumFBOs*mNumColors, colorH, 0)
172 172
            mColorCreated = NOT_CREATED_YET
173 173
            for (i in 0 until mNumFBOs*mNumColors) colorH[i] = 0
174 174
        }
......
177 177

  
178 178
        if( depthStencilH[0]>0 )
179 179
        {
180
            GLES30.glDeleteTextures(mNumFBOs, depthStencilH, 0)
180
            GLES31.glDeleteTextures(mNumFBOs, depthStencilH, 0)
181 181
            mDepthStencilCreated = NOT_CREATED_YET
182 182
            for (i in 0 until mNumFBOs) depthStencilH[i] = 0
183 183
        }
184 184

  
185 185
        if( mNumFBOs>0 && mFBOH[0]>0 )
186 186
        {
187
            GLES30.glDeleteFramebuffers(mNumFBOs, mFBOH, 0)
187
            GLES31.glDeleteFramebuffers(mNumFBOs, mFBOH, 0)
188 188
        }
189 189

  
190 190
        for (i in 0 until mNumFBOs)
......
222 222

  
223 223
            if( colorH>0 )
224 224
            {
225
                GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
226
                GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, colorH)
225
                GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
226
                GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, colorH)
227 227
                return true
228 228
            }
229 229
        }
......
277 277

  
278 278
            if( colorH>0 )
279 279
            {
280
                GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
281
                GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, colorH)
280
                GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
281
                GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, colorH)
282 282
                return true
283 283
            }
284 284
        }
......
299 299
            val colorH = mColorH!![2*mCurrFBO + texture]
300 300

  
301 301
            if( colorH>0 )
302
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH, 0)
302
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH, 0)
303 303
        }
304 304
    }
305 305

  
......
353 353
    {
354 354
        if( fbo in 0..<mNumFBOs )
355 355
        {
356
            GLES30.glBindFramebuffer(GLES30.GL_READ_FRAMEBUFFER, mFBOH[fbo])
356
            GLES31.glBindFramebuffer(GLES31.GL_READ_FRAMEBUFFER, mFBOH[fbo])
357 357
            return true
358 358
        }
359 359

  
src/main/java/org/distorted/library/main/DistortedLibrary.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
23 22
import android.opengl.GLES31
24
import org.distorted.library.R
25 23
import org.distorted.library.effect.Effect
26 24
import org.distorted.library.effect.EffectType
27 25
import org.distorted.library.effect.FragmentEffect
......
321 319
        mMainProgramH = mMainProgram!!.programHandle
322 320
        EffectQueue.getUniforms(mMainProgramH, 0)
323 321
        MeshBase.getUniforms(mMainProgramH, 0)
324
        mMainTextureH = GLES30.glGetUniformLocation(mMainProgramH, "u_Texture")
325
        mTransformFeedbackH = GLES30.glGetUniformLocation(mMainProgramH, "u_TransformFeedback")
322
        mMainTextureH = GLES31.glGetUniformLocation(mMainProgramH, "u_Texture")
323
        mTransformFeedbackH = GLES31.glGetUniformLocation(mMainProgramH, "u_TransformFeedback")
326 324

  
327 325
        // BLIT PROGRAM ////////////////////////////////////
328 326
        val blitVertStream = Blit.vertex()
......
339 337
        }
340 338

  
341 339
        val blitProgramH = mBlitProgram!!.programHandle
342
        mBlitTextureH = GLES30.glGetUniformLocation(blitProgramH, "u_Texture")
343
        mBlitDepthH = GLES30.glGetUniformLocation(blitProgramH, "u_Depth")
340
        mBlitTextureH = GLES31.glGetUniformLocation(blitProgramH, "u_Texture")
341
        mBlitDepthH = GLES31.glGetUniformLocation(blitProgramH, "u_Depth")
344 342

  
345 343
        // BLIT DEPTH PROGRAM ////////////////////////////////////
346 344
        val blitDepthVertStream = BlitDepth.vertex()
......
357 355
        }
358 356

  
359 357
        val blitDepthProgramH = mBlitDepthProgram!!.programHandle
360
        mBlitDepthTextureH = GLES30.glGetUniformLocation(blitDepthProgramH, "u_Texture")
361
        mBlitDepthDepthTextureH = GLES30.glGetUniformLocation(blitDepthProgramH, "u_DepthTexture")
362
        mBlitDepthTexCorrH = GLES30.glGetUniformLocation(blitDepthProgramH, "u_TexCorr")
358
        mBlitDepthTextureH = GLES31.glGetUniformLocation(blitDepthProgramH, "u_Texture")
359
        mBlitDepthDepthTextureH = GLES31.glGetUniformLocation(blitDepthProgramH, "u_DepthTexture")
360
        mBlitDepthTexCorrH = GLES31.glGetUniformLocation(blitDepthProgramH, "u_TexCorr")
363 361
    }
364 362

  
365 363
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
379 377
        }
380 378

  
381 379
        val normalProgramH = mNormalProgram!!.programHandle
382
        mNormalProjectionH = GLES30.glGetUniformLocation(normalProgramH, "u_Projection")
380
        mNormalProjectionH = GLES31.glGetUniformLocation(normalProgramH, "u_Projection")
383 381
    }
384 382

  
385 383
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
454 452
        mMainOITProgramH = mMainOITProgram!!.programHandle
455 453
        EffectQueue.getUniforms(mMainOITProgramH, 1)
456 454
        MeshBase.getUniforms(mMainOITProgramH, 1)
457
        mMainOITTextureH = GLES30.glGetUniformLocation(mMainOITProgramH, "u_Texture")
458
        mMainOITSizeH = GLES30.glGetUniformLocation(mMainOITProgramH, "u_Size")
459
        mMainOITNumRecordsH = GLES30.glGetUniformLocation(mMainOITProgramH, "u_numRecords")
455
        mMainOITTextureH = GLES31.glGetUniformLocation(mMainOITProgramH, "u_Texture")
456
        mMainOITSizeH = GLES31.glGetUniformLocation(mMainOITProgramH, "u_Size")
457
        mMainOITNumRecordsH = GLES31.glGetUniformLocation(mMainOITProgramH, "u_numRecords")
460 458

  
461 459
        // OIT CLEAR PROGRAM ////////////////////////////////////
462 460
        val oitClearVertStream = Oit.vertex()
......
473 471
        }
474 472

  
475 473
        val oitClearProgramH = mOITClearProgram!!.programHandle
476
        mOITClearDepthH = GLES30.glGetUniformLocation(oitClearProgramH, "u_Depth")
477
        mOITClearTexCorrH = GLES30.glGetUniformLocation(oitClearProgramH, "u_TexCorr")
478
        mOITClearSizeH = GLES30.glGetUniformLocation(oitClearProgramH, "u_Size")
474
        mOITClearDepthH = GLES31.glGetUniformLocation(oitClearProgramH, "u_Depth")
475
        mOITClearTexCorrH = GLES31.glGetUniformLocation(oitClearProgramH, "u_TexCorr")
476
        mOITClearSizeH = GLES31.glGetUniformLocation(oitClearProgramH, "u_Size")
479 477

  
480 478
        // OIT BUILD PROGRAM ////////////////////////////////////
481 479
        val oitBuildVertStream = Oit.vertex()
......
492 490
        }
493 491

  
494 492
        val oitBuildProgramH = mOITBuildProgram!!.programHandle
495
        mOITBuildTextureH      = GLES30.glGetUniformLocation(oitBuildProgramH, "u_Texture")
496
        mOITBuildDepthTextureH = GLES30.glGetUniformLocation(oitBuildProgramH, "u_DepthTexture")
497
        mOITBuildDepthH        = GLES30.glGetUniformLocation(oitBuildProgramH, "u_Depth")
498
        mOITBuildTexCorrH      = GLES30.glGetUniformLocation(oitBuildProgramH, "u_TexCorr")
499
        mOITBuildSizeH         = GLES30.glGetUniformLocation(oitBuildProgramH, "u_Size")
500
        mOITBuildNumRecordsH   = GLES30.glGetUniformLocation(oitBuildProgramH, "u_numRecords")
493
        mOITBuildTextureH      = GLES31.glGetUniformLocation(oitBuildProgramH, "u_Texture")
494
        mOITBuildDepthTextureH = GLES31.glGetUniformLocation(oitBuildProgramH, "u_DepthTexture")
495
        mOITBuildDepthH        = GLES31.glGetUniformLocation(oitBuildProgramH, "u_Depth")
496
        mOITBuildTexCorrH      = GLES31.glGetUniformLocation(oitBuildProgramH, "u_TexCorr")
497
        mOITBuildSizeH         = GLES31.glGetUniformLocation(oitBuildProgramH, "u_Size")
498
        mOITBuildNumRecordsH   = GLES31.glGetUniformLocation(oitBuildProgramH, "u_numRecords")
501 499

  
502 500
        // OIT COLLAPSE PROGRAM ///////////////////////////
503 501
        val oitCollapseVertStream = Oit.vertex()
......
514 512
        }
515 513

  
516 514
        val oitCollapseProgramH = mOITCollapseProgram!!.programHandle
517
        mOITCollapseDepthTextureH = GLES30.glGetUniformLocation(oitCollapseProgramH, "u_DepthTexture")
518
        mOITCollapseDepthH        = GLES30.glGetUniformLocation(oitCollapseProgramH, "u_Depth")
519
        mOITCollapseTexCorrH      = GLES30.glGetUniformLocation(oitCollapseProgramH, "u_TexCorr")
520
        mOITCollapseSizeH         = GLES30.glGetUniformLocation(oitCollapseProgramH, "u_Size")
515
        mOITCollapseDepthTextureH = GLES31.glGetUniformLocation(oitCollapseProgramH, "u_DepthTexture")
516
        mOITCollapseDepthH        = GLES31.glGetUniformLocation(oitCollapseProgramH, "u_Depth")
517
        mOITCollapseTexCorrH      = GLES31.glGetUniformLocation(oitCollapseProgramH, "u_TexCorr")
518
        mOITCollapseSizeH         = GLES31.glGetUniformLocation(oitCollapseProgramH, "u_Size")
521 519

  
522 520
        // OIT RENDER PROGRAM ///////////////////////////
523 521
        val oitRenderVertStream = Oit.vertex()
......
534 532
        }
535 533

  
536 534
        val oitRenderProgramH = mOITRenderProgram!!.programHandle
537
        mOITRenderDepthH   = GLES30.glGetUniformLocation(oitRenderProgramH, "u_Depth")
538
        mOITRenderTexCorrH = GLES30.glGetUniformLocation(oitRenderProgramH, "u_TexCorr")
539
        mOITRenderSizeH    = GLES30.glGetUniformLocation(oitRenderProgramH, "u_Size")
535
        mOITRenderDepthH   = GLES31.glGetUniformLocation(oitRenderProgramH, "u_Depth")
536
        mOITRenderTexCorrH = GLES31.glGetUniformLocation(oitRenderProgramH, "u_TexCorr")
537
        mOITRenderSizeH    = GLES31.glGetUniformLocation(oitRenderProgramH, "u_Size")
540 538
    }
541 539

  
542 540
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
558 556
        val num = mesh.getNumVertices()
559 557
        val tfo = mesh.tFO
560 558

  
561
        GLES30.glUniform1i(mTransformFeedbackH, 1)
562
        GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfo)
563
        GLES30.glBeginTransformFeedback(GLES30.GL_POINTS)
559
        GLES31.glUniform1i(mTransformFeedbackH, 1)
560
        GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfo)
561
        GLES31.glBeginTransformFeedback(GLES31.GL_POINTS)
564 562
        switchOffDrawing()
565
        GLES30.glDrawArrays(GLES30.GL_POINTS, 0, num)
563
        GLES31.glDrawArrays(GLES31.GL_POINTS, 0, num)
566 564
        restoreDrawing()
567
        GLES30.glEndTransformFeedback()
568
        GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0)
569
        GLES30.glUniform1i(mTransformFeedbackH, 0)
565
        GLES31.glEndTransformFeedback()
566
        GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0)
567
        GLES31.glUniform1i(mTransformFeedbackH, 0)
570 568

  
571 569
        mNormalProgram!!.useProgram()
572
        GLES30.glUniformMatrix4fv(mNormalProjectionH, 1, false, projection, 0)
570
        GLES31.glUniformMatrix4fv(mNormalProjectionH, 1, false, projection, 0)
573 571
        mesh.bindTransformAttribs(mNormalProgram!!)
574
        GLES30.glLineWidth(8.0f)
575
        GLES30.glDrawArrays(GLES30.GL_LINES, 0, 2*num)
572
        GLES31.glLineWidth(8.0f)
573
        GLES31.glDrawArrays(GLES31.GL_LINES, 0, 2*num)
576 574
        mNormalProgram!!.stopUsingProgram()
577 575
    }
578 576

  
......
604 602
        queue.send(0.0f, mFullProgramH, 3)
605 603
        mesh.send(mFullProgramH, 3)
606 604

  
607
        GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfo)
608
        GLES30.glBeginTransformFeedback(GLES30.GL_POINTS)
605
        GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfo)
606
        GLES31.glBeginTransformFeedback(GLES31.GL_POINTS)
609 607
        switchOffDrawing()
610
        GLES30.glDrawArrays(GLES30.GL_POINTS, 0, num)
608
        GLES31.glDrawArrays(GLES31.GL_POINTS, 0, num)
611 609
        restoreDrawing()
612
        GLES30.glEndTransformFeedback()
610
        GLES31.glEndTransformFeedback()
613 611
        mesh.copyTransformToVertex()
614
        GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0)
612
        GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0)
615 613
        mFullProgram!!.stopUsingProgram()
616 614
    }
617 615

  
......
625 623
            val queues = effects.queues
626 624

  
627 625
            compute(queues, currTime, step)
628
            GLES30.glViewport(0, 0, w, h)
626
            GLES31.glViewport(0, 0, w, h)
629 627

  
630 628
            mMainOITProgram!!.useProgram()
631
            GLES30.glUniform1i(mMainOITTextureH, 0)
632
            GLES30.glUniform2ui(mMainOITSizeH, w, h)
633
            GLES30.glUniform1ui(mMainOITNumRecordsH, (mBufferSize*w*h).toInt())
629
            GLES31.glUniform1i(mMainOITTextureH, 0)
630
            GLES31.glUniform2ui(mMainOITSizeH, w, h)
631
            GLES31.glUniform1ui(mMainOITNumRecordsH, (mBufferSize*w*h).toInt())
634 632
            mesh.bindVertexAttribs(mMainOITProgram!!)
635 633
            mesh.send(mMainOITProgramH, 1)
636 634

  
......
640 638
            val projection = surface.mProjectionMatrix
641 639

  
642 640
            send(queues, mMainOITProgramH, distance, mipmap, projection, inflate, 1)
643
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices())
641
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices())
644 642
            if (mesh.showNormals) displayNormals(projection, mesh)
645 643
            mMainOITProgram!!.stopUsingProgram()
646 644
        }
......
655 653
            val w = surface.getWidth()
656 654
            val h = surface.getHeight()
657 655
            compute(queues, currTime, step)
658
            GLES30.glViewport(0, 0, w, h)
656
            GLES31.glViewport(0, 0, w, h)
659 657

  
660 658
            mMainProgram!!.useProgram()
661
            GLES30.glUniform1i(mMainTextureH, 0)
659
            GLES31.glUniform1i(mMainTextureH, 0)
662 660
            mesh.bindVertexAttribs(mMainProgram!!)
663 661
            mesh.send(mMainProgramH, 0)
664 662

  
......
668 666
            val projection = surface.mProjectionMatrix
669 667

  
670 668
            send(queues, mMainProgramH, distance, mipmap, projection, inflate, 0)
671
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices())
669
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices())
672 670
            if (mesh.showNormals) displayNormals(projection, mesh)
673 671
            mMainProgram!!.stopUsingProgram()
674 672
        }
......
683 681
            val h = surface.getHeight()
684 682
            val n = surface.getNear()
685 683
            mBlitProgram!!.useProgram()
686
            GLES30.glViewport(0, 0, w, h)
687
            GLES30.glUniform1i(mBlitTextureH, 0)
688
            GLES30.glUniform1f(mBlitDepthH, 1.0f-n)
689
            GLES30.glVertexAttribPointer(mBlitProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
690
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
684
            GLES31.glViewport(0, 0, w, h)
685
            GLES31.glUniform1i(mBlitTextureH, 0)
686
            GLES31.glUniform1f(mBlitDepthH, 1.0f-n)
687
            GLES31.glVertexAttribPointer(mBlitProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
688
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
691 689
            mBlitProgram!!.stopUsingProgram()
692 690
        }
693 691
    }
......
700 698
            mBlitDepthProgram!!.useProgram()
701 699
            val w = surface.getWidth()
702 700
            val h = surface.getHeight()
703
            GLES30.glViewport(0, 0, w, h)
704
            GLES30.glUniform1i(mBlitDepthTextureH, 0)
705
            GLES30.glUniform1i(mBlitDepthDepthTextureH, 1)
706
            GLES30.glUniform2f(mBlitDepthTexCorrH, corrW, corrH)
707
            GLES30.glVertexAttribPointer(mBlitDepthProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
708
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
701
            GLES31.glViewport(0, 0, w, h)
702
            GLES31.glUniform1i(mBlitDepthTextureH, 0)
703
            GLES31.glUniform1i(mBlitDepthDepthTextureH, 1)
704
            GLES31.glUniform2f(mBlitDepthTexCorrH, corrW, corrH)
705
            GLES31.glVertexAttribPointer(mBlitDepthProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
706
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
709 707
            mBlitDepthProgram!!.stopUsingProgram()
710 708
        }
711 709
    }
......
714 712
    // yes it is safe to be mixing 3.0 and 3.1 like that, senior members of the OpenGL discussions forum assert
715 713
    private fun printPreviousBuffer(): Int
716 714
    {
717
        val atomicBuf = GLES30.glMapBufferRange(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, 4, GLES30.GL_MAP_READ_BIT) as ByteBuffer
715
        val atomicBuf = GLES31.glMapBufferRange(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, 4, GLES31.GL_MAP_READ_BIT) as ByteBuffer
718 716
        val atomicIntBuf = atomicBuf.order(ByteOrder.nativeOrder()).asIntBuffer()
719 717
        val counter = atomicIntBuf[0]
720 718

  
721
        GLES30.glUnmapBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER)
719
        GLES31.glUnmapBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER)
722 720

  
723 721
        return counter
724 722
    }
......
726 724
    ///////////////////////////////////////////////////////////////////////////////////////////////////
727 725
    private fun zeroBuffer()
728 726
    {
729
        val atomicBuf = GLES30.glMapBufferRange(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, 4, GLES30.GL_MAP_WRITE_BIT or GLES30.GL_MAP_INVALIDATE_BUFFER_BIT) as ByteBuffer
727
        val atomicBuf = GLES31.glMapBufferRange(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, 4, GLES31.GL_MAP_WRITE_BIT or GLES31.GL_MAP_INVALIDATE_BUFFER_BIT) as ByteBuffer
730 728
        val atomicIntBuf = atomicBuf.order(ByteOrder.nativeOrder()).asIntBuffer()
731 729
        atomicIntBuf.put(0, 0)
732 730

  
733
        GLES30.glUnmapBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER)
731
        GLES31.glUnmapBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER)
734 732
    }
735 733

  
736 734
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
743 741
        {
744 742
            mAtomicCounter = IntArray(queueSize)
745 743

  
746
            GLES30.glGenBuffers(queueSize, mAtomicCounter, 0)
744
            GLES31.glGenBuffers(queueSize, mAtomicCounter, 0)
747 745

  
748 746
            for (i in 0 until queueSize)
749 747
            {
750
                GLES30.glBindBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER, mAtomicCounter!![i])
751
                GLES30.glBufferData(GLES31.GL_ATOMIC_COUNTER_BUFFER, 4, null, GLES30.GL_DYNAMIC_DRAW)
748
                GLES31.glBindBuffer(GLES31.GL_ATOMIC_COUNTER_BUFFER, mAtomicCounter!![i])
749
                GLES31.glBufferData(GLES31.GL_ATOMIC_COUNTER_BUFFER, 4, null, GLES31.GL_DYNAMIC_DRAW)
752 750
                zeroBuffer()
753 751
            }
754 752
        }
......
757 755
        // about 3%; doing it only once every 5 frames affects speed by less than 1%.
758 756
        if (mCurrBuffer==0)
759 757
        {
760
            GLES30.glBindBufferBase(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, mAtomicCounter!![mCurrBuffer])
758
            GLES31.glBindBufferBase(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, mAtomicCounter!![mCurrBuffer])
761 759
            counter = printPreviousBuffer()
762 760
        }
763 761

  
764 762
        if (++mCurrBuffer>=queueSize) mCurrBuffer = 0
765 763

  
766
        GLES30.glBindBufferBase(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, mAtomicCounter!![mCurrBuffer])
764
        GLES31.glBindBufferBase(GLES31.GL_ATOMIC_COUNTER_BUFFER, 0, mAtomicCounter!![mCurrBuffer])
767 765
        zeroBuffer()
768 766

  
769 767
        return counter
......
800 798

  
801 799
        if (mLinkedListSSBO[0]<0)
802 800
        {
803
            GLES30.glGenBuffers(1, mLinkedListSSBO, 0)
801
            GLES31.glGenBuffers(1, mLinkedListSSBO, 0)
804 802

  
805 803
            val size = (w*h*(3*mBufferSize+1)*4).toInt()
806
            GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0])
807
            GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ or GLES30.GL_DYNAMIC_DRAW)
808
            GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0)
804
            GLES31.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0])
805
            GLES31.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES31.GL_DYNAMIC_READ or GLES31.GL_DYNAMIC_DRAW)
806
            GLES31.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0)
809 807

  
810
            GLES30.glBindBufferBase(GLES31.GL_SHADER_STORAGE_BUFFER, 1, mLinkedListSSBO[0])
808
            GLES31.glBindBufferBase(GLES31.GL_SHADER_STORAGE_BUFFER, 1, mLinkedListSSBO[0])
811 809
        }
812 810

  
813 811
        // See if we have overflown the SSBO in one of the previous frames.
......
818 816
        {
819 817
            mBufferSize *= (overflow+1.0f).toInt().toFloat()
820 818
            val size = (w*h*(3*mBufferSize+1)*4).toInt()
821
            GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0])
822
            GLES30.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES30.GL_DYNAMIC_READ or GLES30.GL_DYNAMIC_DRAW)
823
            GLES30.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0)
819
            GLES31.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, mLinkedListSSBO[0])
820
            GLES31.glBufferData(GLES31.GL_SHADER_STORAGE_BUFFER, size, null, GLES31.GL_DYNAMIC_READ or GLES31.GL_DYNAMIC_DRAW)
821
            GLES31.glBindBuffer(GLES31.GL_SHADER_STORAGE_BUFFER, 0)
824 822
        }
825 823

  
826 824
        mOITClearProgram!!.useProgram()
827
        GLES30.glViewport(0, 0, w, h)
828
        GLES30.glUniform2f(mOITClearTexCorrH, 1.0f, 1.0f) // corrections do not really matter here - only present because of common vertex shader.
829
        GLES30.glUniform1f(mOITClearDepthH, 1.0f) // likewise depth
830
        GLES30.glUniform2ui(mOITClearSizeH, w, h)
831
        GLES30.glVertexAttribPointer(mOITClearProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
832
        GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
825
        GLES31.glViewport(0, 0, w, h)
826
        GLES31.glUniform2f(mOITClearTexCorrH, 1.0f, 1.0f) // corrections do not really matter here - only present because of common vertex shader.
827
        GLES31.glUniform1f(mOITClearDepthH, 1.0f) // likewise depth
828
        GLES31.glUniform2ui(mOITClearSizeH, w, h)
829
        GLES31.glVertexAttribPointer(mOITClearProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
830
        GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
833 831
        mOITClearProgram!!.stopUsingProgram()
834 832
    }
835 833

  
......
843 841
            val h = surface.getHeight()
844 842
            val n = surface.getNear()
845 843
            mOITBuildProgram!!.useProgram()
846
            GLES30.glViewport(0, 0, w, h)
847
            GLES30.glUniform1i(mOITBuildTextureH, 0)
848
            GLES30.glUniform1i(mOITBuildDepthTextureH, 1)
849
            GLES30.glUniform2f(mOITBuildTexCorrH, corrW, corrH)
850
            GLES30.glUniform2ui(mOITBuildSizeH, w, h)
851
            GLES30.glUniform1ui(mOITBuildNumRecordsH, (mBufferSize*w*h).toInt())
852
            GLES30.glUniform1f(mOITBuildDepthH, 1.0f-n)
853
            GLES30.glVertexAttribPointer(mOITBuildProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
854
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
844
            GLES31.glViewport(0, 0, w, h)
845
            GLES31.glUniform1i(mOITBuildTextureH, 0)
846
            GLES31.glUniform1i(mOITBuildDepthTextureH, 1)
847
            GLES31.glUniform2f(mOITBuildTexCorrH, corrW, corrH)
848
            GLES31.glUniform2ui(mOITBuildSizeH, w, h)
849
            GLES31.glUniform1ui(mOITBuildNumRecordsH, (mBufferSize*w*h).toInt())
850
            GLES31.glUniform1f(mOITBuildDepthH, 1.0f-n)
851
            GLES31.glVertexAttribPointer(mOITBuildProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
852
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
855 853
            mOITBuildProgram!!.stopUsingProgram()
856 854
        }
857 855
    }
......
866 864
            val h = surface.getHeight()
867 865
            val n = surface.getNear()
868 866
            mOITCollapseProgram!!.useProgram()
869
            GLES30.glViewport(0, 0, w, h)
870
            GLES30.glUniform1i(mOITCollapseDepthTextureH, 1)
871
            GLES30.glUniform2f(mOITCollapseTexCorrH, corrW, corrH)
872
            GLES30.glUniform2ui(mOITCollapseSizeH, w, h)
873
            GLES30.glUniform1f(mOITCollapseDepthH, 1.0f-n)
874
            GLES30.glVertexAttribPointer(mOITCollapseProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
875
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
867
            GLES31.glViewport(0, 0, w, h)
868
            GLES31.glUniform1i(mOITCollapseDepthTextureH, 1)
869
            GLES31.glUniform2f(mOITCollapseTexCorrH, corrW, corrH)
870
            GLES31.glUniform2ui(mOITCollapseSizeH, w, h)
871
            GLES31.glUniform1f(mOITCollapseDepthH, 1.0f-n)
872
            GLES31.glVertexAttribPointer(mOITCollapseProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
873
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
876 874
            mOITCollapseProgram!!.stopUsingProgram()
877 875
        }
878 876
    }
......
887 885
            val h = surface.getHeight()
888 886
            val n = surface.getNear()
889 887
            mOITRenderProgram!!.useProgram()
890
            GLES30.glViewport(0, 0, w, h)
891
            GLES30.glUniform2f(mOITRenderTexCorrH, corrW, corrH)
892
            GLES30.glUniform2ui(mOITRenderSizeH, w, h)
893
            GLES30.glUniform1f(mOITRenderDepthH, 1.0f-n)
894
            GLES30.glVertexAttribPointer(mOITRenderProgram!!.mAttribute!![0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions)
895
            GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4)
888
            GLES31.glViewport(0, 0, w, h)
889
            GLES31.glUniform2f(mOITRenderTexCorrH, corrW, corrH)
890
            GLES31.glUniform2ui(mOITRenderSizeH, w, h)
891
            GLES31.glUniform1f(mOITRenderDepthH, 1.0f-n)
892
            GLES31.glVertexAttribPointer(mOITRenderProgram!!.mAttribute!![0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions)
893
            GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4)
896 894
            mOITRenderProgram!!.stopUsingProgram()
897 895
        }
898 896
    }
......
927 925
    // PowerVR GE8100 / GE8300 compiler fails to compile OIT programs.
928 926
    private fun detectBuggyDriversAndSetQueueSize(queueSize: Int)
929 927
    {
930
        driverVendor   = GLES30.glGetString(GLES30.GL_VENDOR)
931
        driverVersion  = GLES30.glGetString(GLES30.GL_VERSION)
932
        driverRenderer = GLES30.glGetString(GLES30.GL_RENDERER)
928
        driverVendor   = GLES31.glGetString(GLES31.GL_VENDOR)
929
        driverVersion  = GLES31.glGetString(GLES31.GL_VERSION)
930
        driverRenderer = GLES31.glGetString(GLES31.GL_RENDERER)
933 931

  
934 932
        DistortedLibrary.queueSize = 1
935 933
        mFastCompilationTF = true
......
957 955
            if ( driverRenderer!!.contains("GE8") )
958 956
            {
959 957
                mUser.logMessage("You are running this on a PowerVR GE8XXX.\nDue to a buggy compiler OIT rendering will not work")
960
                mUser.logMessage("GLSL Version "+GLES30.glGetString(GLES31.GL_SHADING_LANGUAGE_VERSION))
958
                mUser.logMessage("GLSL Version "+GLES31.glGetString(GLES31.GL_SHADING_LANGUAGE_VERSION))
961 959
            }
962 960
        }
963 961
        else if (driverVendor!=null && driverVendor!!.contains("Qualcomm"))
......
983 981
        {
984 982
            val major = IntArray(1)
985 983
            val minor = IntArray(1)
986
            GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, major, 0)
987
            GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, minor, 0)
984
            GLES31.glGetIntegerv(GLES31.GL_MAJOR_VERSION, major, 0)
985
            GLES31.glGetIntegerv(GLES31.GL_MINOR_VERSION, minor, 0)
988 986
            return major[0]*100+minor[0]*10
989 987
        }
990 988

  
......
1023 1021
        }
1024 1022

  
1025 1023
        val tmp = IntArray(1)
1026
        GLES30.glGetIntegerv(GLES30.GL_MAX_TEXTURE_SIZE, tmp, 0)
1024
        GLES31.glGetIntegerv(GLES31.GL_MAX_TEXTURE_SIZE, tmp, 0)
1027 1025
        maxTextureSize = tmp[0]
1028
        GLES30.glGetIntegerv(GLES30.GL_MAX_VERTEX_UNIFORM_VECTORS, tmp, 0)
1026
        GLES31.glGetIntegerv(GLES31.GL_MAX_VERTEX_UNIFORM_VECTORS, tmp, 0)
1029 1027
        maxVertexUniforms = tmp[0]
1030
        GLES30.glGetIntegerv(GLES30.GL_MAX_FRAGMENT_UNIFORM_VECTORS, tmp, 0)
1028
        GLES31.glGetIntegerv(GLES31.GL_MAX_FRAGMENT_UNIFORM_VECTORS, tmp, 0)
1031 1029
        maxFragmentUniforms = tmp[0]
1032 1030

  
1033 1031
        mUser.logMessage("Using OpenGL ES $major.$minor texSize=$maxTextureSize maxVerUniforms: $maxVertexUniforms maxFraUniforms: $maxFragmentUniforms")
......
1079 1077
    {
1080 1078
        if (on)
1081 1079
        {
1082
            GLES30.glEnable(GLES30.GL_CULL_FACE)
1083
            GLES30.glCullFace(GLES30.GL_FRONT)
1080
            GLES31.glEnable(GLES31.GL_CULL_FACE)
1081
            GLES31.glCullFace(GLES31.GL_FRONT)
1084 1082
        }
1085 1083
        else
1086 1084
        {
1087
            GLES30.glDisable(GLES30.GL_CULL_FACE)
1085
            GLES31.glDisable(GLES31.GL_CULL_FACE)
1088 1086
        }
1089 1087
    }
1090 1088

  
src/main/java/org/distorted/library/main/DistortedNode.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
22
import android.opengl.GLES31
23 23
import org.distorted.library.main.InternalNodeData.Companion.returnData
24 24
import org.distorted.library.mesh.MeshBase
25 25

  
......
165 165
        if( setAsInput() )
166 166
        {
167 167
            mState.apply()
168
            GLES30.glDisable(GLES30.GL_BLEND)
168
            GLES31.glDisable(GLES31.GL_BLEND)
169 169
            if (mLastTime==0L) mLastTime = currTime
170 170
            DistortedLibrary.drawPriv(mEffects, mMesh, surface, currTime, (currTime-mLastTime))
171 171
            mLastTime = currTime
172
            GLES30.glEnable(GLES30.GL_BLEND)
172
            GLES31.glEnable(GLES31.GL_BLEND)
173 173
            return 1
174 174
        }
175 175

  
src/main/java/org/distorted/library/main/DistortedScreen.kt
22 22
import android.graphics.Bitmap
23 23
import android.graphics.Canvas
24 24
import android.graphics.Paint
25
import android.opengl.GLES30
25
import android.opengl.GLES31
26 26
import org.distorted.library.effect.MatrixEffectMove
27 27
import org.distorted.library.effect.MatrixEffectScale
28 28
import org.distorted.library.mesh.MeshQuad
......
171 171

  
172 172
        val numrender = super.render(time, mCurRenderedFBO)
173 173

  
174
        GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
174
        GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
175 175

  
176 176
        // workaround for the Mali issues: blit the framebuffer we have computed DistortedLibrary.FBO_QUEUE_SIZE
177 177
        // frames ago. Looks like FBO_QUEUE_SIZE=2 solves the issue already but I decided to play it safe and
......
180 180
        // on speed. Maybe a slight positive effect if any!
181 181
        setAsInput(mToBeBlittedFBO, 0)
182 182

  
183
        GLES30.glColorMask(true, true, true, true)
184
        GLES30.glDepthMask(false)
185
        GLES30.glDisable(GLES30.GL_STENCIL_TEST)
186
        GLES30.glDisable(GLES30.GL_DEPTH_TEST)
187
        GLES30.glDisable(GLES30.GL_BLEND)
183
        GLES31.glColorMask(true, true, true, true)
184
        GLES31.glDepthMask(false)
185
        GLES31.glDisable(GLES31.GL_STENCIL_TEST)
186
        GLES31.glDisable(GLES31.GL_DEPTH_TEST)
187
        GLES31.glDisable(GLES31.GL_BLEND)
188 188

  
189 189
        DistortedLibrary.blitPriv(this)
190 190

  
......
208 208
            mToBeBlittedFBO = 0
209 209
        }
210 210
/*
211
    int err = GLES30.glGetError();
211
    int err = GLES31.glGetError();
212 212

  
213
    if( err!=GLES30.GL_NO_ERROR )
213
    if( err!=GLES31.GL_NO_ERROR )
214 214
      {
215 215
      DistortedLibrary.logMessage("DistortedScreen: OpenGL error "+err);
216 216
      }
src/main/java/org/distorted/library/main/DistortedTexture.kt
23 23
import android.graphics.Canvas
24 24
import android.graphics.Matrix
25 25
import android.graphics.Paint
26
import android.opengl.GLES30
26
import android.opengl.GLES31
27 27
import android.opengl.GLUtils
28 28

  
29 29
///////////////////////////////////////////////////////////////////////////////////////////////////
......
67 67
            if (mColorCreated==NOT_CREATED_YET)
68 68
            {
69 69
                mColorCreated = CREATED
70
                GLES30.glGenTextures(1, mColorH, 0)
70
                GLES31.glGenTextures(1, mColorH, 0)
71 71
            }
72 72

  
73
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, mColorH!![0])
74
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR)
75
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR)
76
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE)
77
            GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE)
78
            GLUtils.texImage2D(GLES30.GL_TEXTURE_2D, 0, if (mBitmapInverted) mBmp else flipBitmap(mBmp!!), 0)
79
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
73
            GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, mColorH!![0])
74
            GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_LINEAR)
75
            GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_LINEAR)
76
            GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_S, GLES31.GL_CLAMP_TO_EDGE)
77
            GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_WRAP_T, GLES31.GL_CLAMP_TO_EDGE)
78
            GLUtils.texImage2D(GLES31.GL_TEXTURE_2D, 0, if (mBitmapInverted) mBmp else flipBitmap(mBmp!!), 0)
79
            GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
80 80

  
81 81
            mBmp = null
82 82
        }
......
88 88
    {
89 89
        if (mColorH!![0]>0)
90 90
        {
91
            GLES30.glDeleteTextures(1, mColorH, 0)
91
            GLES31.glDeleteTextures(1, mColorH, 0)
92 92
            mColorH!![0] = 0
93 93
            mColorCreated = NOT_CREATED_YET
94 94
        }
src/main/java/org/distorted/library/main/InternalBuffer.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
22
import android.opengl.GLES31
23 23

  
24 24
import java.nio.Buffer
25 25
import java.nio.ByteBuffer
......
55 55
    constructor() : super(TYPE_USER, STORAGE_PRIVATE)
56 56
    {
57 57
        mIndex  = IntArray(1)
58
        mTarget = GLES30.GL_UNIFORM_BUFFER
59
        mUsage  = GLES30.GL_STATIC_DRAW
58
        mTarget = GLES31.GL_UNIFORM_BUFFER
59
        mUsage  = GLES31.GL_STATIC_DRAW
60 60
        mBuffer = null
61 61
        mSize   = 0
62 62
        mStatus = RECREATE
......
92 92
                mBuffer = null
93 93
            }
94 94

  
95
            GLES30.glGenBuffers(1, mIndex, 0)
96
            GLES30.glBindBuffer(mTarget, mIndex[0])
97
            GLES30.glBufferData(mTarget, mSize, mBuffer, mUsage)
98
            GLES30.glBindBuffer(mTarget, 0)
95
            GLES31.glGenBuffers(1, mIndex, 0)
96
            GLES31.glBindBuffer(mTarget, mIndex[0])
97
            GLES31.glBufferData(mTarget, mSize, mBuffer, mUsage)
98
            GLES31.glBindBuffer(mTarget, 0)
99 99

  
100 100
            markWasCreatedImmediately()
101 101
        }
......
128 128
                mBuffer = null
129 129
            }
130 130

  
131
            GLES30.glGenBuffers(1, mIndex, 0)
132
            GLES30.glBindBuffer(mTarget, mIndex[0])
133
            GLES30.glBufferData(mTarget, mSize, mBuffer, mUsage)
134
            GLES30.glBindBuffer(mTarget, 0)
131
            GLES31.glGenBuffers(1, mIndex, 0)
132
            GLES31.glBindBuffer(mTarget, mIndex[0])
133
            GLES31.glBufferData(mTarget, mSize, mBuffer, mUsage)
134
            GLES31.glBindBuffer(mTarget, 0)
135 135

  
136 136
            markWasCreatedImmediately()
137 137
        }
......
151 151
    {
152 152
        (mBuffer as FloatBuffer).put(buffer).position(0)
153 153

  
154
        GLES30.glBindBuffer(mTarget, mIndex[0])
155
        GLES30.glBufferData(mTarget, mSize, mBuffer, mUsage)
156
        GLES30.glBindBuffer(mTarget, 0)
154
        GLES31.glBindBuffer(mTarget, mIndex[0])
155
        GLES31.glBufferData(mTarget, mSize, mBuffer, mUsage)
156
        GLES31.glBindBuffer(mTarget, 0)
157 157

  
158 158
        mStatus = mStatus and (UPDATE.inv())
159 159
    }
......
164 164
    {
165 165
        (mBuffer as IntBuffer).put(buffer).position(0)
166 166

  
167
        GLES30.glBindBuffer(mTarget, mIndex[0])
168
        GLES30.glBufferData(mTarget, mSize, mBuffer, mUsage)
169
        GLES30.glBindBuffer(mTarget, 0)
167
        GLES31.glBindBuffer(mTarget, mIndex[0])
168
        GLES31.glBufferData(mTarget, mSize, mBuffer, mUsage)
169
        GLES31.glBindBuffer(mTarget, 0)
170 170

  
171 171
        mStatus = mStatus and (UPDATE.inv())
172 172
    }
......
190 190
    // must be called from a thread holding OpenGL Context
191 191
    override fun delete()
192 192
    {
193
        GLES30.glDeleteBuffers(1, mIndex, 0)
193
        GLES31.glDeleteBuffers(1, mIndex, 0)
194 194
        mStatus = mStatus or RECREATE
195 195
        removeFromDone()
196 196
    }
src/main/java/org/distorted/library/main/InternalOutputSurface.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
23 22
import android.opengl.GLES31
24 23
import org.distorted.library.effect.EffectQuality
25 24
import org.distorted.library.effect.EffectQuality.Companion.getMipmap
......
102 101
            InternalStackFrameList.toDo() // create the FBOs immediately. This is safe as we must be holding the OpenGL context now.
103 102

  
104 103
            InternalRenderState.colorDepthStencilOn()
105
            GLES30.glClearColor(CLEAR_R, CLEAR_G, CLEAR_B, CLEAR_A)
106
            GLES30.glClearDepthf(CLEAR_D)
107
            GLES30.glClearStencil(CLEAR_S)
104
            GLES31.glClearColor(CLEAR_R, CLEAR_G, CLEAR_B, CLEAR_A)
105
            GLES31.glClearDepthf(CLEAR_D)
106
            GLES31.glClearStencil(CLEAR_S)
108 107

  
109 108
            val colorH = mBuffer[quality]!!.mColorH!!
110 109

  
111 110
            for (k in 0 until queueSize)
112 111
            {
113
                GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mBuffer[quality]!!.mFBOH[k])
114
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*k+1], 0)
115
                GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT or GLES30.GL_STENCIL_BUFFER_BIT)
116
                GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*k], 0)
117
                GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
112
                GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mBuffer[quality]!!.mFBOH[k])
113
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*k+1], 0)
114
                GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT or GLES31.GL_DEPTH_BUFFER_BIT or GLES31.GL_STENCIL_BUFFER_BIT)
115
                GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*k], 0)
116
                GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT)
118 117
            }
119 118

  
120 119
            InternalRenderState.colorDepthStencilRestore()
121 120

  
122
            GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
121
            GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
123 122
        }
124 123

  
125 124
        ///////////////////////////////////////////////////////////////////////////////////////////////////
......
154 153

  
155 154
        mDepthStencilCreated = (if (mDepthStencil==NO_DEPTH_NO_STENCIL) DONT_CREATE else NOT_CREATED_YET)
156 155

  
157
        mClear = GLES30.GL_DEPTH_BUFFER_BIT or GLES30.GL_COLOR_BUFFER_BIT
156
        mClear = GLES31.GL_DEPTH_BUFFER_BIT or GLES31.GL_COLOR_BUFFER_BIT
158 157

  
159 158
        mChildren = InternalChildrenList(this)
160 159

  
......
235 234
    {
236 235
        val colorH = buffer.mColorH!!
237 236

  
238
        GLES30.glViewport(0, 0, mWidth, mHeight)
237
        GLES31.glViewport(0, 0, mWidth, mHeight)
239 238
        setAsOutput(currTime)
240
        GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
241
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, colorH[2*fbo])
242
        GLES30.glActiveTexture(GLES30.GL_TEXTURE1)
243
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mDepthStencilH!![fbo])
239
        GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
240
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, colorH[2*fbo])
241
        GLES31.glActiveTexture(GLES31.GL_TEXTURE1)
242
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, buffer.mDepthStencilH!![fbo])
244 243

  
245
        GLES30.glDisable(GLES30.GL_STENCIL_TEST)
246
        GLES30.glStencilMask(0x00)
244
        GLES31.glDisable(GLES31.GL_STENCIL_TEST)
245
        GLES31.glStencilMask(0x00)
247 246

  
248 247
        DistortedLibrary.blitDepthPriv(this, buffer.widthCorrection, buffer.heightCorrection)
249
        GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
250
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
251
        GLES30.glActiveTexture(GLES30.GL_TEXTURE1)
252
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
248
        GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
249
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
250
        GLES31.glActiveTexture(GLES31.GL_TEXTURE1)
251
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
253 252

  
254 253
        // clear buffers
255
        GLES30.glStencilMask(0xff)
256
        GLES30.glDepthMask(true)
257
        GLES30.glColorMask(true, true, true, true)
258
        GLES30.glClearColor(buffer.mClearR, buffer.mClearG, buffer.mClearB, buffer.mClearA)
259
        GLES30.glClearDepthf(buffer.mClearDepth)
260
        GLES30.glClearStencil(buffer.mClearStencil)
254
        GLES31.glStencilMask(0xff)
255
        GLES31.glDepthMask(true)
256
        GLES31.glColorMask(true, true, true, true)
257
        GLES31.glClearColor(buffer.mClearR, buffer.mClearG, buffer.mClearB, buffer.mClearA)
258
        GLES31.glClearDepthf(buffer.mClearDepth)
259
        GLES31.glClearStencil(buffer.mClearStencil)
261 260

  
262 261
        buffer.setAsOutput()
263
        GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*fbo+1], 0)
264
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT or GLES30.GL_STENCIL_BUFFER_BIT)
265
        GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*fbo], 0)
266
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
262
        GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*fbo+1], 0)
263
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT or GLES31.GL_DEPTH_BUFFER_BIT or GLES31.GL_STENCIL_BUFFER_BIT)
264
        GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*fbo], 0)
265
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT)
267 266

  
268 267
        return 1
269 268
    }
......
271 270
    ///////////////////////////////////////////////////////////////////////////////////////////////////
272 271
    private fun oitBuild(time: Long, buffer: InternalOutputSurface, fbo: Int): Int
273 272
    {
274
        GLES30.glViewport(0, 0, mWidth, mHeight)
273
        GLES31.glViewport(0, 0, mWidth, mHeight)
275 274
        setAsOutput(time)
276
        GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
277
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mColorH!![2*fbo])
278
        GLES30.glActiveTexture(GLES30.GL_TEXTURE1)
279
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, buffer.mDepthStencilH!![fbo])
275
        GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
276
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, buffer.mColorH!![2*fbo])
277
        GLES31.glActiveTexture(GLES31.GL_TEXTURE1)
278
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, buffer.mDepthStencilH!![fbo])
280 279

  
281 280
        InternalRenderState.colorDepthStencilOn()
282 281
        InternalRenderState.enableDepthTest()
283 282

  
284 283
        DistortedLibrary.oitBuild(this, buffer.widthCorrection, buffer.heightCorrection)
285
        GLES30.glActiveTexture(GLES30.GL_TEXTURE0)
286
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
287
        GLES30.glActiveTexture(GLES30.GL_TEXTURE1)
288
        GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
284
        GLES31.glActiveTexture(GLES31.GL_TEXTURE0)
285
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
286
        GLES31.glActiveTexture(GLES31.GL_TEXTURE1)
287
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
289 288

  
290 289
        InternalRenderState.colorDepthStencilRestore()
291 290
        InternalRenderState.restoreDepthTest()
......
305 304
        // Otherwise there's no point (in fact we then would create a feedback loop!)
306 305
        if( depthStencil[fbo]!=0 )
307 306
        {
308
            GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
309
            GLES30.glActiveTexture(GLES30.GL_TEXTURE1)
310
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, depthStencil[fbo])
307
            GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, 0)
308
            GLES31.glActiveTexture(GLES31.GL_TEXTURE1)
309
            GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, depthStencil[fbo])
311 310
            InternalRenderState.switchOffColorDepthStencil()
312 311
            DistortedLibrary.oitCollapse(this, corrW, corrH)
313
            GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, 0)
312
            GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0)
314 313
        }
315 314

  
316 315
        setAsOutput(currTime)
......
325 324
    private fun clear()
326 325
    {
327 326
        InternalRenderState.colorDepthStencilOn()
328
        GLES30.glClearColor(mClearR, mClearG, mClearB, mClearA)
329
        GLES30.glClearDepthf(mClearDepth)
330
        GLES30.glClearStencil(mClearStencil)
331
        GLES30.glClear(mClear)
327
        GLES31.glClearColor(mClearR, mClearG, mClearB, mClearA)
328
        GLES31.glClearDepthf(mClearDepth)
329
        GLES31.glClearStencil(mClearStencil)
330
        GLES31.glClear(mClear)
332 331
        InternalRenderState.colorDepthStencilRestore()
333 332
    }
334 333

  
......
519 518

  
520 519
        InternalRenderState.colorDepthStencilOn()
521 520

  
522
        GLES30.glClearColor(mClearR, mClearG, mClearB, mClearA)
523
        GLES30.glClearDepthf(mClearDepth)
524
        GLES30.glClearStencil(mClearStencil)
521
        GLES31.glClearColor(mClearR, mClearG, mClearB, mClearA)
522
        GLES31.glClearDepthf(mClearDepth)
523
        GLES31.glClearStencil(mClearStencil)
525 524

  
526
        GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[fbo])
527
        GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*fbo+1], 0)
528
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT or GLES30.GL_STENCIL_BUFFER_BIT)
529
        GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, colorH[2*fbo], 0)
530
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
525
        GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[fbo])
526
        GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*fbo+1], 0)
527
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT or GLES31.GL_DEPTH_BUFFER_BIT or GLES31.GL_STENCIL_BUFFER_BIT)
528
        GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_COLOR_ATTACHMENT0, GLES31.GL_TEXTURE_2D, colorH[2*fbo], 0)
529
        GLES31.glClear(GLES31.GL_COLOR_BUFFER_BIT)
531 530

  
532 531
        InternalRenderState.colorDepthStencilRestore()
533 532
    }
......
535 534
    ///////////////////////////////////////////////////////////////////////////////////////////////////
536 535
    fun setAsOutput(time: Long)
537 536
    {
538
        GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[mCurrFBO])
537
        GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[mCurrFBO])
539 538

  
540 539
        if (mTime[mCurrFBO]!=time)
541 540
        {
......
616 615
     */
617 616
    fun setAsOutput()
618 617
    {
619
        GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, mFBOH[mCurrFBO])
618
        GLES31.glBindFramebuffer(GLES31.GL_FRAMEBUFFER, mFBOH[mCurrFBO])
620 619
    }
621 620

  
622 621
    ///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/library/main/InternalRenderState.kt
19 19
///////////////////////////////////////////////////////////////////////////////////////////////////
20 20
package org.distorted.library.main
21 21

  
22
import android.opengl.GLES30
22
import android.opengl.GLES31
23 23

  
24 24
///////////////////////////////////////////////////////////////////////////////////////////////////
25 25
/**
......
70 70

  
71 71
        mState.depthTest = 1
72 72
        mState.depthMask = 1
73
        mState.depthFunc = GLES30.GL_LEQUAL
73
        mState.depthFunc = GLES31.GL_LEQUAL
74 74

  
75 75
        mState.blend = 1
76
        mState.blendSrc = GLES30.GL_SRC_ALPHA
77
        mState.blendDst = GLES30.GL_ONE_MINUS_SRC_ALPHA
76
        mState.blendSrc = GLES31.GL_SRC_ALPHA
77
        mState.blendDst = GLES31.GL_ONE_MINUS_SRC_ALPHA
78 78

  
79 79
        mState.stencilTest = 0
80 80
        mState.stencilMask = STENCIL_MASK
81
        mState.stencilFuncFunc = GLES30.GL_NEVER
81
        mState.stencilFuncFunc = GLES31.GL_NEVER
82 82
        mState.stencilFuncRef = 0
83 83
        mState.stencilFuncMask = STENCIL_MASK
84
        mState.stencilOpSfail = GLES30.GL_KEEP
85
        mState.stencilOpDpfail = GLES30.GL_KEEP
86
        mState.stencilOpDppass = GLES30.GL_KEEP
84
        mState.stencilOpSfail = GLES31.GL_KEEP
85
        mState.stencilOpDpfail = GLES31.GL_KEEP
86
        mState.stencilOpDppass = GLES31.GL_KEEP
87 87

  
88 88
        mClear = 0
89 89
    }
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff