I want to display the texture in openGL-ES 1, but the code below just displays a black screen
class MyGLRenderer(val context: Context) : GLSurfaceView.Renderer {
private var textureId = 0
private lateinit var bitmap: Bitmap
override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.bumpy_bricks_public_domain)
val textures = IntArray(1)
gl?.glGenTextures(1,textures,0)
textureId = textures[0]
gl?.glClearColor(0.0f,0.0f,0.0f,1.0f)
gl?.glBindTexture(GL10.GL_TEXTURE_2D,textureId)
gl?.glEnableClientState(GL10.GL_VERTEX_ARRAY)
gl?.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY)
gl?.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST.toFloat())
gl?.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST.toFloat())
gl?.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S,GL10.GL_CLAMP_TO_EDGE.toFloat())
gl?.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T,GL10.GL_CLAMP_TO_EDGE.toFloat())
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0)
bitmap.recycle()
}
override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
}
override fun onDrawFrame(gl: GL10?) {
gl?.glClear(GL10.GL_COLOR_BUFFER_BIT)
gl?.glEnable(GL10.GL_TEXTURE_2D)
gl?.glBindTexture(GL10.GL_TEXTURE_2D, textureId)
gl?.glTexCoordPointer(2,GL10.GL_FLOAT,0,textureBuffer)
gl?.glVertexPointer(3,GL10.GL_FLOAT,0,vertexBuffer)
gl?.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4)
gl?.glDisable(GL10.GL_TEXTURE_2D)
}
companion object{
private val vertexData =
floatArrayOf(
-1.0f,-1.0f,0.0f,
1.0f,-1.0f,0.0f,
-1.0f,1.0f,0.0f,
1.0f,1.0f,0.0f
)
private val textureData =
floatArrayOf(
0.0f,1.0f,
1.0f,1.0f,
0.0f,0.0f,
1.0f,0.0f,
)
private val vertexBuffer = ByteBuffer.allocateDirect(vertexData.size*4).order(ByteOrder.nativeOrder()).asFloatBuffer()
private val textureBuffer = ByteBuffer.allocateDirect(textureData.size*4).order(ByteOrder.nativeOrder()).asFloatBuffer()
}
init {
vertexBuffer.put(vertexData).position(0)
textureBuffer.put(textureData).position(0)
}
}
This is my renderer class And this is my activity class, where do I initialize my renderer class
class MainActivity : AppCompatActivity() {
private lateinit var glSurfaceView:GLSurfaceView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
glSurfaceView = GLSurfaceView(this)
glSurfaceView.setRenderer(MyGLRenderer(applicationContext))
setContentView(glSurfaceView)
}
}
I forgot to specify the use of openGL in the manifest, but after I specified, nothing changed.
<uses-feature android:glEsVersion="0x00010000" android:required="true"/>
I can't figure out where the error is in this code.
I would also like to know the best way to display textures in OpenGl-ES 1