OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug

2023-11-19

安装win32平台的OpenGL ES 3.0模拟器

一,安装3.0模拟器,一般用32位的(https://developer.arm.com/products/software-development-tools/graphics-development-tools/opengl-es-emulator

二,测试模拟器

在安装目录点击mali-cube.exe,如果出现立方体转动说明模拟器安装成功。

三,配置环境

将安装目录中的libEGL.dll libGLESv2.dll文件和openglessl文件夹拷贝到C:\Windows\System32以及\Visual Studio\VC\bin 里面,libEGL.lib和libGLESv2.lib文件拷到\Visual Studio\VC\lib中,如果项目中需要也得拷贝一份。

编译所遇bug

一,Compilation error in shader: Error: 0:4: L0003: Keyword ‘attribute’ is reserved, Keyword ‘varying’ is reserved

OpenGL ES 3.0中将2.0的attribute改成了in,顶点着色器的varying改成out,片段着色器的varying改成了in,也就是说顶点着色器的输出就是片段着色器的输入,另外uniform跟2.0用法一样

二,0:11: S0001: Type mismatch in arithmetic operation between ‘int’ and ‘float’

float和int不能做操作,必须转成相同类型,也就是说算术操作中不能同时有1和1.0相加这种情况。

三,设备不支持下述扩展

Compilation error in shader: 0:2: P0003: Warning: Extension 'GL_OES_EGL_image_external' not supported
0:3: P0003: Warning: Extension 'GL_OES_EGL_image_external_essl3' not supported

查看设备所支持的扩展:

String str= GLES20.glGetString(GLES20.GL_EXTENSIONS);

注意:这句代码必须在OpenGL ES环境配置好才能调用,如可以在onSurfaceChanged中调用

四,Expected token ‘{‘, found ‘identifier’

这种错误一般是语法错误,比如使用samplerExternalOES,但是没加#extension GL_OES_EGL_image_external : require

五,1,0:1: Warning: GL_OES_EGL_image_external is deprecated in ESSL 3 and later versions

这个警告可以忽视,因为不加#extension GL_OES_EGL_image_external : require,当使用samplerExternalOES时就会报这个错误,ERROR: 0:6: ‘samplerExternalOES’ : requires extension GL_OES_EGL_image_external_essl3 to be enabled

六,D/MALI: gles_state_set_error_internal:70: [MALI] GLES error info:currently bound framebuffer is not valid for this operation

当前操作不需要帧缓冲区,取消掉即可

七,GLES error info: , and are not a valid combination

当使用glTexImage3D(GLES30.GL_TEXTURE_3D, 0, GLES30.GL_RGB, size, size, size, 0, GLES30.GL_RGB, GLES30.GL_FLOAT, buffer);时,buffer的类型使用ByteBuffer代替FloatBuffer,GLES30.GL_FLOAT类型也要改变成GL_UNSIGNED_BYTE,这里buffer的大小必须是size * size * size * 3

八,No matching function for call to ‘texture2D’,No matching function for call to ‘texture3D’

OpenGL ES 3.0的shader中没有texture2D和texture3D等了,全部使用texture替换

九,0:14: L0002: Undeclared variable ‘gl_FragColor’

OpenGL ES 2.0的gl_FragColor和gl_FragData在3.0中取消掉了,需要自己定义out变量作为片段着色器的输出颜色,如 out vec4 fragColor;

gl_Position还存在

十,0:13: S0047: Output variable declared inside a function

in或者out变量等不能在函数内(如main函数内)声明

十一,MALI: gles_state_set_error_internal:70: [MALI] GLES error info: is not an accepted value

应该这样使用glActiveTexture(GL_TEXTURE0 + n); //n为0,1,2……

不要因为使用GL_TEXTURE_3D或GLES11Ext.GL_TEXTURE_EXTERNAL_OES等纹理类型,而使用glActiveTexture(GL_TEXTURE_EXTERNAL_OES);或glActiveTexture(GL_TEXTURE_3D );,这样是错误的。

十二,#version must be the first directive/statement in a program

Compilation error in shader: Error: 0:2: P0005: #version must be on the first line in a program and only whitespace are allowed in the declaration

“#version 300 es”此类语句放在第一行,并且shader中不能有Tab键,只能用空格替换

十三,glCompileShader -> No shader compiler found.

将3.0模拟器中的openglessl放在C:\Windows\System32或C:\Windows\SysWOW64中

十四,win32运行有下述错误

error LNK2001: unresolved external symbol __imp__glTexImage3D@40

找不到glTexImage3D函数,libEGL.lib和libGLESv2.lib库版本不对,换成3.0的即可

十五,Compilation error in shader: Error: 0:4: L0001: Storage qualifier not allowed

这是因为使用3.0的语法,却没有加上#version 300 es

作者:lb377463323
出处:http://blog.csdn.net/lb377463323
原文链接:http://blog.csdn.net/lb377463323/article/details/77047221
转载请注明出处!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug 的相关文章

随机推荐

  • 几种Linux 查询外网出口IP的方法

    几种Linux 查询外网出口IP的方法 Curl 纯文本格式输出 curl icanhazip com curl ifconfig me curl curlmyip com curl ip appspot com curl ipinfo i
  • 【QrCode前端生成二维码】使用前端实现二维码

    遇到客户需求是扫码来替代人工输入一些数据 然后想着只从前端实现最好不过 然后就发现了qrCode这个js库 div div 可选参数来设置 var qrcode new QRCode test text http www qiuguodj
  • vue项目中批量删除如何实现的

    简单回答 与单个删除的接口为同一个 然后通过数组对象的id来删除
  • 光模块组装过程中常见问题分析及解决方法

    光模块组装过程中会出现一些问题 经常使用光模块的人可能会知道 下面就分享了组装光模块的问题及原因分析 并附有解决方案 大家参考下 希望对大家有帮助 在光模块组装过程中会出现一些问题 经常使用光模块的人可能会知道 组装光模块的问题 分析如下
  • 【嵌入式基础】串口中断通信VS串口DMA通信

    目录 目录 前言 一 串口通信 1 通信方式 2 通信速率 3 串口通信的三种工作方式 二 串口中断通信 1 串口中断特点 2 CubeMX配置初始化串口中断相关外设 3 串口中断程序分析 4 实验效果 三 串口DMA通信 1 关于DMA
  • 数字后端知识点扫盲——后端设计流程及使用工具

    1 DFT Design For Test 可测性设计 芯片每一步往往都自带测试电路 DFT的目的就是在设计的时候就考虑将来的测试 DFT的常见方法是 在设计中插入scan chain 将非扫描单元 如寄存器 变为扫描单元 DFT工具是sy
  • VS包含目录、库目录、附加依赖项、环境变量详解

    首先 提出一个问题 我们编译一个程序 都需要哪些文件 1 头文件 2 静态库lib 3 动态库dll 针对这三个文件 我们便可以设置工程的相关属性 1 头文件 我们要用到一个头文件 需要知道这个头文件的名字 然后用 include将它包含进
  • Java高级-包装类、BigDecimal和BigInteger

    基本数据类型和包装类 基本数据类型和包装类如下所示 基本类型 包装类 int java lang Integer 父类为java lang Number long java lang Long 父类为java lang Number dou
  • Maven中:可以被子模块继承的元素

    即使是长期从事 Maven 工作的开发人员也不能完全掌握聚合 多模块 和 Parent 继承的关系 在使用多模块时 子模块总要指定聚合的 pom 为
  • Linux中如何修改文件或目录的权限?

    在Linux系统中 文件权限是非常重要的一个概念 它能够决定谁可以访问文件 以及可以执行哪些操作 正确地设置文件权限可以确保系统的安全性和稳定性 那么如何设置文件权限呢 以下是详细的内容 在 Linux 系统中 可以使用 chmod 命令来
  • unity中的一些快捷键(齐)

    重命名的快捷键是F2 ALT 鼠标左键点击Hierarchy对象可以展开和收起对象的所有子物体 SHIFT 空格 可以对当前窗口进行放大缩小
  • 部署docker

    1 移除之前安装过的Docker sudo yum y remove docker docker client docker client latest docker common docker latest docker latest l
  • maven怎么引入jdom_如何在Maven项目中引入自己的jar包

    1 一般情况下jar包都可以使用pom xml来配置管理 但也有一些时候 我们项目中使用了一个内部jar文件 但是这个文件我们又没有开放到maven库中 我们会将文件放到我们项目中 以下以java工程为例随便放了个地方 2 jar包的引入和
  • RK3308 Ubuntu16.04移植

    一 概述 本章将介绍Ubuntu在RK平台上的移植以及AP配网 常用的fs为buildroot编译出来的linux文件系统 而本次则是ubuntu文件系统 系统启动后需要手动对WIFI驱动进行加载并配网 二 配置Kernel 为了支持ubu
  • python requests 爬虫--爬取HTML源码不显示正文已解决

    爬虫第一步 获取整个网页的HTML信息 源代码如下 coding UTF 8 import requests if name main target https www biqukan com 1 1094 5403177 html req
  • Wireshark过滤规则及使用方法

    前言 我看到的这篇文章是转载的 但我也不知道他是从哪转载的 o 转自 Wireshark 基本语法 基本使用方法 及包过滤规则 1 过滤IP 如来源IP或者目标IP等于某个IP 例子 ip src eq 192 168 1 107 or i
  • Java基础:常用类Compare

    Compare类 Comparable接口 自然排序 1 像String 包装类等实现了Comparable接口 重写了compareTo 方法 2 String 包装类重写了compareTo 方法后 进行了从小到大的排列 Test pu
  • Linux内核内存管理算法Buddy和Slab

    文章目录 Buddy分配器 CMA Slab分配器 总结 Buddy分配器 假设这是一段连续的页框 阴影部分表示已经被使用的页框 现在需要申请一个连续的5个页框 这个时候 在这段内存上不能找到连续的5个空闲的页框 就会去另一段内存上去寻找5
  • AtCoder Beginner Contest 169 B Multiplication 2 long long竟然不够用

    AtCoder Beginner Contest 169 比赛人数11374 比赛开始后15分钟看到A题 在比赛开始后第20分钟看到所有题 AtCoder Beginner Contest 169 B Multiplication 2 lo
  • OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug

    安装win32平台的OpenGL ES 3 0模拟器 一 安装3 0模拟器 一般用32位的 https developer arm com products software development tools graphics devel