Cang_Wang
百度YY 高级开发工程师,擅长于客户端Android开发,以及移动端端智能开发,对stable Diffusion开发和实践有丰厚的经验
展开
-
[NDK]从Opengles到Vulkan-进阶篇(2)-离屏渲染
这里离屏渲染当然是使用不在屏幕上进行渲染。原创 2023-08-16 10:08:19 · 383 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-进阶篇(1)-保存图片
这里是最基础的获取帧内字节的数据,指定读取字节为前台或后台(非必须),需要先进行字节对齐(一般客户端是必须的),然后再通过坐标位置来读取指定读取的gpu内存位置。以上四种方式,glReadPixels 使用最方便,HardwareBuffer 实现最复杂,实现复杂度:HardwareBuffer > PBO > ImageReader > glReadPixels。这里对pbo进行初始化,需要字节对齐,不然会截出来会有黑边或者错乱,这里特别需要知道的是*4是因为RGBA。原创 2023-08-15 09:43:12 · 173 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(10)-混合
混合其实,可以想象为当多个纹理叠加的时候,纹理都是方形图片,深入的纹理叠加肯定是有透明度的叠加,这个时候就需要开启混合,并对透明度和颜色叠加做调整。这里说的颜色混合是在两个不同的shader处理间的混合,如果同一个shader,可以通过fragment shader来做计算处理。颜色混合的应用:混合可以应用在原有的画面的基础上,添加头像,添加其他遮罩贴图这些内容时使用。(Kr, Kg, Kb, Ka)代表缓冲区中各个通道R, G, B, A的最大值。需要创建纹理混合的机制,然后通过渲染管线写入。原创 2023-08-15 09:41:56 · 128 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(9)-视口相关
这里需要注意的是,如果图片大小实际被屏幕大小要大的情况下,需要将交换链 帧缓冲Framebuffer以及Viewport都设置为图片的大小,然后会出现渲染错位异常的情况。3.视口:即窗口还可以分为若干个区域,称为视口,窗口中用来绘图的区域。在SwapChain交换链上需要设置交换链的窗口,以及显示窗口的大小。EGL设置的是EGLDisplay窗口EGLSurface的大小。4.裁剪窗口:即在视口中让你看到的图形,即显示出来的那部分。当然如果你是采集手机屏幕大小,就只要设置屏幕大小就好了。原创 2023-08-15 09:41:13 · 121 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(8)-shader参数写入
这里是shader字符串,需要注意的是binding对应的信息,binding = 0,绑定的是UniformBufferObject数据体。对Vulkan来说shader参数绑定的步骤,比Opengles当中复杂很多,需要绑定参数,对参数进行cpu到gpu中的传输。除了绑定更新集的方法外,Vulkan还提供了PushConstant的方式,可以通过声明push_constant对象的方式。这里分别是上面说的binding数据对应的ubo数据体对象,以及纹理贴图的数据,通过描述集来进行更新。原创 2023-08-15 09:40:29 · 136 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(7)-创建纹理容器
这里采样器的设置和上面说的Opengles有点类似,加入了多重采样maxAnisotropy 的设置, 和EGL环境的MSAA抗锯齿是一致的,坐标系数值的设置等设置。GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。在fragment shader里面定义加载纹理的uTexture,这里如果加载shader在第4节有介绍,可以重新翻阅。这里stbi_load是读取图片的api,这里特别注意最后一个参数是解析图片的通道数。原创 2023-08-15 09:38:14 · 116 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(6)-顶点索引
这里第一个参数需要填入顶点连接方式, 需要渲染的图元类型,包括 GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN ,GL_TRIANGLES。在创建渲染管线的时候,需要对顶点buffers和顶点索引buffers,通过渲染管线命令进行提交,进行绑定。这一节顶点索引比较简单,只是指定三角形的排列方向和索引,是上一节顶点着色器的补充。这里需要先将顶点索引的数据从cpu复制到gpu缓冲当中。原创 2023-08-15 09:35:21 · 92 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(5)-顶点着色器
这个方案也是在上面正常渲染使用的方案。图片坐标系的原点在图片左上角,x轴向右,y轴向下,x和y的取值范围都是0到对应的图片宽高。第一个方案在shader中翻转,我们可以考虑在顶点Shader里面进行翻转,在顶点Shader里面,我们只需要对顶点输入的时候做一次转换,将顶点坐标以及附带的矢量(法线之类)一起翻转,然后将包装之后的属性提供出来使用。是因为在程序中查看解码后的图片,实际上还是在图片坐标系下显示的,图片坐标系和纹理坐标系y是相反的,当你把图片加载到纹理中的那一刻,图片在纹理坐标系下就已经倒了。原创 2023-08-15 09:34:37 · 107 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(4)-图形管线
渲染管线上的图的每个步骤都能够通过Vulkan来做管理。Vulkan能够更加深入的管理整个渲染管线。以下是Vulkan创建渲染管线,需要纹理附着的描述,纹理索引,管线描述,管线结构体这些基础信息。有了渲染管线后,每个渲染的滤镜就需要一个独立的管道,一个管道每次都需要通过图形管线。Opengles的渲染管线在是由多个着色器处理来完成。原创 2023-08-15 09:33:50 · 153 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(3)-交换链
交换链,在Opengles就是简单的一句话就能完成前后台显示的刷新和交换,并不需要特定的创建容器,很多细节,并不需要我们进行管理,当然定制性少自由度自然也就不高了。但对于我们真正去了解渲染流程,了解Vulkan交换链上的操作很是必要。原创 2023-08-15 09:16:27 · 131 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(2)-运行配置
以Android为例,需要使用合适的NDK,如果是用其他NDK,将会有可能编译错误,特别是在windows系统,而且编译速度并不快,需要半小时以上。Android中如果需要Android端窗口,还需要引入扩展库,需要在CMakeList里面引入以下的配置,进行配置AndroidKHR。当我们初始化使用vulkan的时候,需要调用InitVulkan来初始化vulkan的so,还有初始化实例方便调用。需要引入shaderc的库,不然编译vulkan的shader的时候就无法通过。原创 2023-08-14 22:17:44 · 345 阅读 · 0 评论 -
[NDK]从Opengles到Vulkan-基础篇(1)-基础环境
从业多年之后,你肯定想要更加精进,你发现可以学习的方向有很多,有人选择了网络,有人选择了渲染图像,有人选择了编译器,有人选择了framework,也有人选择了神经网络AI方向。很明显使我着迷的是渲染技术,因为能够直接呈现出来。当你越学越深入后,你发现网上的资料是真的不多很难找,也没有领路人可以找,只有自己去专研,去实践,去探索,直到得到问题的答案。当迷津解开后,那种自我成就感确是比任何行为都更加让人觉得着迷。原创 2023-08-14 22:16:07 · 286 阅读 · 0 评论