GLSL - 维基百科,自由的百科全书

文章推薦指數: 80 %
投票人數:10人

GLSL - OpenGL Shading Language 也稱作GLslang,是一個以C語言為基礎的高階著色語言。

它是由OpenGL ARB 所建立,提供開發者對繪圖管線更多的直接控制,而無需使用汇编 ... GLSL 维基百科,自由的百科全书 跳到导航 跳到搜索 GLSL-OpenGLShadingLanguage也稱作GLslang,是一個以C語言為基礎的高階著色語言。

它是由OpenGLARB所建立,提供開發者對繪圖管線更多的直接控制,而無需使用汇编语言或硬體規格語言。

目录 1背景 2詳細資料 2.1資料類型 2.2運算子 2.3函式和控制結構 2.4編譯和執行 2.5GLSL頂點著色器的簡單範例 2.6GLSL片斷著色器的簡單範例 2.7工具 3參考文獻 4外部連結 5参见 背景[编辑] 隨著近年來繪圖卡的進步, 已在渲染管線中的頂點(vertex)和片斷(fragment)層次中,加入更具彈性的新功能。

達到在這個層次中,使用片斷和頂點著色器的可編程性。

最初這個功能是以組合語言撰寫著色器來達到的。

組合語言對開發者的使用是不直觀而複雜的。

OpenGLARB建立了OpenGL著色語言,為GPU的程式設計提供更加直觀的方法,當維護開放標準的時候,就有助於帶動OpenGL的歷史。

最初OpenGL1.5是以擴充形式引入,後來OpenGLARB(英语:OpenGLArchitectureReviewBoard)在OpenGL2.0核心中正式納入GLSL。

自1992年建立的OpenGL1.0起,OpenGL2.0是第一個OpenGL的大修改版。

使用GLSL有如下好處: 具有跨平台的相容性,包括Macintosh、Windows和Linux等作業系統。

所有支援OpenGL著色語言的繪圖卡,都可以用來編寫著色器。

允許廠商為特定的繪圖卡產生最佳化的代碼。

詳細資料[编辑] 資料類型[编辑] OpenGL著色語言規格定義了22個基本資料類型,有些用法與C相同,其它的是繪圖處理器特有的。

void–用於沒有返回值的函式 bool–條件類型,其值可以是真或假 int–帶負號整數 float–浮點數 vec2–2個浮點數組成的向量 vec3–3個浮點數組成的向量 vec4–4個浮點數組成的向量 bvec2–2個布林組成的向量 bvec3–3個布林組成的向量 bvec4–4個布林組成的向量 ivec2–2個整數組成的向量 ivec3–3個整數組成的向量 ivec4–4個整數組成的向量 mat2–浮點數的2X2矩陣 mat3–浮點數的3X3矩陣 mat4–浮點數的4X4矩陣 sampler1D–用來存取一維紋理的句柄(handle)(或:操作,作名詞解。

) sampler2D–用來存取二維紋理的句柄 sampler3D–用來存取三維紋理的句柄 samplerCube–用來存取立方映射紋理的句柄 sampler1Dshadow–用來存取一維深度紋理的句柄 sampler2Dshadow–用來存取二維深度紋理的句柄 運算子[编辑] OpenGL著色語言提供類似於C語言的運算子。

給開發者編寫著色器的靈活性。

GLSL包含了C和C++運算子,除了位元運算子和指標以外。

函式和控制結構[编辑] 類似於C語言,GLSL支援迴圈和分支,包括if、else、if/else、for、do-while、break、continue等。

支援使用者定義函式,且各種常用的函式也已內建。

這也就讓繪圖卡製造商,能夠在硬體層次上最佳化這些內建的函式。

許多函式與C語言相同,如exp()以及abs(),其它繪圖編程特有的,如smoothstep()以及texture2D()。

編譯和執行[编辑] GLSL著色器不是獨立的應用程式;其需要使用OpenGLAPI的應用程式。

C、C++、C#、Delphi和Java皆支援OpenGLAPI,且支援OpenGL著色語言。

GLSL著色器本身只是簡單的字串集,這些字串集會傳送到硬體廠商的驅動程式,並從程式內部的OpenGLAPI進入點編譯。

著色器可從程式內部或讀入純文字檔來即時建立,但必須以字串形式傳送到驅動程式。

用以編譯、連結並傳送參數到GLSL程式的API集,已在三個OpenGL擴展中規定,且即將成為OpenGL2.0(页面存档备份,存于互联网档案馆)核心的一部分。

這些API可在以下擴展中找到: ARB頂點著色器 ARB片斷著色器 ARB著色器物件 GLSL頂點著色器的簡單範例[编辑] voidmain(void) { gl_Position=ftransform(); } GLSL片斷著色器的簡單範例[编辑] voidmain(void) { gl_FragColor=vec4(1.0,0.0,0.0,1.0); } 工具[编辑] GLSL著色器可以事先建立和測試,現有以下GLSL開發工具: RenderMonkey(页面存档备份,存于互联网档案馆)-這個軟體是由ATI製作的,提供界面用以建立、編譯和除錯GLSL著色器,和DirectX著色器一樣。

僅能在Windows平台上執行。

GLSLEditorSample-在MacOSX上,它是目前唯一可用的程式,其提供著色器的建立和編譯,但不能除錯。

它是cocoa應用程式,僅能在MacOSX上執行。

Lumina(页面存档备份,存于互联网档案馆)-Lumina是新的GLSL開發工具。

其使用QT界面,可以跨平台。

參考文獻[编辑] Rost,RandiJ.OpenGLShadingLanguage.1sted.PearsonEducation,Inc,2004.ISBN0-321-19789-5 Kessenich,John,&Baldwin,David,&Rost,Randi.TheOpenGLShadingLanguage.Version1.10.59.3Dlabs,Inc.Ltd.https://web.archive.org/web/20070404171317/http://developer.3dlabs.com/documents/index.htm 外部連結[编辑] GLSL語言規格,版本1.20(页面存档备份,存于互联网档案馆) GLSL參考表(页面存档备份,存于互联网档案馆) OpenGL片斷著色器規格 OpenGL頂點著色器規格 OpenGL程式規格[永久失效連結] 官方OpenGL網站(页面存档备份,存于互联网档案馆) 來自Lighthouse3D的教學和範例(页面存档备份,存于互联网档案馆) 來自NeHeProductions的教學和範例 GLSL開發環境(页面存档备份,存于互联网档案馆) RenderMonkey著色器開發環境(页面存档备份,存于互联网档案馆) Geist3D繪圖引擎,內含GLSL編輯器 Lumina跨平台GLSLIDE(页面存档备份,存于互联网档案馆) 参见[编辑] 著色語言 HLSL,高階著色語言 Cg,nVIDIA的著色語言 程式設計 计算机图形学 OpenGL 著色器 查论编程序设计语言按范型过程式 FORTRAN COBOL ALGOL60 BASIC GW-BASIC PL/I MUMPS(英语:MUMPS) ALGOL68 Forth Pascal TurboPascal C Modula-2 Ada83 occam Oberon Go Zig 面向对象 Simula67 Smalltalk C++ Objective-C Eiffel ObjectPascal Delphi Self CLOS VisualBasic Ada95 Java C# Vala Crystal(英语:Crystal(programminglanguage)) 多范型 Modula-3 Dylan Python Lua JavaScript Ruby REBOL Red(英语:Red(programminglanguage)) D Factor Scala F# F* Haxe Nim Rust Dart Julia Swift Ballerina(英语:Ballerina(programminglanguage)) 函数式 LISP Scheme CommonLisp Racket Clojure Logo APL/J ML StandardML OCaml Erlang Elixir Haskell Curry SAC Agda Idris Cuneiform 逻辑式 Prolog Datalog Mercury AnsProlog 脚本语言动态语言 SNOBOL Icon REXX Perl Raku Tcl/Tk CLOS newLISP Python Lua Ruby PHP Hack VBScript Io Julia Shell语言 Unixshell sh csh tcsh ksh bash ash zsh sed AWK PowerShell ECMA-262 ECMAScript JavaScript JScript Node.js CoffeeScript TypeScript Elm PureScript Reason 特定平台.NET C# VisualC# C++/CLI VisualC++ F# PowerShell VB.NET SmallBasic JVM Java AspectJ(英语:AspectJ) JSP Scala Clojure Groovy Kotlin 特定领域科学计算 Speakeasy(英语:Speakeasy(computationalenvironment)) IDL GDL Maxima Maple MATLAB Octave Scilab Wolfram R SageMath Julia GPU计算 GLSL HLSL OpenCL CUDA Futhark 数据查询 SQL PL/SQL T-SQL SQL/PSM(英语:SQL/PSM) xBase(英语:xBase) XPath XQuery(英语:XQuery) rasql(英语:rasdaman#RasterQueryLanguage) GraphQL 可视化 Simulink LabVIEW Orange(英语:Orange(software)) KNIME(英语:KNIME) Scratch Snap! 传媒设计 SuperCollider PureData Processing ChucK 其它 汇编语言 PostScript XSLT WebAssembly 目录 列表 历史 比较(英语:Comparisonofprogramminglanguages) 时间线(英语:Timelineofprogramminglanguages) 规范控制 GND:7673247-2 取自“https://zh.wikipedia.org/w/index.php?title=GLSL&oldid=63264537” 分类:​繪圖函式庫三维计算机图形学C語言家族OpenGL著色器語言隐藏分类:​自2017年11月带有失效链接的条目条目有永久失效的外部链接包含GND标识符的维基百科条目使用ISBN魔术链接的页面 导航菜单 个人工具 没有登录讨论贡献创建账号登录 命名空间 条目讨论 不转换 不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體 查看 阅读编辑查看历史 更多 搜索 导航 首页分类索引特色内容新闻动态最近更改随机条目资助维基百科 帮助 帮助维基社群方针与指引互助客栈知识问答字词转换IRC即时聊天联络我们关于维基百科 工具 链入页面相关更改上传文件特殊页面固定链接页面信息引用本页维基数据项目 打印/导出 下载为PDF打印页面 其他语言 العربيةČeštinaDeutschEnglishEspañolFrançaisItaliano日本語한국어LatviešuPolskiPortuguêsРусскийSvenskaTürkçeУкраїнська 编辑链接



請為這篇文章評分?