Quick Links
  • Homepage
        - Overview
        - Download
        - Screenshots
        - Community
  • Code Sample Pack
  • Reference Guide
  • Changelog
  • Overview of GLSL Hacker
  • Live Coding
  • Hack your first GLSL Code
  • Moon3D




  • GLSL Hacker Articles

    > Compute shaders on Radeon
    > Distance functions in GLSL
    > GLSL Interpolation Qualifiers
    > Tessellation Spacing Modes
    > Normal Visualizer with GS
    > 3D Surface Plots
    > Normal Mapping
    > Circle and Disc in GLSL
    > PhysX 3 Flag Demo
    > GLSL Hacker on Raspberry Pi
    GLSL Hacker

    Reference Guide
    Host-API Lua / Python



    Back to Homepage
    Back to Developer's Guide Index

    gh_gpu_program Library


    Description
    gh_gpu_program is the module that manages GPU programs based on the GLSL language: creation, destruction, binding, uniforms settings.

    Number of functions: 36

    gh_gpu_program.create

    Description
    Creates a GLSL program from vertex (vs), pixel (ps), geometry (gs), tessellation control and evaluation (tcs and tes) or compute (cs) shaders.

    Languages: Lua - Python

    Parameters
  • vs [STRING]: vertex shader source code string.
  • ps [STRING]: pixel shader source code string.
  • gs [STRING]: geometry shader source code string.
  • tcs [STRING]: tessellation control shader source code string.
  • tes [STRING]: tessellation eval shader source code string.
  • cs [STRING]: compute shader source code string.

    Return Values
  • gpu_program [INTEGER]: gpu program identifier

    Code sample :

    vs = "......"
    ps = "......"
    gpu_prog = gh_gpu_program.create(vs, ps, "", "", "", "")


    gh_gpu_program.create_from_file

    Description
    Loads a GLSL source code from file and creates a new GPU program node (actually a resource).

    Languages: Lua - Python

    Parameters
  • filename [STRING]: GPU program source code filename.
  • absolute_path [INTEGER]: Specifies if the path to the filename is relative (0) or absolute (1).

    Return Values
  • gpu_program [INTEGER]: gpu program identifier

    Code sample :

    abs_path = 0 -- relative path
    gpu_prog = gh_gpu_program.create_from_file("data/shader.glsl", abs_path)


    gh_gpu_program.bind

    Description
    Binds (makes it active) the GPU program to the renderer. To unbind a GPU program, just pass 0 as gpu program identifier.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.

    Code sample :

    gh_gpu_program.bind(gpu_prog) -- Binding
    ...
    gh_gpu_program.bind(0) -- Unbinding


    gh_gpu_program.run_compute

    Description
    Runs a compute program (OpenGL 4.3+ feature). See also: OpenGL 4.3: Compute Shaders Details (GL_ARB_compute_shader)

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • num_groups_x, num_groups_y, num_groups_z [INTEGER]: Specifies the number of local work groups that will be dispatched in the X, Y and Z dimensions.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.run_compute(gpu_prog, 16, 16, 16)


    gh_gpu_program.uniform1i

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x [INTEGER]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1i(gpu_prog, "index", 2)


    gh_gpu_program.uniform2i

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y [INTEGER]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform2i(gpu_prog, "rg", 250, 25)


    gh_gpu_program.uniform3i

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z [INTEGER]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform3i(gpu_prog, "rgb", 250, 25, 45)


    gh_gpu_program.uniform4i

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z, w [INTEGER]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4i(gpu_prog, "rgba", 250, 25, 45, 100)


    gh_gpu_program.uniform1iv

    Description
    Sets the value of an uniform array.

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    material_ids = {}
    InitMaterialIDs(material_ids)
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1iv(gpu_prog, "material_ids", material_ids, 10)


    gh_gpu_program.uniform1fv

    Description
    Sets the value of an uniform array.

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    temperatures = {}
    InitTemperatures(temperatures)
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1fv(gpu_prog, "temperatures", 10, temperatures)


    gh_gpu_program.uniform2fv

    Description
    Sets the value of an uniform array.

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    uv = {} -- array element: {x=0, y=0}
    InitUV(uv)
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform2fv(gpu_prog, "uv", 10, uv)


    gh_gpu_program.uniform3fv

    Description
    Sets the value of an uniform array.

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    xyz = {} -- array element: {x=0, y=0, z=0}
    InitXYZ(xyz)
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform3fv(gpu_prog, "xyz", 10, xyz)


    gh_gpu_program.uniform4fv

    Description
    Sets the value of an uniform array.

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    xyzw = {} -- array element: {x=0, y=0, z=0, w=0}
    InitXYZW(xyzw)
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4fv(gpu_prog, "xyzw", 10, xyzw)


    gh_gpu_program.uniform1f

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x [REAL]: Uniform value.

    Code sample :

    elapsed_time = gh_utils.get_elapsed_time()
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1f(gpu_prog, "time", elapsed_time)


    gh_gpu_program.uniform2f

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y [REAL]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform2f(gpu_prog, "uv", 0.1, 1.0)


    gh_gpu_program.uniform3f

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z [REAL]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform3f(gpu_prog, "rgb", 0.25, 0.25, 0.45)


    gh_gpu_program.uniform4f

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z, w [REAL]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4f(gpu_prog, "rgba", 0.25, 0.25, 0.45, 1.0)


    gh_gpu_program.uniform1d

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x [DOUBLE]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1d(gpu_prog, "r", 0.25)


    gh_gpu_program.uniform2d

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y [DOUBLE]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform2d(gpu_prog, "rg", 0.25, 0.22)


    gh_gpu_program.uniform3d

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z [DOUBLE]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform3d(gpu_prog, "rgb", 0.25, 0.25, 0.45)


    gh_gpu_program.uniform4d

    Description
    Sets the value of an uniform variable.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z, w [DOUBLE]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4d(gpu_prog, "rgba", 0.25, 0.25, 0.45, 1.0)


    gh_gpu_program.uniform1ui64

    Description
    Sets the value of an uniform variable. Useful with bindless texture (OpenGL 4.4)

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x [INTEGER]: Uniform value.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1ui64(gpu_prog, "tex", bindless_texture_handle)


    gh_gpu_program.uniform1ui64v

    Description
    Sets the value of an uniform array. Useful with bindless texture (OpenGL 4.4)

    Languages: Lua

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • array_count [INTEGER]: number of entries of the uniform array.
  • array [TABLE]: uniform array.

    Code sample :

    all_texture_handles = {}
    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform1ui64v(gpu_prog, "all_textures", 32, all_texture_handles)


    gh_gpu_program.uniform4i_array

    Description
    Sets the value of an uniform array of vec4i. Currently limited to one vec4i.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z, w [INTEGER]: Uniform value. The four elements of an uniform array: int xyzw[4]

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4i_array(gpu_prog, "all_textures", 0, 1, 2, 3)


    gh_gpu_program.uniform4f_array

    Description
    Sets the value of an uniform array of vec4. Currently limited to one vec4.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • uniform_name [STRING]: Uniform name.
  • x, y, z, w [REAL]: Uniform value. The four elements of an uniform array: float xyzw[4]

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.uniform4f_array(gpu_prog, "all_params", 0.2, 10.4, 0.003, 0.001)


    gh_gpu_program.set_vertex_attrib_name

    Description
    Sets the name of a vertex attribute.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • vertex_index [INTEGER]: vertex attribute index.
  • name [STRING]: vertex attrib name.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    gh_gpu_program.set_vertex_attrib_name(gpu_prog, 0, "gxl3d_Position")


    gh_gpu_program.get_vertex_attrib_name

    Description
    Gets the name of a vertex attribute.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • vertex_index [INTEGER]: vertex attribute index.

    Return Values
  • name [STRING]: vertex attrib name.

    Code sample :

    gh_gpu_program.bind(gpu_prog)
    name = gh_gpu_program.get_vertex_attrib_name(gpu_prog, 0)


    gh_gpu_program.uniform_subroutine

    Description
    Sets the matrices of a camera as uniforms.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • shader_type [INTEGER]: type of the shader.
  • subroutine_uniform_name [STRING]: uniform name of the subroutine.
  • subroutine_name [STRING]: name of the real subroutine.

    Code sample :

    GPU_SHADER_VERTEX = 0
    GPU_SHADER_PIXEL = 1
    GPU_SHADER_GEOMETRY = 2
    GPU_SHADER_TESS_CONTROL = 3
    GPU_SHADER_TESS_EVAL = 4
    GPU_SHADER_COMPUTE = 5
    gh_gpu_program.uniform_subroutine(gpu_prog, GPU_SHADER_PIXEL, "Color", "ColorBlue")


    gh_gpu_program.uniform_camera_matrices

    Description
    Sets the matrices of a camera as uniforms.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • camera [INTEGER]: camera identifier.
  • uniform_name_view_mat [STRING]: uniform name of the view matrix.
  • uniform_name_proj_mat [STRING]: uniform name of the projection matrix.

    Code sample :

    gh_gpu_program.uniform_camera_matrices(gpu_prog, camera, "ViewMat", "ProjMat")


    gh_gpu_program.set_uniform_object_matrix

    Description
    Sets the local matrix of an object as uniform.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • object [INTEGER]: camera identifier.
  • uniform_name_mat [STRING]: uniform name of the matrix.

    Code sample :

    gh_gpu_program.set_uniform_object_matrix(gpu_prog, object, "ModelMat")


    gh_gpu_program.get_interface_block_index

    Description
    Gets the index of an interface block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • block_type [STRING]: type of the block: 'UNIFORM', 'SHADER_STORAGE'
  • block_name [STRING]: name of the block

    Return Values
  • block_index [INTEGER]: block index.

    Code sample :

    index = gh_gpu_program.get_interface_block_index(gpu_prog, "UNIFORM", "CameraMatrix")


    gh_gpu_program.get_uniform_block_size

    Description
    Gets the size in bytes of an uniform block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • block_index [INTEGER]: block index

    Return Values
  • block_size [INTEGER]: block size in bytes.

    Code sample :

    index = gh_gpu_program.get_interface_block_index(gpu_prog, "UNIFORM", "CameraMatrix")
    size = gh_gpu_program.get_uniform_block_size(gpu_prog, index)


    gh_gpu_program.set_uniform_block_binding

    Description
    Sets the buffer binding point of an uniform block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • block_index [INTEGER]: block index
  • binding_point_index [INTEGER]: index of a GPU buffer binding point

    Code sample :

    gh_gpu_program.set_uniform_block_binding(gpu_prog, index, 2)


    gh_gpu_program.get_uniform_size_and_offset

    Description
    Gets the size and offset in bytes of a variable inside an uniform block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • variable_name [STRING]: name of the variable

    Return Values
  • size, offset [INTEGER]: size and offset in bytes.

    Code sample :

    size, offset = gh_gpu_program.get_uniform_size_and_offset(gpu_prog, "positions")


    gh_gpu_program.get_uniform_array_stride

    Description
    Gets the stride in bytes of an array inside an uniform block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • variable_name [STRING]: name of the variable

    Return Values
  • stride [INTEGER]: stride in bytes.

    Code sample :

    stride = gh_gpu_program.get_uniform_array_stride(gpu_prog, "positions")


    gh_gpu_program.set_shader_storage_block_binding

    Description
    Sets the buffer binding point of a shader storage block.

    Languages: Lua - Python

    Parameters
  • gpu_program [INTEGER]: gpu program identifier.
  • block_index [INTEGER]: block index
  • binding_point_index [INTEGER]: index of a GPU buffer binding point

    Code sample :

    gh_gpu_program.set_shader_storage_block_binding(gpu_prog, index, 3)





  • (C)2012-2014 Geeks3D