在之前的文章中介绍了 stb_image
图像库,还顺带提到了 libpng 和 libjpeg ,这篇文章就是介绍如何在 Android 平台上用 CMake 编译 libpng 动态库以及 libpng 使用实践。
https://glumes.com/post/android/stb-image-introduce/
[阅读全文]在 OpenGL 开发中,我们要渲染一张图片,通常先是得到一张图片对应的 Bitmap ,然后将该 Bitmap 作为纹理上传到 OpenGL 中。在 Android 中有封装好的 GLUtils
类的 texImage2D
方法供我们调用。
public static void texImage2D(int target, int level, int internalformat,
Bitmap bitmap, int type, int border)
该方法的底层原理实际上也是解析了该 Bitmap ,得到了 Bitmap 所有的像素数据,类似于 Android NDK 关于 Bitmap 操作的 AndroidBitmap_lockPixels
方法,如果你不太了解该方法,可以参考这篇文章:Android JNI 之 Bitmap 操作。
得到了所有像素数据之后,实际最终还是调用了 OpenGL 的 glTexImage2D
来实现纹理上传。当然,如果可以直接得到所有数据,也不需要走解析 Bitmap 这一步了,这种场景最常见的就是把相机作为输入了。
在之前的文章中,讲到了 Command-Buffer
提交给 Queue
去执行,也提到了 Vulkan 实现跨平台机制,是有一些拓展的,这里就讲讲 Vulkan 窗口系统的拓展(Vulkan Window System Integration WSI),如下图所示:
在 Vulkan 的系列文章中出现过如下的图片:
这张图片很详细的概括了 Vulkan 中的重要组件以及它们的工作流程,接下来的文章中会针对每个组件进行学习讲解并配上相关的示例代码,首先是 Instance、Device 和 Queue 组件。
[阅读全文]捋一捋 Vulkan 。
[阅读全文]避免图片丢失,建议阅读微信原文:
帧缓冲(Framebuffer Object),简称 FBO
,在渲染绘制中, 图像最终都是绘制到 FBO 上的,一般都是默认的 FBO 上,也就是我们的屏幕。
除此之外,还可以创建自己的 FBO,用来作为绘制的载体,当在自己的 FBO 上绘制好了之后,可以再把绘制内容显示到屏幕上,实现一个双缓冲的绘制。
FBO 实际上是由颜色附件、深度附件、模板附件组成的,作为着色器各方面(一般包括颜色、深度、深度值)绘制结果存储的逻辑对象。
[阅读全文]