FreeBSD Manual Pages
build_shader(3) Arcan Lua API build_shader(3) NAME build_shader - using SYNOPSIS uint:shader_id build_shader( string/nil:vertex_program, string/nil:fragment_program, string:label ) DESCRIPTION All video objects can have a series of processing/ rendering instruc- tions associated with them. These are platform dependent, and you can check ( GL_VERSION , SHADER_LANGUAGE ) for identification strings to help support your choice, and the most commonly supported shader lan- guage is currently GLSL 120. This function is used to go from a higher level description (like a string) to some implementation defined inter- nal interpretation that can later be referenced and connected to VID s using the returned shader_id or the label . vertex_program describes the processing stage that determines the shape of the object to be drawn, and fragment_program the content that will be filled inside the shape. Both of these are allowed to be nil, and the engine will then use whatever platform specific default that is defined. A shader can also have a set of limited user-defined variables, called _uniforms_ (see shader_uniform for details) along with a number of built in ones (see the notes below). If the contents of the supplied vertex_program or fragment_program could not be interpreted, or there was insuffi- cient shader slots left to create another one, the returned shader_id will be nil. To associate a successfully built shader to a vid, see im- age_shader . NOTES 1 For GLSL 120, reserved attributes are: vertex (vec4), normal (vec3), color (vec4), texcoord (vec2), texcoord1 (vec2), tangent (vec3), bitangent (vec3), joints (ivec4), weights (vec4) 2 For GLSL 120, reserved uniforms are: modelview (mat4), projec- tion (mat4), texturem (mat4), trans_move (float, 0.0 .. 1.0), trans_scale (float, 0.0 .. 1.0) trans_rotate (float, 0.0 .. 1.0), obj_input_sz (vec2, orig w/h) obj_output_sz (vec2, current w/h), obj_storage_sz (vec2, texture storage w/h), obj_opac- ity(float, 0.0 .. 1.0), obj_col (vec3, 0.0 .. 1.0), rtgt_id (uint), fract_timestamp (float), timestamp (int) EXAMPLE local shfmt = {}; shfmt["GLSL120"].vertex = [[ uniform mat4 modelview; uniform mat4 projection; attribute vec4 vertex; attribute vec2 texcoord; varying vec2 texco; void build_shader0(void) { texco = texcoord; gl_Position = (projection * modelview) * vertex; } ]]; shfmt["GLSL120"].fragment = [[ uniform sampler2D map_diffuse; uniform float obj_opacity; varying vec2 texco; void build_shader0(){ vec4 col = texture2D(map_diffuse, texco); col.a = col.a * obj_opacity; gl_FragColor = col; } ]]; function build_shader0() local sh = shfmt[SHADER_LANGUAGE]; if (sh == nil) then return shutdown("no matching shader for the platform language:" .. SHADER_LANGUAGE, EXIT_FAILURE); end build_shader(sh.vertex, sh.fragment, "default"); end MISUSE local shfmt = {}; shfmt["GLSL120"].vertex = [[ uniform mat4 modelview; uniform mat4 projection; attribute vec4 vertex; attribute vec2 texcoord; varying vec2 texco; void build_shader0(void) { texco = texcoord; gl_Position = (projection * modelview) * vertex; } ]]; shfmt["GLSL120"].fragment = [[ uniform sampler2D map_diffuse; uniform float obj_opacity; varying vec2 texco; void build_shader0(){ vec4 col = texture2D(map_diffuse, texco); col.a = col.a * obj_opacity; gl_FragColor = col; } ]]; function build_shader0() local sh = shfmt[SHADER_LANGUAGE]; if (sh == nil) then return shutdown("no matching shader for the platform language:" .. SHADER_LANGUAGE, EXIT_FAILURE); end build_shader(nil, nil, nil); end MISUSE local shfmt = {}; shfmt["GLSL120"].vertex = [[ uniform mat4 modelview; uniform mat4 projection; attribute vec4 vertex; attribute vec2 texcoord; varying vec2 texco; void build_shader1(void) { texco = texcoord; gl_Position = (projection * modelview) * vertex; } ]]; shfmt["GLSL120"].fragment = [[ uniform sampler2D map_diffuse; uniform float obj_opacity; varying vec2 texco; void build_shader1(){ vec4 col = texture2D(map_diffuse, texco); col.a = col.a * obj_opacity; gl_FragColor = col; } ]]; function build_shader1() local sh = shfmt[SHADER_LANGUAGE]; if (sh == nil) then return shutdown("no matching shader for the platform language:" .. SHADER_LANGUAGE, EXIT_FAILURE); end build_shader(vshader, fshader, 0.5); end SEE ALSO: shader_uniform(3) image_shader(3) shader_ugroup(3) delete_shader(3) vidsys April 2025 build_shader(3)
NAME | SYNOPSIS | DESCRIPTION | NOTES | EXAMPLE | MISUSE | MISUSE | SEE ALSO:
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=build_shader&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>