当前位置: 首页 > article >正文

Android OpenGL ES详解——绘制圆角矩形

1、绘制矩形

代码如下:

renderer类:

package com.example.roundrect

import android.content.Context
import android.opengl.GLES30
import android.opengl.GLSurfaceView.Renderer
import com.opengllib.data.VertexArray
import com.opengllib.programs.ShaderProgram
import javax.microedition.khronos.egl.EGLConfig
import javax.microedition.khronos.opengles.GL10

class RoundRectRenderer(context: Context) : Renderer {
    private var mVertices = floatArrayOf(
        -0.5f, -0.5f,
        0.5f, 0.5f,
        -0.5f, 0.5f,
        -0.5f, -0.5f,
        0.5f, -0.5f,
        0.5f, 0.5f,
    )
    private var mShaderProgram: ShaderProgram? = null
    private var mContext = context
    private var mVertexArray: VertexArray? = null

    override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        GLES30.glClearColor(0.6f, 0.7f, 0.8f, 1.0f)
        mVertexArray = VertexArray(mVertices)

        mShaderProgram = ShaderProgram(
            mContext,
            R.raw.roundrect_vertex_shader,
            R.raw.roundrect_fragment_shader
        )
        mShaderProgram?.useProgram()
        mVertexArray?.setVertexAttribPointer(
            0,
            mShaderProgram?.getPositionAttributeLocation()!!,
            2,
            0
        )

    }

    override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
        GLES30.glViewport(0, 0, width, height)
    }

    override fun onDrawFrame(gl: GL10?) {
        GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)
        GLES30.glDrawArrays(GLES30.GL_TRIANGLES,0 ,mVertices.size / 2)
    }
}

顶点着色器文件roundrect_vertex_shader.glsl代码如下:

attribute vec4 a_Position;

void main()
{
    gl_Position = a_Position;
}

片元着色器文件roundrect_fragment_shader.glsl代码如下:

precision mediump float;

void main()
{
	gl_FragColor = vec4(0.8, 0.5, 0.3, 1.0);
}

2、绘制圆形

3、绘制圆角矩形

参考文章

使用OpenGL实现圆角效果-腾讯云开发者社区-腾讯云


http://www.kler.cn/a/410935.html

相关文章:

  • CGAL CGAL::Polygon_mesh_processing::self_intersections解析
  • AIGC与SEO:如何提升网站流量
  • 从零开始理解JVM:对象的生命周期之对象销毁(垃圾回收)
  • python学习笔记(12)算法(5)迭代与递归
  • 搜维尔科技:TechViz中的手指追踪:触摸并与虚拟物体互动
  • 排序算法2
  • 基于SSM的宠物领养平台
  • 【前端学习笔记】AJAX、axios、fetch、跨域
  • c++中数组的特点,vector容器的实现(增删改查各个接口的实现)
  • 【DVWA】File Inclusion文件包含实战
  • 快速理解微服务中Sentinel怎么实现限流
  • elasticsearch的索引管理
  • 深度学习基础01_深度学习概述参数初始化激活函数
  • mvn-mac操作小记
  • AIGC-----AIGC在虚拟现实中的应用前景
  • 七天掌握SQL--->第四天:事务处理与并发控制
  • shell编程3,参数传递+算术运算
  • 【论文复现】半监督学习与数据增强
  • 【Axure高保真原型】天气模板
  • Apache Maven Assembly 插件简介