Opengl ES之踩坑记

前因

最近在尝试使用Opengl ES实现一些LUT滤镜效果,在实现这些滤镜效果的时候遇到一些兼容性的坑,踩过这些坑后我希望把这几个坑分享给读者朋友们,
希望同在学习Opengl ES的朋友们能少走弯路。

关于LUT滤镜相关的介绍,也是这个Opengl ES系列入门教程的一项内容,在后面的文章中会专门介绍,这里暂时不展开讲解,后续大家敬请期待。

踩坑详情

1、着色器编译报错

有以下这个片元着色器,在其他手机上正正常编译,但是在华为鸿蒙系统上却编译报错:

#version 300 es 
precision mediump float;
in vec2 TexCoord;
uniform sampler2D ourTexture;
uniform sampler3D textureLUT;
out vec4 FragColor;
void main()
{
vec4 color = texture(ourTexture, TexCoord);
FragColor = texture(textureLUT,color.rgb);
}

报错内容:

no default precision defined for variable 'textureLUT'

很明显说是没有声明精度的问题,然后在第二行不是已经使用precision mediump float;声明了精度了吗?是的,这已经声明了精度,但是这个声明的精度是针对float类型的,
针对sampler3D类型的精度并没有声明,因此我们只需要声明以下sampler3D的精度问题即可。下面是经过修改过的正确的着色器代码:

#version 300 es
precision mediump float;
in vec2 TexCoord;
uniform sampler2D ourTexture;
// 华为手机上必须加上highp,否则报错no default precision defined for 
uniform mediump sampler3D textureLUT;
out vec4 FragColor;
void main()
{
vec4 color = texture(ourTexture, TexCoord);
FragColor = texture(textureLUT,color.rgb);
}

2、glTexImage3D报错GL_INVALID_OPERATION

使用以下代码上传3DLut的cube纹理数据时,部分手机能正常工作,但是同样在华为鸿蒙的手机上却报错,使用函数glGetError()获取到的错误是GL_INVALID_OPERATION

        GLES30.glTexImage3D(
                GL_TEXTURE_3D,
                0,
                GL_RGB,
                size, size, size,
                0,
                GL_RGB,
                GL_FLOAT,
                lutBuffer
        );

后来经过查阅资料发现是使用函数glTexImage3D时的第三个参数传递错误所致的,将第三个参数GL_RGB改为GLES30.GL_RGB16F即可,正确的代码如下:

    GLES30.glTexImage3D(
                GL_TEXTURE_3D,
                0,
                // 鸿蒙等要用GLES30.GL_RGB16F, 小米等其他手机可用GL_RGB
                GLES30.GL_RGB16F,
                size, size, size,
                0,
                GL_RGB,
                GL_FLOAT,
                lutBuffer
        );

GLES30.GL_RGB16F格式是浮点帧缓冲的相关内容,当帧缓冲使用了一个标准化的定点格式(像GL_RGB)为其颜色缓冲的内部格式,OpenGL会在将这些值存入帧缓冲前自动将其约束到0.0到1.0之间。
当一个帧缓冲的颜色缓冲的内部格式被设定成了GL_RGB16F,GL_RGBA16F,GL_RGB32F或者GL_RGBA32F时,这些帧缓冲被叫做浮点帧缓冲(Floating Point Framebuffer),浮点帧缓冲可以存储超过0.0到1.0范围的浮点值。

Opengl ES系列入门介绍

Opengl ES之EGL环境搭建
Opengl ES之着色器
Opengl ES之三角形绘制
Opengl ES之四边形绘制
Opengl ES之纹理贴图
Opengl ES之VBO和VAO
Opengl ES之EBO
Opengl ES之FBO
Opengl ES之PBO
Opengl ES之YUV数据渲染
YUV转RGB的一些理论知识
Opengl ES之RGB转NV21

关注我,一起进步,人生不止coding!!!
微信扫码关注

原文链接:https://www.cnblogs.com/goFlyer/p/17121900.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Opengl ES之踩坑记 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 扫一扫,原来这么简单

    二维码识别技术已广泛应用在移动支付、实用工具、电商购物、社交通讯等场景。然而,在实际生活中,二维码容易遇到距离远、暗光、强光、污损、模糊和大角度倾斜等复杂场景,导致识别困难,扫码体验差。华为HMS Core 统一扫码服务(Scan Kit)为开发者们的APP带来一站式扫码解决方案,并且拥有高识别率和快速识别等特点。 距离太远、码图过小? 在停车场扫码缴费、上…

    Android 2023年4月17日
    00
  • 修改安卓ID为硬件唯一ID

    前言: 最近接到个需求,我们新产品上的外包侧APP需要使用硬件唯一ID(不管怎么升级怎么操作,ID始终不变和硬件绑定),用来做权限校验。 由于了解到安卓ID或序列号都会在擦除升级后重新随机生成,所以这里使用硬件上的ID来作为唯一ID,接下来进入正题 此篇以安卓7.1系统为例 一,常用硬件信息ID 这里列举一些常用的一芯一码ID查询获取方式 1. CPU ID…

    Android 2023年4月18日
    00
  • 关于移动开发平台,你想知道的这些事

    近年来,移动开发平台如雨后春笋般蓬勃发展。这诸多的移动开发平台常常令人面临选择恐惧。今天就来同大家一块盘点一下,看看这些移动开发平台都有什么特点与优势,希望为有需要的开发者提供一定的参考。   需要特别说明的是,这里提到的移动开发平台与 Flutter、React Native 等移动开发框架还有一定的区别,更多是指为开发者提供从开发、测试、发布和运营整个生…

    Android 2023年4月18日
    00
  • 【FAQ】统一扫码服务常见问题及解答

    1.隐私政策是怎么样的?收集哪些信息? 关于Scan Kit的隐私政策及收集的信息,请查看SDK隐私安全说明。 Android:SDK隐私安全说明 iOS:SDK隐私安全说明 2.如何使用多码识别?多码模式下如何实现指定条码?多码模式的坐标支持返回坐标么?多码模式下实现自动放大? 1)统一扫码服务支持返回多码 ①android项目建议您参考MultiProc…

    Android 2023年4月25日
    00
  • 京东小程序折叠屏适配探索

    前言 随着近年来手机行业的飞速发展,手机从功能机进入到智能机,手机屏幕占比也随着技术和系统的进步越来越大,特别是Android 10推出以后,折叠屏逐渐成为Android手机发展的趋势。 图 1 Android手机屏幕发展趋势 京东小程序近年来也支持了越来越多的业务和应用,做好小程序的折叠屏的适配也是符合未来的发展趋势,能为用户和业务方提供更好的体验和价值。…

    Android 2023年5月8日
    00
  • Android报”OutOfMemoryError”如何解决?

    针对Android报”OutOfMemoryError”异常的原因和解决办法,我会给您提供详细讲解。我们先来看一下什么是”OutOfMemoryError”。 什么是”OutOfMemoryError”? 在Java中,程序运行时经常会需要占用内存资源,对于Android应用而言,相对于Java来说,其内存受到了更大的限制,当程序占用的内存超过了系统为其分配…

    Android 2023年4月3日
    00
  • 安卓ro.serialno产生的整个流程

    前言: 关于ro.serialno这个属性,相信大家都不陌生了,应用层的Build.getSerial(),Build.SERIAL等均是直接或间接的获取了这个属性值。接下来从boot到系统应用,小小的分析一下它的整个流程: 由于是APP经常使用,那我们从应用层分析到底层kernel/boot 一,framework层 好的,我们进入安卓源码目录,grep查…

    Android 2023年4月18日
    00
  • 仿豆瓣发布-编辑框自适应高度,自动滚动定位到焦点输入

    效果图 随着输入的文本自动增加高度,键盘上方自定义菜单布局,随键盘弹起 点击编辑框,自动滚动到焦点处输入 布局层次 <ConstraintLayout>   <ScrollView>     <LinearLayout>        <Edittext/>       <自定义布局/>     &…

    Android 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部