Shader: setUniform4i

setUniform4i(name,  i1, i2, i3, i4)
  • passes four integer values from the main program to the vertex or fragment program.

name:

  • Type: string
  • one name for the four integer values
i1:
  • Type: integer
  • the first integer value
i2:
  • Type: integer
  • the second integer value
i3:
  • Type: integer
  • the third integer value
i4:
  • Type: integer
  • the fourth integer value
Note:
  • Shaders work with Viewport Shading GLSL and Viewport Shading Multitexture.
     
  • Shaders don't work with Viewport Shading Singletexture.
Sample Code

############################# pass 4 integer values

############## main program

def main():

# import bge
import bge

# get the current controller
controller = bge.logic.getCurrentController()

# get object that owns this controller
obj = controller.owner
 
# Get a list of the mesh
meshList = obj.meshes

# Get the first mesh on the object
mesh = meshList[0]
 
# only one material on mesh
mat = mesh.materials[0]

# Using Blender GLSL Materials or Blender Multitexture Materials?
if hasattr( mat, 'getMaterialIndex') == True:
 
# get shader envelope
shader = mat.getShader()

# did it get the shader envelope?
if shader != None:
 
# set the source and use it
shader.setSource(VertexProgram,FragmentProgram, True)

# name a integer variable and pass it to shader
shader.setUniform4i("min_max_start_end", 0, 15, 5, 15)
 

####### end of main program

VertexProgram =  """

void main() {

// OpenGL glsl code
gl_Position = ftransform(); 

}
"""

FragmentProgram = """

// integer passed from main program
uniform ivec4 min_max_start_end;

void main()
{

// openGL code that uses integers

}

"""

############  Run Program

main()