|
|
| (10 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| [[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}} | | [[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}} |
| =Unsynced Read=
| |
|
| |
|
| == Replay/Spectating == | | <span class="warning">These functions are ONLY available if the graphic board supports GLSL.<br><br> Please test in your scripts if one of them exists before you use them!</span> |
| '''Spring.IsReplay'''
| |
| ( ) -> nil | boolean
| |
| '''Spring.GetReplayLength''' {{new|92.0}}
| |
| ( ) -> nil | number (in seconds)
| |
| '''Spring.GetSpectatingState'''
| |
| ( ) -> boolean spectating, boolean fullView, boolean fullSelect
| |
|
| |
|
| == Game/Menu Name ==
| |
| '''Spring.GetGameName''' {{new|104.0}}
| |
| ( ) -> string name
| |
|
| |
|
| Apparently returns {{xtaglink|Modinfo.lua|name}} .. {{xtaglink|Modinfo.lua|version}} from [[Modinfo.lua]]. E.g. "Spring: 1944 test-5640-ac2d15b".
| | '''gl.CreateShader''' |
| | ({[ vertex = "glsl code" ,] |
| | [ tcs = "glsl code" ,] |
| | [ tes = "glsl code" ,] |
| | [ geometry = "glsl code" ,] |
| | [ fragment = "glsl code" ,] |
| | [ uniform = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span> |
| | [ uniformInt = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span> |
| | [ uniformFloat = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span> |
| | [ uniformMatrix = { uniformName = number value, ...} ,] |
| | [ geoInputType = number inType,] |
| | [ geoOutputType = number outType,] |
| | [ geoOutputVerts = number maxVerts,] |
| | [ definitions = "string of shader #defines", ] |
| | }) -> number shaderID |
|
| |
|
| '''Spring.GetMenuName''' {{new|104.0}}
| | * The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc. |
| ( ) -> string name
| | |
| | * The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points. |
|
| |
|
| == ModUI == | | * The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring. |
| '''Spring.GetModUICtrl'''
| |
| ( ) -> boolean
| |
|
| |
|
| == MyInfo ==
| | * The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring. |
| '''Spring.GetMyAllyTeamID'''
| |
| ( ) -> number
| |
| '''Spring.GetMyTeamID'''
| |
| ( ) -> number
| |
| '''Spring.GetMyPlayerID''' | |
| ( ) -> number
| |
|
| |
|
| == Local Player,Team,Ally ==
| | * The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed. |
| <span class="note">Redundant same as the GetMyXYZ functions!</span>
| |
|
| |
|
| '''Spring.GetLocalPlayerID'''
| | * The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this: |
| ( ) -> number playerID
| | <syntaxhighlight lang="c">uniform float frame;</syntaxhighlight> |
| '''Spring.GetLocalTeamID'''
| |
| ( ) -> number teamID
| |
| '''Spring.GetLocalAllyTeamID'''
| |
| ( ) -> number allyID
| |
|
| |
|
| == Team/Player Info ==
| | * From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared; |
| '''Spring.GetPlayerRoster'''
| | <syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight> |
| ( [number sortType] | [number sortType], [bool showPathingPlayers] ) ->
| |
| nil | playerTable = {
| |
| [1] = {
| |
| string name,
| |
| number playerID,
| |
| number teamID,
| |
| number allyTeamID,
| |
| boolean spectator,
| |
| number cpuUsage,
| |
| number pingTime
| |
| },
| |
| etc...
| |
| }
| |
| if pingTime is == -1, the player is pathfinding, in order to find the progress, use:
| |
| cpuUsage&0x1 if it's PC or BO, cpuUsage& 0xFE to get path res, (cpuUsage>>8)*1000
| |
| for the progress
| |
| <font color="#55ee99"> Sort codes:
| |
| 1 = Sort by allies (the default)
| |
| 2 = Sort by teamID
| |
| 3 = Sort by playerName
| |
| 4 = Sort by CPU usage
| |
| 5 = Sort by ping time</font>
| |
| '''Spring.GetTeamColor'''
| |
| ( number teamID ) -> nil | number r, number g, number b, number a
| |
| '''Spring.GetTeamOrigColor'''
| |
| ( number teamID ) -> nil | number r, number g, number b, number a
| |
| '''Spring.GetPlayerTraffic'''
| |
| ( number playerID [, number packetID] ) -> number
| |
|
| |
|
| == Sound ==
| | '''gl.DeleteShader''' |
| '''Spring.GetSoundStreamTime''' | | ( number shaderID ) -> nil |
| ( ) -> number playedTime, number totalTime | |
|
| |
|
| == Camera ==
| | '''gl.ActiveShader''' <font color="#55ee99">can be used in NON-drawing events (to update uniforms etc.)!</font> |
| '''Spring.GetCameraNames''' | | ( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil |
| ( ) -> { [camName] = number camNum, ... }
| |
| '''Spring.GetCameraState'''
| |
| ( ) -> { "name" = string, "mode" = number camIdx, state1 = number, state2 = number, ... } | |
|
| |
|
| See [[Lua_camState]] for details about Spring.GetCameraState output.
| | '''gl.UseShader''' |
| | ( number shaderID ) -> boolean linked |
|
| |
|
| '''Spring.GetCameraPosition''' | | '''gl.GetShaderLog''' |
| ( ) -> number x, number y, number z | | ( ) -> string "infoLog" |
| '''Spring.GetCameraDirection'''
| |
| ( ) -> number forward_x, number forward_y, number forward_z
| |
| '''Spring.GetCameraFOV'''
| |
| ( ) -> number vFov, number hFov
| |
| '''Spring.GetCameraVectors'''
| |
| ( ) -> vectorTable = {
| |
| forward = { [1] = number x, [2] = number y, [3] = number z },
| |
| up = { [1] = number x, [2] = number y, [3] = number z },
| |
| right = { [1] = number x, [2] = number y, [3] = number z },
| |
| top = { [1] = number x, [2] = number y, [3] = number z },
| |
| bottom = { [1] = number x, [2] = number y, [3] = number z },
| |
| leftside = { [1] = number x, [2] = number y, [3] = number z },
| |
| rightside = { [1] = number x, [2] = number y, [3] = number z }
| |
| }
| |
|
| |
|
| === Inview ===
| | '''gl.SetShaderParameter''' |
| '''Spring.GetVisibleUnits''' | | <font color="#ff0000">Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance).</font> |
| ( [number teamID = -1 [, number radius = 30 [, boolean Icons = true ]]] )
| | <font color="#55ee99">needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)</font> |
| -> nil | unitTable = { [1] = number unitID, ... }
| | ( number shaderID, number param, number value ) -> nil |
| '''Spring.GetVisibleFeatures'''
| |
| ( [number allyTeamID = -1 [, number radius = 30 [, boolean Icons = true [, boolean geos = true ]]]] ) | |
| -> nil | featureTable = { [1] = number featureID, ... }
| |
|
| |
|
| '''Spring.IsAABBInView''' | | '''gl.SetTesselationShaderParameter''' |
| ( number minX, number minY, number minZ,
| | <font color="#0000ee">Available for spring versions >= 104.0.1-596 (maintenance).</font> |
| number maxX, number maxY, number maxZ ) -> nil | boolean
| | <font color="#55ee99">needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)</font> |
| '''Spring.IsSphereInView'''
| | ( number param, number value ) -> nil |
| ( number x, number y, number z [, number radius ] ) -> nil | boolean
| |
| '''Spring.IsUnitIcon'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.IsUnitInView'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.IsUnitVisible'''
| |
| ( number unitID [, number radius [, boolean checkIcons] ] ) -> nil | boolean | |
|
| |
|
| === Screen Trace ===
| | '''gl.GetActiveUniforms''' |
| '''Spring.WorldToScreenCoords''' | | ( number shaderID ) -> { |
| ( number x, number y, number z ) -> number x, number y, number z | | [1] = { name = "name", type = "type", length = number length, size = number size }, |
| | ... |
| | } |
|
| |
|
| '''Spring.TraceScreenRay''' | | '''gl.GetUniformLocation''' |
| | ( number shaderID, name uniformName ) -> number locationID |
|
| |
|
| ( number mouseX, number mouseY [, boolean onlyCoords | | '''gl.Uniform''' |
| [, boolean useMinimap [, boolean includeSky [, boolean ignoreWater [, number D] ] ] ] ] )
| | ( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil |
| -> nil |
| |
| string "unit", number unitID |
| |
| string "feature", number featureID |
| |
| string "ground", { [1] = number x, [2] = number y, [3] = number z }
| |
|
| |
|
| {{new|101.0}} Exended to allow a custom plane, parameters are (0, 1, 0, D=0) where D is the offset D can be specified in the third argument (if all the bools are false) or in the seventh (as shown). Intersection coordinates are returned in t[4],t[5],t[6] when the ray goes offmap and includeSky is true), or when no unit or feature is hit (or onlyCoords is true). This will only work for units & objects with the default collission sphere. Per Piece collission and custom collission objects are not supported. The unit must be selectable, to appear to a screen trace ray.
| | '''gl.UniformInt''' |
| | ( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil |
|
| |
|
| to get map coordinates under mouse cursor: input mouse coordinates obtained via GetMouseState() and pass true for the onlyCoords parameter. Be careful as going off map will result in nil:
| | '''gl.UniformArray''' {{new|95.0}} |
| local mouseX, mouseY = Spring.GetMouseState()
| | ( number locationID, number type, table uniforms ) -> nil |
| print ("Mouse coordinates: (" .. mouseX .. ", " .. mouseY .. ")")
| | <span class="note">type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.</span> |
| local desc, args = Spring.TraceScreenRay(mouseX, mouseY, true)
| |
| if nil == desc then return end -- off map
| |
| local x = args[1]
| |
| local y = args[2]
| |
| local z = args[3]
| |
| print ("World coordinates: (" .. x .. ", " .. y .. ", " .. z .. ")")
| |
|
| |
|
| | | '''gl.UniformMatrix''' |
| '''Spring.GetPixelDir''' {{New|95.0}}
| | ( number locationID, |
| ( number x, number y ) -> number dirx, number diry, number dirz
| | "shadow" | |
| | | "camera" | |
| === Screen & Window Geometry ===
| | "caminv" | |
| '''Spring.GetViewGeometry'''
| | "camprj" | |
| ( ) -> number viewSizeX, number viewSizeY, number viewPosX, number viewPosY
| | number m1, number m2, number m3, number m4 | |
| '''Spring.GetWindowGeometry'''
| | number m1, ... , number m9 | |
| ( ) -> number winSizeX, number winSizeY, number winPosX, number winPosY
| | number m1, ... , number m16 |
| '''Spring.GetScreenGeometry''' (is missing multiscreen support!)
| | ) -> nil |
| ( ) -> number screenSizeX, number screenSizeY, number ZERO, number ZERO
| |
| | |
| == Unit ==
| |
| '''Spring.IsUnitAllied'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.GetUnitViewPosition'''
| |
| ( number unitID [, boolean midPos = false ] ) -> nil | number x, number y, number z
| |
| '''Spring.GetUnitTransformMatrix'''
| |
| ( number unitID [, boolean invert = false] ) -> nil | number a11, number a12 ..., number a44 <span class=note>(4x4 matrix)</span>
| |
| '''Spring.GetUnitSelectionVolumeData'''
| |
| ( number unitID )
| |
| -> number scaleX, number scaleY, number scaleZ,
| |
| number offsetX, number offsetY, number offsetZ,
| |
| number volumeType, number testType, number primaryAxis, boolean disabled
| |
| | |
| === Selected Units ===
| |
| '''Spring.GetSelectedUnits'''
| |
| ( ) -> { [1] = unitID, ... }
| |
| '''Spring.GetSelectedUnitsSorted'''
| |
| ( ) -> { [number unitDefID] = { [1] = [number unitID], etc...}, ... }
| |
| '''Spring.GetSelectedUnitsCounts'''
| |
| ( ) -> { [number unitDefID] = number count, etc... }
| |
| '''Spring.GetSelectedUnitsCount'''
| |
| ( ) -> number count
| |
| '''Spring.IsUnitSelected'''
| |
| ( number unitID ) -> nil | boolean
| |
| | |
| === Unit Groups ===
| |
| '''Spring.GetUnitGroup'''
| |
| ( number unitID ) -> nil | number
| |
| | |
| '''Spring.GetGroupList'''
| |
| ( ) -> nil | {
| |
| [number] = number unitCount,
| |
| ...
| |
| }
| |
| '''Spring.GetSelectedGroup'''
| |
| ( ) -> number
| |
| '''Spring.GetGroupAIName'''
| |
| ( number groupID ) -> string aiName
| |
| '''Spring.GetGroupAIList'''
| |
| ( ) -> {
| |
| [1] = string aiName, ...
| |
| }
| |
| | |
| '''Spring.GetGroupUnits'''
| |
| ( number groupID ) -> nil | {
| |
| [1] = number unitID, ...
| |
| }
| |
| '''Spring.GetGroupUnitsSorted'''
| |
| ( number groupID ) -> nil | {
| |
| [number unitDefID] = {number unitID, ...}, ...
| |
| }
| |
| '''Spring.GetGroupUnitsCounts'''
| |
| ( number groupID ) -> nil | {
| |
| [number unitDefID] = number count, ...
| |
| }
| |
| '''Spring.GetGroupUnitsCount''' | |
| ( number groupID ) -> nil | number count | |
| | |
| == Feature ==
| |
| '''Spring.GetFeatureSelectionVolumeData'''
| |
| ( number unitID )
| |
| -> number scaleX, number scaleY, number scaleZ,
| |
| number offsetX, number offsetY, number offsetZ,
| |
| number volumeType, number testType, number primaryAxis, boolean disabled
| |
| | |
| == Projectiles ==
| |
| '''Spring.GetVisibleProjectiles''' {{New|95.0}}
| |
| ([ number allyTeamID = -1
| |
| [ , boolean addSyncedProjectiles = true
| |
| [ , boolean addWeaponProjectiles = true
| |
| [ , boolean addPieceProjectiles = true ]]]]
| |
| ) --> nil | {[1] = projectileID, ...}
| |
| | |
| | |
| == UI ==
| |
| '''Spring.GetUICommands''' {{new|101.0}}
| |
| ( ) -> nil | {
| |
| [1] = {
| |
| command=string,
| |
| description=string,
| |
| synced=bool,
| |
| cheat=bool,
| |
| }, ... | |
| }
| |
| Returns a list of available [[UI commands]].
| |
| | |
| === GUI Settings ===
| |
| '''Spring.IsGUIHidden'''
| |
| ( ) -> nil | boolean
| |
| '''Spring.HaveShadows'''
| |
| ( ) -> nil | boolean
| |
| '''Spring.HaveAdvShading'''
| |
| ( ) -> nil | boolean
| |
| '''Spring.GetWaterMode'''
| |
| ( ) -> nil | number mode, string "mode"
| |
| | |
| <font color="#55ee99"> mode numbers:
| |
| 0 - basic
| |
| 1 - reflective
| |
| 2 - dynamic
| |
| 3 - refractive
| |
| 4 - bumpwater
| |
| default - unknown</font>
| |
| '''Spring.GetMapDrawMode'''
| |
| ( ) -> nil | "normal" | "height" | "metal" | "pathTraversability" | "los"
| |
| '''Spring.GetDrawSelectionInfo''' <font color="#55ee99">Returns whether "Selected units" text is displayed.</font>
| |
| ( ) -> boolean
| |
| | |
| === Unit & Feature GUI States ===
| |
| '''Spring.GetUnitLuaDraw'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.GetUnitNoDraw'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.GetUnitNoMinimap'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.GetUnitNoSelect'''
| |
| ( number unitID ) -> nil | boolean
| |
| '''Spring.GetFeatureLuaDraw'''
| |
| ( number featureID ) -> nil | boolean
| |
| '''Spring.GetFeatureNoDraw'''
| |
| ( number featureID ) -> nil | boolean
| |
| | |
| === Minimap ===
| |
| '''Spring.GetMiniMapGeometry'''
| |
| ( ) -> number posX, number posY, number sizeX, number sizeY,
| |
| boolean minimized, boolean maximized | |
| '''Spring.GetMiniMapDualScreen'''
| |
| ( ) -> boolean false | string "left" | string "right"
| |
| '''Spring.IsAboveMiniMap'''
| |
| ( number x, number y ) -> nil | boolean
| |
| | |
| | |
| === (Build-)Menu ===
| |
| '''Spring.GetActiveCommand'''
| |
| ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)
| |
| '''Spring.GetDefaultCommand'''
| |
| ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)
| |
| '''Spring.GetActiveCmdDescs'''
| |
| ( ) -> nil | {
| |
| [1] = {
| |
| id=number,
| |
| type=number,
| |
| name=string,
| |
| action=string,
| |
| tooltip=string,
| |
| texture=string,
| |
| cursor=string,
| |
| hidden=boolean,
| |
| disabled=boolean,
| |
| showUnique=boolean,
| |
| onlyTexture=boolean,
| |
| params = { [1] = string, .. }
| |
| }, ... | |
| }
| |
| '''Spring.GetActiveCmdDesc'''
| |
| ( number index ) -> nil | {
| |
| id=number,
| |
| type=number,
| |
| name=string,
| |
| action=string,
| |
| tooltip=string,
| |
| texture=string,
| |
| cursor=string,
| |
| hidden=boolean,
| |
| disabled=boolean,
| |
| showUnique=boolean,
| |
| onlyTexture=boolean,
| |
| params = { [1] = string, .. }
| |
| }
| |
| '''Spring.GetCmdDescIndex'''
| |
| ( number cmdID ) -> nil | number index
| |
| '''Spring.GetActivePage'''
| |
| ( ) -> nil | number pageNum, number maxPages
| |
| | |
| === Build Facing ===
| |
| '''Spring.GetBuildFacing'''
| |
| ( ) -> nil | number
| |
| '''Spring.GetBuildSpacing'''
| |
| ( ) -> nil | number
| |
| | |
| === GatherMode & InvertQueueKey ===
| |
| '''Spring.GetGatherMode'''
| |
| ( ) -> nil | number
| |
| '''Spring.GetInvertQueueKey'''
| |
| ( ) -> nil | boolean
| |
| | |
| === Mouse States ===
| |
| '''Spring.GetMouseState'''
| |
| | |
| ( ) -> number X, number Y,
| |
| boolean leftPressed, boolean middlePressed, boolean rightPressed,
| |
| boolean offscreen
| |
| | |
| X, Y are the screen coordinates, not world ones. This coordinate system starts in the lower left corner.
| |
| | |
| {{new|104.0}} Sixth return value offscreen
| |
| | |
| For world coordinates see Spring.TraceScreenRay
| |
| | |
| '''Spring.GetMouseCursor'''
| |
| ( ) -> string name, number scale
| |
| '''Spring.GetMouseStartPosition'''
| |
| ( number mouseButton ) -> nil | number pressedX, number pressedY,
| |
| number camPosX, number camPosY, number camPosZ,
| |
| number dirX, number dirY, number dirZ
| |
| | |
| === (Hot-)Keys ===
| |
| '''Spring.GetKeyState'''
| |
| ( number key ) -> nil | boolean
| |
| '''Spring.GetModKeyState'''
| |
| ( ) -> boolean alt, boolean ctrl, boolean meta, boolean shift
| |
| '''Spring.GetPressedKeys'''
| |
| ( ) -> {
| |
| [number code] = boolean,
| |
| [string name] = boolean, {{new|99.0}}
| |
| ...
| |
| }
| |
| | |
| '''Spring.GetKeyCode'''
| |
| ( string keysym ) -> number
| |
| '''Spring.GetKeySymbol'''
| |
| ( number key ) -> string "keysym1", string "keysym2"
| |
| '''Spring.GetKeyBindings'''
| |
| ( string keyset ) -> nil | {
| |
| [1] = {
| |
| [string actionCmd] = string actionExtra,
| |
| command = string actionCmd, {{new|97}}
| |
| boundWith = string boundWith, {{new|97}}
| |
| extra = string actionExtra, {{new|97}}
| |
| }, ...
| |
| }
| |
| '''Spring.GetActionHotKeys'''
| |
| ( string action ) -> nil | { [1] = string hotKey, ... }
| |
| | |
| === Console ===
| |
| '''Spring.GetLastMessagePositions'''
| |
| ( ) -> nil | {
| |
| [1] = { number X, number Y, number Z }, | |
| ...
| |
| }
| |
| '''Spring.GetConsoleBuffer'''
| |
| ( [number maxLines] ) -> nil | {
| |
| [1] = { | |
| text = string,
| |
| priority = number
| |
| }, ...
| |
| }
| |
| '''Spring.GetCurrentTooltip'''
| |
| ( ) -> string
| |
| | |
| === LOS Colors ===
| |
| '''Spring.GetLosViewColors'''
| |
| | |
| ( ) -> always = {r,g,b}, LOS = {r,g,b}, radar = {r,g,b}, jam = {r,g,b}, radar2 = {r,g,b} {{new|100}}
| |
| | |
| == Config ==
| |
| '''Spring.GetConfigParams''' <span class="note">same information as <code>spring --list-config-vars</code></span>
| |
| ( ) -> table {
| |
| { | |
| name = string,
| |
| type = string,
| |
| [ description = string, ]
| |
| [ defaultValue = string, ]
| |
| [ minimumValue = string, ]
| |
| [ maximumValue = string, ]
| |
| [ safemodeValue = string, ]
| |
| [ declarationFile = string, ]
| |
| [ declarationLine = number, ]
| |
| [ readOnly = bool, ]
| |
| },
| |
| ...
| |
| }
| |
| | |
| '''Spring.GetConfigInt'''
| |
| ( string name [, number default ] ) -> nil | number
| |
| | |
| '''Spring.GetConfigFloat''' {{new|104.0}}
| |
| ( string name [, number default ] ) -> nil | number
| |
| | |
| '''Spring.GetConfigString'''
| |
| ( string name [, string default ] ) -> nil | string | |
| | |
| == FPS & GetDrawFrame ==
| |
| '''Spring.GetFPS'''
| |
| ( ) -> number
| |
| '''Spring.GetDrawFrame'''
| |
| ( ) -> number low 16bit, number high 16bit
| |
| '''Spring.GetVideoCapturingMode''' {{new|104.0}}
| |
| ( ) -> boolean videoCaptureAllowed
| |
| | |
| == Time ==
| |
| '''Spring.GetGameSpeed''' {{new|98.0}}
| |
| ( ) -> number userSpeedFactor, number speedFactor, boolean paused
| |
| '''Spring.GetGameState''' {{new|105.0}}
| |
| ( ) -> boolean finishedLoading, boolean loadedFromSave, boolean locallyPaused, boolean laggingWrtExpectedFromSimtime
| |
| '''Spring.GetFrameTimeOffset'''
| |
| ( ) -> nil | number
| |
| '''Spring.GetLastUpdateSeconds'''
| |
| ( ) -> nil | number
| |
| '''Spring.GetHasLag'''
| |
| ( ) -> boolean
| |
| '''Spring.GetTimer'''
| |
| ( ) -> timer
| |
| '''Spring.GetFrameTimer''' {{new|102.0}}
| |
| ( ) -> timer
| |
| <span class="note">Get a timer for the start of the frame, this should give better results for camera interpolations.</span>
| |
| | |
| '''Spring.DiffTimers'''
| |
| ( timer cur, timer ago, [boolean inMilliseconds]) -> number seconds
| |
| {{New|95.0}} optional third argument (boolean) to return dt in milliseconds
| |
| | |
| == Rendering ==
| |
| | |
| '''Spring.GetMapSquareTexture'''
| |
| (number texSqrX, number texSqrY, number texMipLvl, string luaTexName) -> boolean success
| |
| | |
| == Logging ==
| |
| '''Spring.GetLogSections'''
| |
| ( ) -> table { "KeyBindings" = LOG.INFO, "Font" = LOG.INFO, "Sound" = LOG.WARNING, ... }
| |
| | |
| == Misc ==
| |
| '''Spring.GetClipboard''' {{new|98.0}}
| |
| ( ) -> string text
| |
|
| |
|
| [[category: Lua]] | | [[category: Lua]] |
Development < Lua Scripting < User:Master-athmos
These functions are ONLY available if the graphic board supports GLSL.
Please test in your scripts if one of them exists before you use them!
gl.CreateShader
({[ vertex = "glsl code" ,]
[ tcs = "glsl code" ,]
[ tes = "glsl code" ,]
[ geometry = "glsl code" ,]
[ fragment = "glsl code" ,]
[ uniform = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
[ uniformInt = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
[ uniformFloat = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
[ uniformMatrix = { uniformName = number value, ...} ,]
[ geoInputType = number inType,]
[ geoOutputType = number outType,]
[ geoOutputVerts = number maxVerts,]
[ definitions = "string of shader #defines", ]
}) -> number shaderID
- The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc.
- The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points.
- The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
- The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
- The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed.
- The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this:
<syntaxhighlight lang="c">uniform float frame;</syntaxhighlight>
- From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared;
<syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight>
gl.DeleteShader
( number shaderID ) -> nil
gl.ActiveShader can be used in NON-drawing events (to update uniforms etc.)!
( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil
gl.UseShader
( number shaderID ) -> boolean linked
gl.GetShaderLog
( ) -> string "infoLog"
gl.SetShaderParameter
Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance).
needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)
( number shaderID, number param, number value ) -> nil
gl.SetTesselationShaderParameter
Available for spring versions >= 104.0.1-596 (maintenance).
needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)
( number param, number value ) -> nil
gl.GetActiveUniforms
( number shaderID ) -> {
[1] = { name = "name", type = "type", length = number length, size = number size },
...
}
gl.GetUniformLocation
( number shaderID, name uniformName ) -> number locationID
gl.Uniform
( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil
gl.UniformInt
( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil
gl.UniformArray New in version 95.0
( number locationID, number type, table uniforms ) -> nil
type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.
gl.UniformMatrix
( number locationID,
"shadow" |
"camera" |
"caminv" |
"camprj" |
number m1, number m2, number m3, number m4 |
number m1, ... , number m9 |
number m1, ... , number m16
) -> nil