编辑“︁
GLSL
”︁
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Infobox software | name = GLSL | title = GLSL | logo = GLSL_Logo_(Unofficial).svg | logo size = x64px | logo caption = ''非官方logo'' | screenshot = | caption = | collapsible = | author = {{le|OpenGL架构评论板|OpenGL Architecture Review Board|OpenGL ARB}} | developer = [[Khronos Group]] | released = {{Start date and age|2002|07|24}} (作为一个扩展) | discontinued = | latest_release_version = 4.60.8 | latest_release_date = {{Start date and age|2023|08|14}}<ref>{{cite web|url=https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.html|title=The OpenGL® Shading Language, Version 4.60.8}}</ref> | latest preview version = | latest preview date = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} --> | programming language = | operating_system = | platform = [[跨平台]] | size = | genre = [[编程语言]] | license = | website = | standard = | AsOf = }} [[File:Linux kernel and OpenGL video games.svg|thumb|GLSL基本框架]] '''GLSL''' - '''OpenGL Shading Language''' 也稱作 '''GLslang''',是一個以[[C語言]]為基礎的[[高階程式語言|高階]][[著色語言]]。它是由 {{le|OpenGL ARB|OpenGL Architecture Review Board}} 所建立,提供開發者對[[繪圖管線]]更多的直接控制,而無需使用汇编语言或硬體規格語言。 == 背景 == 隨著近年來繪圖卡的進步, 底层[[頂點 (電腦圖學)|頂點]](vertex)和{{le|片段 (计算机图形)|Fragment (computer graphics)|片段}}(fragment)的渲染管線中加入更多更具彈性的新功能。 這個層次的可編程性由[[頂點著色器]]和[[着色器#像素着色器|像素着色器]]實現。 最初這個功能是以匯編語言撰寫著色器來達到,不直觀而複雜。OpenGL ARB 建立了 OpenGL 著色語言,為 GPU 的程式設計提供更加直觀的方法,同時維護了 OpenGL 一向的開放標準。 最初作為 OpenGL 1.4 的插件,後來由 {{le|OpenGL ARB|OpenGL Architecture Review Board}} 在2004 [[OpenGL]] 2.0 核心中正式納入,是自 1992 年 [[OpenGL]] 1.0 發布起第一個 [[OpenGL]] 的大改版。 使用 GLSL 有如下好處: *具有[[跨平台]]的相容性,包括 [[Macintosh]]、[[Microsoft Windows|Windows]] 和 [[Linux]] 等作業系統。 *編寫的著色器可以在所有支援 OpenGL 著色語言的繪圖卡上使用。 *允許廠商為特定的繪圖卡架構設計最佳化的代碼。 == 詳細資料 == === 資料類型 === OpenGL 著色語言規格定義了 22 個基本資料類型,有些用法與 [[C語言|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 語言相同,如 <nowiki>exp()</nowiki> 以及 <nowiki>abs()</nowiki>,其它繪圖編程特有的,如 <nowiki>smoothstep()</nowiki> 以及 <nowiki>texture2D()</nowiki>。 === 編譯和執行 === GLSL 著色器不是獨立的應用程式;其需要使用 [[OpenGL]] API 的應用程式。C、C++、C#、Delphi 和 Java 皆支援 [[OpenGL]] API,且支援 OpenGL 著色語言。 GLSL 著色器本身只是簡單的字串集,這些字串集會傳送到硬體廠商的驅動程式,並從程式內部的 OpenGL API 進入點編譯。著色器可從程式內部或讀入純文字檔來即時建立,但必須以字串形式傳送到驅動程式。 用以編譯、連結並傳送參數到 GLSL 程式的 API 集,已在三個 OpenGL 擴展中規定,且即將成為 [http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf OpenGL 2.0]{{Wayback|url=http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf |date=20070402033551 }} 核心的一部分。這些 API 可在以下擴展中找到: * [https://web.archive.org/web/20130804063101/http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_shader.txt ARB 頂點著色器] * [https://web.archive.org/web/20130526132418/http://oss.sgi.com/projects/ogl-sample/registry/ARB/fragment_shader.txt ARB 片斷著色器] * [https://web.archive.org/web/20070227171924/http://oss.sgi.com/projects/ogl-sample/registry/ARB/shader_objects.txt ARB 著色器物件] === GLSL 頂點著色器的簡單範例 === <syntaxhighlight lang=c>void main(void) { gl_Position = ftransform(); }</syntaxhighlight> === GLSL 片斷著色器的簡單範例 === <syntaxhighlight lang=c>void main(void) { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }</syntaxhighlight> === 工具 === GLSL 著色器可以事先建立和測試,現有以下 GLSL 開發工具: * [http://www.ati.com/developer/rendermonkey/ RenderMonkey]{{Wayback|url=http://www.ati.com/developer/rendermonkey/ |date=20061004113827 }} - 這個軟體是由 ATI 製作的,提供界面用以建立、編譯和除錯 GLSL 著色器,和 DirectX 著色器一樣。僅能在 Windows 平台上執行。 * GLSLEditorSample - 在 Mac OS X 上,它是目前唯一可用的程式,其提供著色器的建立和編譯,但不能除錯。它是 [[cocoa]] 應用程式,僅能在 Mac OS X 上執行。 * [http://sourceforge.net/projects/lumina/ Lumina]{{Wayback|url=http://sourceforge.net/projects/lumina/ |date=20070302213333 }} - Lumina 是新的 GLSL 開發工具。其使用 QT 界面,可以跨平台。 == 参见 == * [[著色語言]] * [[HLSL]],高階著色語言 * [[Cg语言|Cg]],nVIDIA 的著色語言 * [[程式設計]] * [[计算机图形学]] * [[OpenGL]] * [[著色器]] == 參考文獻 == *[[Rost, Randi J.]] ''OpenGL Shading Language''. 1st ed. Pearson Education, Inc, 2004. ISBN 0-321-19789-5 *Kessenich, John, & Baldwin, David, & Rost, Randi. ''The OpenGL Shading Language''. Version 1.10.59. 3Dlabs, Inc. Ltd. https://web.archive.org/web/20070404171317/http://developer.3dlabs.com/documents/index.htm == 外部連結 == *[http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf GLSL 語言規格,版本 1.20]{{Wayback|url=http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf |date=20080513083842 }} *[http://www.mew.cx/glsl_quickref.pdf GLSL 參考表]{{Wayback|url=http://www.mew.cx/glsl_quickref.pdf |date=20070207041043 }} *[https://web.archive.org/web/20130526132418/http://oss.sgi.com/projects/ogl-sample/registry/ARB/fragment_shader.txt OpenGL 片斷著色器規格] *[https://web.archive.org/web/20130804063101/http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_shader.txt OpenGL 頂點著色器規格] *[http://oss.sgi.com/projects/ogl-sample/registry/ARB/program_object.txt OpenGL 程式規格]{{dead link|date=2017年11月 |bot=InternetArchiveBot |fix-attempted=yes }} *[http://www.opengl.org 官方 OpenGL 網站]{{Wayback|url=http://www.opengl.org/ |date=20110226000710 }} *[http://www.lighthouse3d.com/opengl/ 來自 Lighthouse3D 的教學和範例]{{Wayback|url=http://www.lighthouse3d.com/opengl/ |date=20070320160322 }} *[https://web.archive.org/web/20071126072642/http://nehe.gamedev.net/ 來自 NeHe Productions 的教學和範例] *[http://www.typhoonlabs.com GLSL 開發環境]{{Wayback|url=http://www.typhoonlabs.com/ |date=20191022073212 }} *[http://www.ati.com/developer/rendermonkey/ RenderMonkey 著色器開發環境]{{Wayback|url=http://www.ati.com/developer/rendermonkey/ |date=20061004113827 }} *[https://web.archive.org/web/20060305194538/http://www.geist3d.org/ Geist3D 繪圖引擎,內含 GLSL 編輯器] *[http://sourceforge.net/projects/lumina/ Lumina 跨平台 GLSL IDE]{{Wayback|url=http://sourceforge.net/projects/lumina/ |date=20070302213333 }} {{-}} {{程序设计语言|C}} {{Authority control}} [[Category:繪圖函式庫]] [[Category:三维计算机图形学]] [[Category:C語言家族]] [[Category:OpenGL]] [[Category:著色器語言]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息