OpenGL ES 着色器语法中精度解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 精度范围;注意

微信图片_20220508235938.png

精度说明表


Satisfies the minimum requirements for the vertex language described above.Optional in the fragment language


满足上面描述的顶点语言的最低要求, 在片段语言中是可选的


satisfies the minimum requirements above for the fragment language . Its range and precision has to be greater than or the same as provided by lowp and less than of the same as provided by highp.


满足上面片段语言的最低要求. 其范围和精度必须大于或等于lowp提供的范围和精度, 小于highp提供的范围和精度


Range and precision that can be less than mediump , but still intended to represent all color values for any color channel.


范围和精度可以小于mediump, 但仍用于表示任何颜色通道的所有颜色值.


例如:


lowp float color;
varying mediump vec2 Coord; 
highp mat4 m;


精度范围

微信图片_20220509000214.png

精度范围


对于高精度和中精度, 整型范围必须可以准确地转化成相应的相同精度修饰符所表示的float型.


例如: highp int 可以被转换成 highp float, mediump int 可以被转化为 mediump float, 但是lowp int 不能转化为lowp float.


字符常量和布尔型没有精度修饰符, 当浮点数和整数构造器不含带有精度修饰的参数时也不需要精度修饰符.


  1. 指定变量精度放在数据类型之前


highp vec4 position; 
varying lowp vec4 color; 
mediump float specularExp;


  1. 指定默认精度放在Vertex和Fragment shader源码开始处


precision precision-qualifier type;


  • precision可以用来确认默认精度修饰符
  • precision-qualifier可以是lowp, mediump或者highp. 任何其他类型和修饰符都会引起错误.
  • 如果type是float类型, 那么该精度(precision-qualifier)将适用于所有无精度修饰符的浮点数声明 (标量, 向量, 矩阵);
  • 如果type是int类型, 那么改精度(precision-qualifier)将适用于所有无精度修饰符的整数声明(标量, 向量);
  • 没有声明精度修饰符的变量将使用和它最近的precision语句中的精度.


例如:

precision highp float;

precision mediump int;


注意


在Vertex shader中, 如果没有默认的精度, 则float和int精度都为highp:

在Fragment shader中, float没有默认的精度, 所以必须在Fragment shader中为float指定一个默认精度或为每个float变量指定精度


  1. 预定义精度


在顶点语言中有如下预定义的全局默认精度语句


precision highp float; 
precision highp int; 
precision lowp sampler2D; 
precision lowp samplerCube;


在片元语言中有如下预定义的全局默认精度语句:


precision mediump int; 
precision lowp sampler2D; 
precision lowp samplerCube;


片元语言没有默认的浮点数精度修饰符. 因此, 对于浮点数, 浮点数向量和矩阵变量声明, 要么声明必须包含一个精度修饰符, 要不默认的精度修饰符在之前已经被声明过了.




目录
相关文章
|
6月前
|
IDE 开发工具 Python
python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
【5月更文挑战第14天】python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
159 6
|
5月前
|
关系型数据库 MySQL 数据库连接
蓝易云 - PHP基本语法解析与应用指南
以上只是PHP基本语法的简要概述,要深入了解和掌握PHP,你需要阅读更多的教程和参考资料,并通过实践来提高你的技能。
42 2
|
5月前
|
存储 缓存 JavaScript
【前端 - Vue】之 Keep-Alive缓存组件使用语法及原理解析,超详细!
【前端 - Vue】之 Keep-Alive缓存组件使用语法及原理解析,超详细!
|
6月前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
147 1
|
5月前
|
存储 NoSQL MongoDB
深入解析 MongoDB 与 Python:基本语法、实用示例与最佳实践
深入解析 MongoDB 与 Python:基本语法、实用示例与最佳实践
|
6月前
|
开发框架 Dart Java
Flutter的核心:Dart语言基础——语法与特性深度解析
【4月更文挑战第26天】Flutter框架背后的Dart语言,以其简洁的语法和独特特性深受开发者喜爱。本文深入解析Dart的语法与特性,如类型推导、动态静态类型系统、统一的类接口、访问权限控制以及并发编程支持。了解并掌握Dart,能助开发者更高效地利用Flutter构建高性能移动应用。
|
6月前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
64 0
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
|
6月前
|
存储 JSON Java
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(三)
在 Go 语言里,符合语言习惯的做法是使用一个单独的返回值来传递错误信息。
73 0
|
6月前
|
存储 Go C++
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(二)
Go 语言中的复合数据类型包括数组、切片(slice)、映射(map)和结构体(struct)。
69 0
|
6月前
|
前端开发 JavaScript 安全
React中的JSX:语法与原理深入解析
【4月更文挑战第25天】本文深入解析React中的JSX,一种JavaScript语法扩展,使代码更直观。JSX让开发者以HTML样式描述组件UI,但最终编译成JavaScript。通过Babel转换,JSX标签转为React.createElement()调用,创建虚拟DOM。JSX的优势在于直观性、类型安全、代码复用和工具支持,助力高效开发React组件,适应不断发展的Web应用需求。

推荐镜像

更多