将代码从OPENGL移植到OPENGL ES需要修改什么
几何着色器 GEOMETRY SHADER
OpenGL ES不支持几何着色器,需要移除代码中所有和GL_GEOMETRY_SHADER相关的内容
glPolygonMode
OpenGL ES移除了glPolygonMode
glPointSize
OpenGL ES移除了glPointSize,如果需要设置点的大小,可以直接在顶点着色器中对gl_PointSize进行赋值,其内部声明是mediump float gl_Position;
example:
#version 300 es
layout(location = 0) in vec3 aPos;uniform vec4 color;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;out vec4 vertexColor;void main()
{gl_Position = projection * view * model * vec4(aPos, 1.0f);vertexColor = color;gl_PointSize = 2.0f; // 设置点大小
}
着色器代码版本
需要将着色器代码的版本声明由#version 330 core
改为#version 300 es
,其中core为OpenGL的声明,es为OpenGL ES的声明,330和300版本号,根据需要填写
着色器精度设置
OpenGL ES中有三个精度描述的关键字lowp
、mediump
和highp
,分别代表低、中、高三种精度,所有整型、浮点型或者采样器都需要用精度描述符进行修饰。例如下面OpenGL中的着色器代码在OpenGL ES中会报错
#version 300 es
out vec4 FragColor; // 没有精度描述符
in vec4 vertexColor; // 没有精度描述符void main()
{FragColor = vertexColor;
}
报错
vec4
是float类型的向量,需要用精度描述符进行修饰,可以修改成如下:
#version 300 es
out mediump vec4 FragColor; // 中精度
in mediump vec4 vertexColor; // 中精度void main()
{FragColor = vertexColor;
}
也可以使用precision
关键字批量设置类型精度,如precision mediump float;
,上面报错的代码也可以修改为如下:
#version 300 es
precision mediump float;out vec4 FragColor; // 中精度
in vec4 vertexColor; // 中精度void main()
{FragColor = vertexColor;
}
上述的精度描述关键字的问题我只在片段着色器中遇到,在顶点着色器中没有报这个错误。在顶点着色器中我没有使用精度关键字,也能够编译通过。
另外在OpenGL中,也有这些关键字,但它们并没有任何实际意义,只是为了方便将OpenGL ES的着色器代码运行到OpenGL中,而不用修改代码。
最后,附上这三给关键字的具体说明
参考
https://www.khronos.org/registry/OpenGL-Refpages/es3.0/
https://www.khronos.org/registry/OpenGL-Refpages/gl4/
https://www.khronos.org/files/opengles3-quick-reference-card.pdf
https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf
将代码从OPENGL移植到OPENGL ES需要修改什么相关推荐
- android opengl版本,Android OpenGL ES(一)开发入门
早就听过大名鼎鼎的 OpenGL,却迟迟没有实践学习,有些惭愧.今天开始通过实践+博文方式学习掌握 OpenGL.此文对于 OpenGL 的学习分为以下部分: OpenGL 基础概念 OpenGL 坐 ...
- hwui opengl VS skia opengl VS skia vulkan?
之前讨论过skia codec部分在o,p上的变化,比如增加了heif解码等. 其实skia在android o,p的变化不只这些. 印象最深刻的还是渲染部分 从o开始hwui渲染支持skia ope ...
- 如何将三万行代码从Flow移植到TypeScript?
作者 | David Gomes 译者 | 弯月 责编 | 郭芮 来源 | CSDN(ID:CSDNnews) [编者按]在内存安全中,类型安全是很重要的一个命题.为了确保JavaScript项目运 ...
- 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
文章目录 一.OpenGL 状态机概念 二.OpenGL 矩阵概念 上一篇博客 [OpenGL]八.初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗 ...
- OpenGL版本与OpenGL扩展机制
1 opengl的版本区别(在opengl官方文档中有详细说明) 针对Opengl不同版本的升级是主要是扩展指令集. 现在版本是4.0啦 1.1 opengl1.1 1995年,SGI ...
- 如何将三万行代码从 Flow 移植到 TypeScript?
[CSDN编者按]在内存安全中,类型安全是很重要的一个命题.为了确保JavaScript项目运行的类型安全,本文的作者介绍了2016年时使用Flow的经历:由Facebook支持的Flow方案,不仅拥 ...
- 【OpenGL】使用OpenGL的GLU库绘制BSpline曲线
[OpenGL]使用OpenGL的GLU库绘制BSpline曲线. 1.绘制目标 2.核心代码 3.运行结果 1.绘制目标 使用OpenGL的GLU库绘制BSpline曲线. 2.核心代码 /// T ...
- Java opengl openal_OpenCL、OpenGL、OpenAL
OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95.Windows NT.Unix.Linux.MacOS.OS/2之间进行移植.因此,支持OpenGL的软件具有很好的移植性 ...
- paho.mqtt.c开源代码的ARM移植
paho.mqtt.c开源代码的ARM移植 1.环境及背景 2.开源资源下载 3.编译过程 3.1编译OpenSSL 3.2编译paho.mqtt.c 1.环境及背景 CSDN上关于paho.mqtt ...
最新文章
- TVMNN编译Compiler栈
- 惠普z840工作站linux,全模块战神 惠普旗舰级Z840工作站评测
- JAVA自学笔记07
- Flume实操(三)【实时读取目录文件到HDFS案例】
- 获取文本中你须要的字段的 几个命令 grep awk cut tr sed
- 数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数-C-icoding-排序-数据结构
- lanmp之二 (奇葩问题)
- Apache beam其他学习记录
- Centos在线安装nginx
- 2018福建省考c语言成绩查询,福建省公务员考试录用网成绩查询系统:2019福建省考分数查询入口...
- 如何利用大数据技术构建用户画像
- http://my.oschina.net/huangyong/blog/372491?fromerr=hobPLCmQ#OSC_h2_5
- 内网win10安装flash插件
- VS2017中添加Flash控件
- 【React源码】(十八)React 算法之调和算法
- 杭州电子科技大学ACM-1093
- HashSet的遍历和使用特点
- 村田【元宇宙】要火,但不能“起火”—— 电池:半固态凝胶软包电池篇
- 成都拓嘉辰丰:拼多多关键词搜不到自家商品怎么回事?
- The JAVA_HOME environment variable is not defined correctly This environment variable is needed to r