
OpenGL
文章平均质量分 69
阿飞__
熟悉 Android、C++ 等
展开
-
OpenGL ES查询是否支持float浮点数据类型纹理格式
项目开发中发现之前可用的代码换了一台设备后结果一直错误,后来发现是因为使用了 float 浮点数据类型创建的纹理导致的,查阅得知 OpenGL ES 中硬件可能不支持特定的纹理格式和数据类型。通常情况下,OpenGL ES 实现至少应该支持 GL_UNSIGNED_BYTE 类型的纹理,因为它是最基本的纹理数据类型之一,但是对于其他类型(如 GL_FLOAT)的支持可能因硬件而异。原创 2024-04-09 11:00:01 · 416 阅读 · 0 评论 -
OpenGL ES eglCreatePbufferSurface() 和 eglCreateWindowSurface() 的对比和使用
//< @param [in] dpy EGL显示连接///< @param [in] config EGL配置///< @param [in] attrib_list 属性列表,用于指定Pbuffer的一些属性,可以为NULL///< @return 返回EGL表面///< @param [in] dpy EGL显示连接///< @param [in] config EGL配置///< @param [in] win 与窗口系统相关的本地窗口类型。原创 2023-12-05 10:45:48 · 2756 阅读 · 0 评论 -
OpenGL ES 帧缓冲对象介绍和使用示例
默认情况下,OpenGL渲染的目标是屏幕,但如果你不想直接渲染到屏幕上,还需要对渲染结果做某些后期处理、渲染到纹理、阴影映射等操作,便可以使用帧缓冲对象,实现离屏渲染。帧缓冲对象(Frame Buffer Object,FBO)是一个概念容器,它可以包含颜色缓冲区、深度缓冲区、模板缓冲区等,形成一个完整的渲染目标。通过使用帧缓冲对象,可以实现离屏渲染、多重渲染目标(MRT)等高级渲染技术,而不必直接渲染到屏幕。原创 2023-12-04 14:52:19 · 1980 阅读 · 0 评论 -
OpenGL ES 读取纹理数据到CPU地址,用于保存或其他计算等
glReadPixels() 是一个同步读取操作,这个函数其实是直接用于从帧缓冲区中读取像素的颜色值,以获取渲染后的图像数据进行后续处理、保存到文件或其他用途。所以我们可以先把纹理绑定到一个FBO(帧缓冲对象)上,然后再通过 glReadPixels() 读取纹理的值。GLint x, // 左上角x坐标GLint y, // 左上角y坐标GLsizei width, // 读取区域的宽度GLsizei height, // 读取区域的高度。原创 2023-11-22 20:58:01 · 1275 阅读 · 0 评论 -
Android使用OpenGL 3.0绘制yuv图片示例
一、思路首先OpenGL是没法直接绘制yuv数据的,所以我们需要在shader中将yuv数据转为rgb数据绘制。我们可以将yuv数据作为3个不同的纹理传入到片段着色器,然后通过yuv转rgb的公式,得到需要渲染的颜色值。公式为:( Y~ [0,1] U,V~[-0.5,0.5])R = Y + 1.4022 * VG = Y - 0.3456 * U - 0.7145 * VB = Y + 1.771 * U二、shader编写OpenGL 3.0 和 2.0 的 shader 语法原创 2020-10-12 18:00:53 · 2735 阅读 · 7 评论 -
OpenGL ES 3.0 片段着色器介绍和使用
一、简介备注:内容来自于《OpenGL ES 3.0编程指南》一书。片段着色器和顶点着色器一样都是运行在 GPU 上的程序,片段着色器将顶点着色器输出的片段作为输入,并负责输出每个片段的颜色。片段着色器的输入输出图示:二、内建变量内建变量是指着色器语言中已经定义好的,并有特殊意义的一些变量。1. 内建特殊变量变量描述gl_FragCoord片段着色器中的一个只读...原创 2019-08-26 18:50:08 · 2583 阅读 · 1 评论 -
OpenGL ES 之 2D 纹理介绍和使用
一、纹理概念纹理可以简单理解为物体表面的图案,OpenGL ES 3.0 中纹理有:2D纹理、2D纹理数组、3D纹理和立方图纹理。一个纹理的单独数据元素称为“纹素”(texture pixel 纹理像素的缩写)。1. 纹理的坐标系2. 2D纹理2D纹理是最基本和常用的纹理,可以把2D纹理想象为一个图像数据的二维数组。2D纹理的纹理坐标用一对2D坐标 (s, t) 指定,有时也称作 (u...原创 2019-07-29 15:08:55 · 3902 阅读 · 0 评论 -
OpenGL 纹理过滤和 mip 贴图
一、概念1. 纹理过滤当纹理贴到具体像素上时,像素需要到纹理图像中进行采样,这个过程称为纹理过滤。纹理过滤通常有两种情况:放大(GL_TEXTURE_MAG_FILTER)和缩小(GL_TEXTURE_MIN_FILTER)。2. mip 贴图mip 贴图只适用于纹理过滤缩小的场景,其原理是将纹理按照2的倍数进行缩放,直至图像1*1的大小。在贴图时,OpenGL 会自动选择合适大小的纹理...原创 2019-07-19 17:08:55 · 1774 阅读 · 0 评论 -
OpenGL ES 3.0 纹理格式介绍及有效的内部格式、格式、类型组合
一、简介本文主要列举 OpenGL ES 3.0 中纹理格式有哪些,以及有效的内部格式、格式、类型组合。内容来自于 《OpenGL ES 3.0 编程指南 原书第2版》。纹理格式主要应用于加载图像数据的相关接口,其中用于加载2D和立方图纹理的基本函数是 glTexImage2D,在 3.0 中还有多种替代方法指定 2D 纹理,如不可变纹理 glTexStorage2D 和 glTexSubIm...原创 2019-07-16 17:42:24 · 9975 阅读 · 0 评论 -
OpenGL ES 顶点着色器内建变量和矩阵变换
一、简介顶点着色器用于基于顶点的操作,例如通过矩阵变换位置、计算照明方程式以生成逐顶点的颜色以及生成或者变换纹理坐标。常见概念:属性:用顶点数组提供的顶点数据(关键字:attribute/in)输出:在图元光栅化阶段为每个生成的片段计算顶点着色器的输出,并作为片段着色器的输入(关键字:varying/out)统一变量:顶点着色器使用的不变数据(关键字:uniform)采样器:顶点着色...原创 2019-04-25 17:20:11 · 2233 阅读 · 0 评论 -
OpenGL ES 给着色器(Shader)中传递数据
一、前言在 OpenGL 开发中,肯定会接触到顶点着色器(vertex shader)和片段着色器(fragment shader),着色器语言的语法这里不做过多介绍,下面是一些着色器的示例:OpenGL ES 2.0 顶点着色器示例:uniform mat4 u_Matrix; // 统一变量attribute vec4 a_Position; // 属性(输入)void main(...原创 2019-04-08 19:16:55 · 5068 阅读 · 0 评论 -
OpenGL ES 绘制图元:glDrawArrays 和 glDrawElements 介绍
一、简介在 OpenGL ES 2.0 中,使用 glDrawArrays 和 glDrawElements 两个接口绘制图元。在 OpenGL ES 3.0 中,又新增了 glDrawRangeElements、glDrawElementsInstanced 和 glDrawArraysInstanced 三个接口用于绘制图元。二、函数介绍1. glDrawArrays/** * @...原创 2019-04-11 09:50:38 · 11174 阅读 · 0 评论 -
OpenGL ES 3.0 对比 OpenGL ES 2.0 的异同点和新功能
一、相同点相比于 OpenGL ES 1.x 系列的固定功能管线,OpenGL ES 2.0 和 OpenGL ES 3.0 都是可编程图形管线。开发者可以自己编写图形管线中的 顶点着色器 和 片段着色器 两个阶段的代码。二、不同点OpenGL ES 3.0 是向后兼容 OpenGL ES 2.0 的。也就是说使用 2.0 编写的应用程序是可以在 3.0 中继续使用的。基于 2.0 拥有的...原创 2019-03-28 00:55:32 · 17267 阅读 · 2 评论 -
OpenGL ES 3.0 shader 着色语言基础语法
前言在 OpenGL 开发中,不得不提到着色语言,着色语言用于编写顶点着色器和片段着色器。接下来就简单介绍一下着色语言的一些基础语法。备注:内容来自于《OpenGL ES 3.0编程指南》一书。一、版本规范在 OpenGL ES 3.0 中,顶点着色器和片段着色器的第一行总是声明着色器版本。使用如下语法声明着色器使用着色语言3.00版本:#version es 300没有声明或声明...原创 2019-03-31 00:38:34 · 4698 阅读 · 0 评论 -
EGL 介绍和使用
一、简介EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁。二、功能EGL API 是...原创 2018-12-06 23:28:21 · 32444 阅读 · 5 评论 -
Android 中 GLSurfaceView 截图
GLSurfaceView 截取图像的时候,往往传统的方法并不行得通,我们发现使用 GLSurfaceView.getDrawingCache() 等方法得到的往往是一张纯黑的图,这是由于 GLSurfaceView 和 SurfaceView 一样都有一块透明的缓存区域,所以我们截取的往往只是这块透明的缓存区域。 方法一:下面这个方法是在 stackoverflow 上看到的一个方法...原创 2016-06-08 17:00:58 · 12477 阅读 · 14 评论 -
OpenGL ES 3.0 渲染管线介绍
一、前言OpenGL 1.x 系列采用的还是固定功能管线。从 OpenGL ES 2.0 开始采用了可编程图形管线。而 OpenGL ES 3.0 兼容了 2.0,并加入了很多 2.0 不具备的功能。Android 4.3 之后开始支持 OpenGL ES 3.0。二、渲染管线记住下面这张图,其中带阴影的方框表示 OpenGL ES 3.0 管线中可编程阶段。1. 顶点着色器...原创 2018-12-06 00:22:05 · 2482 阅读 · 2 评论 -
Android 为例编写一个 OpenGL ES 3.0 实例,Native & Java 两种实现
一、简介通过这个 Sample,你将了解到 Android 中是怎么使用 OpenGL ES通过绘制一个简单的静态三角形,来简单入门和了解它大致的流程(类似于 HelloWorld 工程)介绍使用 Native 层 和 Java 层 两种方式来分别实现本文暂不介绍具体的语法,但会给比较详细的注释和解释,帮助你理解二、Native 实现1. 头文件由于我们使用的是 OpenGL E...原创 2018-12-05 10:24:04 · 6804 阅读 · 4 评论