1"use strict";(globalThis.webpackChunklwjgl_org=globalThis.webpackChunklwjgl_org||[]).push([["846"],{8938(e,t,n){n.d(t,{E:()=>o,s:()=>i});var r,i=((r={})[r.OK=200]="OK",r[r.CREATED=201]="CREATED",r[r.ACCEPTED=202]="ACCEPTED",r[r.NO_CONTENT=204]="NO_CONTENT",r[r.MOVED_PERMANENTLY=301]="MOVED_PERMANENTLY",r[r.BAD_REQUEST=400]="BAD_REQUEST",r[r.UNAUTHORIZED=401]="UNAUTHORIZED",r[r.FORBIDDEN=403]="FORBIDDEN",r[r.NOT_FOUND=404]="NOT_FOUND",r[r.METHOD_NOT_ALLOWED=405]="METHOD_NOT_ALLOWED",r[r.INTERNAL_SERVER_ERROR=500]="INTERNAL_SERVER_ERROR",r);async function o(e){let t=e.headers.get("content-type");if(null!==t){if(t.includes("application/json"))try{let t=await e.json();if(t.error&&t.error.message)return t.error.message}catch(e){console.error(e)}else if(t.includes("text/plain")){let t=await e.text();if(t.length)return t}}return e.statusText}},5818(e,t,n){n.d(t,{LA:()=>l,t0:()=>i,wS:()=>a});var r=n(9210);let i=(0,r.i7)({to:{transform:"rotate(360deg)"}}),o={transform:"scale(2)",opacity:"0"};(0,r.i7)({"75%":o,"100%":o}),(0,r.i7)({"50%":{opacity:".5"}});let l=(0,r.i7)({to:{opacity:1,transform:"translate3d(0, 0, 0)"}}),s={transform:"translateY(-25%)",animationTimingFunction:"cubic-bezier(0.8,0,1,1)"};(0,r.i7)({"0%":s,"50%":{transform:"none",animationTimingFunction:"cubic-bezier(0,0,0.2,1)"},"100%":s});let a=(0,r.i7)({"0%":{transform:"scale(0)"},"50%":{opacity:1,transform:"none"}})},4152(e,t,n){n.d(t,{s:()=>l});var r=n(9210);let i=e=>e.toFixed(7).replace(/[.]?0+$/,""),o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;return`${i(e/t)}em`},l=(0,r.I4)("div",{lineHeight:1.75,"p,ul,ol,blockquote,h1,h2,h3,h4,h5,img":{mb:"$paragraph"},a:{color:"$info10",textDecoration:"underline",textDecorationThickness:"1.5px",textUnderlineOffset:"1px",fontWeight:"$medium"},strong:{fontWeight:"$semibold"},ol:{counterReset:"list-counter"},"ol > li":{counterIncrement:"list-counter"},"ol > li::before":{content:'counter(list-counter) "."',fontWeight:"$normal",color:"$neutral9",left:0},"ul > li::before":{content:'""',backgroundColor:"$neutral7",borderRadius:"50%",square:o(6,16),top:`calc(${o(14,16)} - ${o(3,16)})`,left:o(4,16)},"li::before":{position:"absolute"},li:{position:"relative",pl:o(28,16),mb:"$xsm","&:last-child":{mb:0}},blockquote:{fontWeight:"$medium",fontStyle:"italic",color:"$neutral11",borderLeft:"0.25rem solid $caution7",quotes:`"â" "â" "â" "â"`,pl:o(20,20)},"blockquote p:first-of-type::before":{content:"open-quote"},"blockquote p:last-of-type::after":{content:"close-quote"},h1:{fontWeight:"$light",fontSize:o(36,16),lineHeight:i(40/36),b:{fontWeight:"$bold"}},h2:{fontWeight:"$bold",fontSize:o(24,16),lineHeight:i(32/24)},h3:{fontWeight:"$semibold",fontSize:o(20,16),lineHeight:i(1.6)},h4:{fontWeight:"$semibold",lineHeight:i(1.5)},pre:{color:"$neutral3",backgroundColor:"$neutral11",overflowX:"auto"},"> :last-child":{mb:0},variants:{align:{center:{mx:"auto"}},width:{safe:{maxWidth:"65ch",lg:{maxWidth:"80ch"}}},size:{base:{},auto:{fontSize:"calc(1rem * var(--scale-sm, 1))"}}}})},9439(e,t,n){let r;n.r(t),n.d(t,{default:()=>w});var i=n(7311),o=n(9863),l=n(2647),s=n(9210),a=n(8831),c=n(5966),h=n(8973),d=n(8938);async function m(){let e=await fetch("/sample.html",{method:"GET",mode:"same-origin",credentials:"omit",headers:{Accept:"text/html"}});if(e.status!==d.s.OK)throw Error(await (0,d.E)(e));return await e.text()}var p=n(3944),u=n(4152),f=n(5818);let g=(0,s.I4)(e=>{let t,n,r,l,s,a,c=(0,o.c)(9);c[0]!==e?({size:n,...t}=e,c[0]=e,c[1]=t,c[2]=n):(t=c[1],n=c[2]);let h=void 0===n?24:n;return c[3]===Symbol.for("react.memo_cache_sentinel")?(r=(0,i.jsx)("title",{children:"Loading"}),l=(0,i.jsx)("circle",{cx:12,cy:12,r:10,stroke:"currentColor",strokeWidth:4}),s=(0,i.jsx)("path",{fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"}),c[3]=r,c[4]=l,c[5]=s):(r=c[3],l=c[4],s=c[5]),c[6]!==t||c[7]!==h?(a=(0,i.jsxs)("svg",{role:"status","aria-hidden":!0,focusable:"false",fill:"none",width:h,height:h,viewBox:"0 0 24 24",...t,children:[r,l,s]}),c[6]=t,c[7]=h,c[8]=a):a=c[8],a},{animation:`${f.t0} 1s linear infinite`,circle:{opacity:.25},path:{opacity:.75}});var x=n(6221),j=n(7639);let b=(0,s.I4)("section",u.s),L=()=>{let e,t,n=(0,o.c)(3);n[0]===Symbol.for("react.memo_cache_sentinel")?(void 0===r&&(r=m()),e=r,n[0]=e):e=n[0];let s=(0,l.use)(e);return n[1]!==s?(t=(0,i.jsx)("pre",{children:(0,i.jsx)("code",{dangerouslySetInnerHTML:{__html:s}})}),n[1]=s,n[2]=t):t=n[2],t},w=()=>{let e,t,n,r,s,d,m,u,f,w,y,_,v,G,W,S,O,k,E,T,J,D,A,I,F,N,C,R,$,U,z,B,q,M,P,H,K,Q,V,Y,X,Z,ee,et,en=(0,o.c)(44);return en[0]===Symbol.for("react.memo_cache_sentinel")?(e=(0,i.jsxs)(x.h,{children:["LW",(0,i.jsx)("b",{children:"JGL"})," Guide"]}),en[0]=e):e=en[0],en[1]===Symbol.for("react.memo_cache_sentinel")?(t=(0,i.jsx)("p",{children:"This guide will help you get started with LWJGL."}),n=(0,i.jsx)("h3",{children:"Getting Started"}),en[1]=t,en[2]=n):(t=en[1],n=en[2]),en[3]===Symbol.for("react.memo_cache_sentinel")?(r=(0,i.jsx)(a.N_,{to:"/download",onPointerDown:c.f5.preload,children:"download page"}),en[3]=r):r=en[3],en[4]===Symbol.for("react.memo_cache_sentinel")?(s=(0,i.jsx)("a",{href:"https://jdk.java.net/",rel:"noopener external",target:"_blank",children:"Java SE Development Kit"}
1),en[4]=s):s=en[4],en[5]===Symbol.for("react.memo_cache_sentinel")?(d=(0,i.jsxs)("p",{children:["Please use the build configurator in our"," ",r," ","to configure and download an LWJGL release. You will also need a"," ",s," ","(JDK), LWJGL requires version 8 or higher. Then proceed by setting up a project in your favorite IDE and configuring it as described in the"," ",(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki/1.2.-Install",target:"_blank",rel:"noopener external",children:"Installation Guide"}),"."]}),m=(0,i.jsx)("p",{children:"You should now be ready to develop and launch an LWJGL application. Following is a simple example that utilizes GLFW to create a window and clear the background color to red, using OpenGL."}),en[5]=d,en[6]=m):(d=en[5],m=en[6]),en[7]===Symbol.for("react.memo_cache_sentinel")?(u=(0,i.jsxs)(p.m,{padding:!0,children:[e,(0,i.jsxs)(b,{width:"safe",children:[t,n,d,m,(0,i.jsxs)("blockquote",{children:["MacOS users should start their application passing ",(0,i.jsx)("em",{children:'"-XstartOnFirstThread"'})," as a VM option."]})]})]}),en[7]=u):u=en[7],en[8]===Symbol.for("react.memo_cache_sentinel")?(f=(0,i.jsx)(p.m,{padding:!0,css:{display:"flex",justifyContent:"center",height:2460},children:(0,i.jsx)(g,{size:64})}),en[8]=f):f=en[8],en[9]===Symbol.for("react.memo_cache_sentinel")?(w=(0,i.jsx)(j.F,{className:"dark",children:(0,i.jsx)(l.Suspense,{fallback:f,children:(0,i.jsx)(p.m,{padding:!0,css:{overflow:"auto",fontSize:"$sm"},children:(0,i.jsx)(L,{})})})}),en[9]=w):w=en[9],en[10]===Symbol.for("react.memo_cache_sentinel")?(y=(0,i.jsx)("a",{href:"http://javadoc.lwjgl.org/",rel:"noopener external",children:"starting here"}),en[10]=y):y=en[10],en[11]===Symbol.for("react.memo_cache_sentinel")?(_=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki",rel:"noopener external",children:"wiki"}),en[11]=_):_=en[11],en[12]===Symbol.for("react.memo_cache_sentinel")?(v=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki/1.3.-Memory-FAQ",rel:"noopener external",children:"Memory FAQ"}),en[12]=v):v=en[12],en[13]===Symbol.for("react.memo_cache_sentinel")?(G=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki/1.4.-Bindings-FAQ",rel:"noopener external",children:"Bindings FAQ"}),en[13]=G):G=en[13],en[14]===Symbol.for("react.memo_cache_sentinel")?(W=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki/2.5.-Troubleshooting",rel:"noopener external",children:"Troubleshooting"}),en[14]=W):W=en[14],en[15]===Symbol.for("react.memo_cache_sentinel")?(S=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3/tree/master/modules/samples/src/test/java/org/lwjgl/demo",rel:"noopener external",children:"LWJGL samples"}),en[15]=S):S=en[15],en[16]===Symbol.for("react.memo_cache_sentinel")?(O=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-demos",rel:"noopener external",children:"lwjgl3-demos"}),en[16]=O):O=en[16],en[17]===Symbol.for("react.memo_cache_sentinel")?(k=(0,i.jsxs)("p",{children:["LWJGL comes with rich documentation, you can browse the javadoc online"," ",y,". For more information, FAQ, guides and tutorials visit the"," ",_,". The"," ",v,","," ",G," ","and"," ",W," ","pages are especially useful. For more code examples, see the"," ",S," ","and the"," ",O," ","repository (nightly build required). For porting existing LWJGL 2 code to LWJGL 3, see the"," ",(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3-wiki/wiki/2.6.6-LWJGL3-migration",rel:"noopener external",children:"migration guide"}),"."]}),E=(0,i.jsx)("h3",{id:"build-instructions",children:"Building from source"}),en[17]=k,en[18]=E):(k=en[17],E=en[18]),en[19]===Symbol.for("react.memo_cache_sentinel")?(T=(0,i.jsx)("a",{href:"https://github.com/LWJGL/lwjgl3.git",rel:"noopener external",children:"Git repository"}),en[19]=T):T=en[19],en[20]===Symbol.for("react.memo_cache_sentinel")?(J=(0,i.jsxs)("p",{children:["Clone the"," ",T," ","locally, install a JDK and"," ",(0,i.jsx)("a",{href:"http://ant.apache.org/",rel:"noopener external",children:"Apache Ant"}),", then you should be ready to build. Use the following targets:"]}),D=(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant"})," â Builds everything and runs the tests"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant compile-templates"})," â Compiles the binding generator templates"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant compile"})," â Compiles the Java code (including generated)"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant compile-native"})," â Compiles and links the native library"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant tests"})," â Runs the test suite"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant demo -Dclass=<demo class>"})," â Runs one of the LWJGL demos in the test module"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant clean"})," â Deletes all files and folders generated by the build script."]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"ant -f update_dependencies.xml"})," â Forces all dependencies to be downloaded again."]})]}),en[20]=J,en[21]=D):(J=en[20],D=en[21]),en[22]===Symbol.for("react.memo_cache_sentinel")?(A=(0,i.jsx)("em",{children:"os.arch"}),en[22]=A):A=en[22],en[23]===Symbol.for("react.memo_cache_sentinel")?(I=(0,i.jsx)("em",{children:"x86"}),en[23]=I):I=en[23],en[24]===Symbol.for("react.memo_cache_sentinel")?(F=(0,i.jsxs)("p",{children:["Note that the target native architecture is determined by ",A," of the JVM that runs Ant. For cross-compiling, use the LWJGL_BUILD_ARCH environment variable to override it (set it to ",I," or"," ",(0,i.jsx)("em",{children:"x64"}),")."]}),N=(0,i.jsx)("p",{children:"Binary dependencies are downloaded from the stable download branch. Use the LWJGL_BUILD_TYPE environment variable to override this:"}),C=(0,i.jsx)("em",{children:"nightly"}),en[24]=F,en[25]=N,en[26]=C):(F=en[24],N=en[25],C=en[26]),en[27]===Symbol.for("react.memo_cache_sentinel")?(R=(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:[C," â the latest successful build, possibly broken. Dependency repositories can be found"," ",(0,i.jsx)("a",{href:"https://github.com/LWJGL-CI",rel:"noopener external",children:"here"})]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"stable"})," â the latest build that has been verified to work with LWJGL, the default"]}),(0,i.jsxs)("li",{children:[(0,i.jsx)("em",{children:"release/latest"})," â the latest stable build that has been promoted to an official LWJGL $"]}),(0,i.jsxs)("li",{children:[(0,i.jsxs)("em",{children:["release/","{","build.version","}"]})," ","â a specific previously released build"]})]}),en[27]=R):R=en[27],en[28]===Symbol.for("react.memo_cache_sentinel")?($=(0,i.jsx)(p.m,{padding:!0,children:(0,i.jsxs)(b,{width:"safe",children:[k,E,J,D,F,N,R,(0,i.jsxs)("p",{children:["If you are using custom binaries, or simply need to work offline, set the LWJGL_BUILD_OFFLINE environment variable to one of ",(0,i.jsx)("em",{children:"true/on/yes"}),"."]}),(0,i.jsx)("p",{children:"The LWJGL build process creates thousands of tiny files. If you wish to redirect output to another directory or storage device, you may set the LWJGL_BUILD_OUTPUT environment variable."})]})}),en[28]=$):$=en[28],en[29]===Symbol.for("react.memo_cache_sentinel")?(U=(0,i.jsx)(j.F,{className:"dark",children:(0,i.jsx)(p.m,{padding:!0,children:(0,i.jsxs)(b,{children:[(0,i.jsxs)("h1",{children:["Is LW",(0,i.jsx)("b",{children:"JGL"})," for me?"]}),(0,i.jsx)("p",{children:"LWJGL is simple but powerful. It is not for everyone."}),(0,i.jsx)("p",{children:"If you're into OpenGL, you'll feel right at home."}),(0,i.jsx)("p",{children:"If you're just getting started, please familiarize yourself with each API first."})]})})}),en[29]=U):U=en[29],en[30]===Symbol.for("react.memo_cache_sentinel")?(z=(0,i.jsx)("h2",{children:"GLFW"}),B=(0,i.jsxs)("p",{children:[(0,i.jsx)("a",{href:"https://www.glfw.org/",rel:"noopener external",children:"GLFW"}
1)," ","is an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events. It is easy to integrate into existing applications and does not lay claim to the main loop."]}),q=(0,i.jsx)("p",{children:"GLFW is the preferred windowing system for LWJGL 3 applications. If you're familiar with LWJGL 2, GLFW is a replacement for the Display class and everything in the input package."}),en[30]=z,en[31]=B,en[32]=q):(z=en[30],B=en[31],q=en[32]),en[33]===Symbol.for("react.memo_cache_sentinel")?(M=(0,i.jsxs)("p",{children:["Learning GLFW is easy. It has a simple, yet powerful, API and comprehensive"," ",(0,i.jsx)("a",{href:"https://www.glfw.org/docs/latest/",rel:"noopener external",children:"documentation"}),"."]}),P=(0,i.jsx)("h2",{children:"OpenGL"}),H=(0,i.jsxs)("p",{children:[(0,i.jsx)("a",{href:"https://www.opengl.org/about/",rel:"noopener external",children:"OpenGL"})," ","is the premier environment for developing portable, interactive 2D and 3D graphics applications."]}),en[33]=M,en[34]=P,en[35]=H):(M=en[33],P=en[34],H=en[35]),en[36]===Symbol.for("react.memo_cache_sentinel")?(K=(0,i.jsx)("a",{href:"https://www.opengl.org/documentation/",rel:"noopener external",children:"documentation"}),en[36]=K):K=en[36],en[37]===Symbol.for("react.memo_cache_sentinel")?(Q=(0,i.jsxs)("p",{children:["OpenGL is a massive API with long history and hundreds of extensions. Learning it from scratch is no easy undertaking, but you can start from its"," ",K,". The"," ",(0,i.jsx)("a",{href:"https://www.opengl.org/registry/",rel:"noopener external",children:"OpenGL registry"})," ","is also quite useful."]}),V=(0,i.jsx)("h2",{children:"OpenCL"}),Y=(0,i.jsxs)("p",{children:[(0,i.jsx)("a",{href:"https://www.khronos.org/opencl/",rel:"noopener external",children:"OpenCL"})," ","is the first open, royalty-free standard for cross-platform, parallel programming of modern processors found in personal computers, servers and handheld/embedded devices. OpenCL (Open Computing Language) greatly improves speed and responsiveness for a wide spectrum of applications in numerous market categories from gaming and entertainment to scientific and medical software."]}),en[37]=Q,en[38]=V,en[39]=Y):(Q=en[37],V=en[38],Y=en[39]),en[40]===Symbol.for("react.memo_cache_sentinel")?(X=(0,i.jsxs)("p",{children:["Specifications for OpenCL and its extensions can be found at the"," ",(0,i.jsx)("a",{href:"https://www.khronos.org/registry/cl/",rel:"noopener external",children:"Khronos OpenCL registry"}),"."]}),Z=(0,i.jsx)("h2",{children:"OpenAL"}),ee=(0,i.jsxs)("p",{children:[(0,i.jsx)("a",{href:"http://www.openal.org/",rel:"noopener external",children:"OpenAL"})," ",'(for "Open Audio Library") is a software interface to audio hardware. The interface consists of a number of functions that allow a programmer to specify the objects and operations in producing high-quality audio output, specifically multichannel output of 3D arrangements of sound sources around a listener.']}),en[40]=X,en[41]=Z,en[42]=ee):(X=en[40],Z=en[41],ee=en[42]),en[43]===Symbol.for("react.memo_cache_sentinel")?(et=(0,i.jsxs)(h.h,{title:"Get started with LWJGL 3",description:"This guide will help you get started with LWJGL 3",children:[u,w,$,U,(0,i.jsx)(p.m,{padding:!0,children:(0,i.jsxs)(b,{width:"safe",children:[z,B,q,M,P,H,Q,V,Y,X,Z,ee,(0,i.jsxs)("p",{children:["LWJGL is bundled with"," ",(0,i.jsx)("a",{href:"http://kcat.strangesoft.net/openal.html",rel:"noopener external",children:"OpenAL Soft"}),", an LGPL-licensed, cross-platform, software implementation of the OpenAL 3D audio API."]})]})})]}),en[43]=et):et=en[43],et}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.