Blender 3D game engine: BL_Shader
Methods:
delSource setUniform2i
getFragmentProg setUniform3f
getVertexProg setUniform3i
isValid setUniform4f
setAttrib setUniform4i
setNumberOfPasses setUniformDef
setSampler setUniformMatrix3
setSource setUniformMatrix4
setUniform1f setUniformfv
setUniform1i setUniformiv
setUniform2f validate
Variables:
---------- ----------
Constants:
---------- ----------
Inherited
Methods:
isA ----------



Instance Methods

delSource

delSource( )

Deletes the shader that was applied to the the material.

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# get object named Cube
objCube = objList["OBCube"]

# only one mesh on example cube
mesh = objCube.getMesh(0)

# only one material on mesh
mat = mesh.materials[0]

# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 

# get shader envelope
shader = mat.getShader()

# did it get the shader envelope?
if shader != None:
 
# delete it
shader.delSource()


Example Blend:


getFragmentProg

getFragmentProg( )

Returns the fragment program this shader is using.  It doesn't return the name of the fragment program.  It returns the fragment program.  Every line.  Returns an empty string if the shader wasn't set.

Return type:  string

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# get object named Cube
objCube = objList["OBCube"]
  
# only one mesh on this cube
mesh = objCube.getMesh(0)
  
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
 
# get shader envelope
shader = mat.getShader()

# did it get the shader envelope?
if shader != None:
     
# get fragment program this shader uses
fragProg = shader.getFragmentProg()

getVertexProg

getVertexProg( )

Returns the Vertex program this shader is using.  It doesn't return the name of the vertex program.  It returns the vertex program.  Every line. Returns an empty string if the shader wasn't set.

Return type:  string

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
  
# get object named Cube
objCube = objList["OBCube"]
  
# only one mesh on this cube
mesh = objCube.getMesh(0)
  
# only one material on this mesh
mat = mesh.materials[0]

# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
 
# get shader envelope
shader = mat.getShader()

# did it get the shader envelope?
if shader != None:

# get vertex program this shader uses
vertProg = shader.getVertexProg()

isValid

isValid()

Returns whether or not the shader has been set.

Return type:   bool
1 = True
0 = False

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# get object named Cube
objCube = objList["OBCube"]

# only one  mesh on cube
mesh = objCube.getMesh(0)

# only one material on mesh
mat = mesh.materials[0]

# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 

# get shader envelope on this material
shader = mat.getShader()

# did it get the shader envelope?
if shader != None:
 
# Has it been set?
shaderSet = shader.isValid()

setAttrib

setAttrib(enum)

Note:
Documentation says that it was removed.

setNumberOfPasses

setNumberOfPasses( max-pass )

Sets the number of times the shader is applied to the material.

max-pass:
Type:  Integer

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# get object named Cube
objCube = objList["OBCube"]

# only one mesh on this cube
mesh = objCube.getMesh(0)

# only one material on this mesh
mat = mesh.materials[0]

# Use Blender Materials Checked?
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)

# set number of passes to 3
shader.setNumberOfPasses(3)

####### end of main program def

VertexProgram =

"""

void main()

{

// OpenGL glsl code

gl_Position = ftransform();

}

"""


FragmentProgram =

"""

void main()

{

// set color to green

gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);

}

"""


# run the program
main()


Example Blend:


setSampler

setSampler(name, index)

Sets the sampler.  (This defines which texture will be used and how.)

name:        
Type:   string

sampler2D:     
Used for textures.

samplerCube:
Used for an cube map.  (Also known as environment maps. )

index:
Type:  integer

Note:
index is the position of the texture in Blender's Texture tab.
First position is 0.  Second position is 1.  Etc.

sampler2D

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object named Cube
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)
 
# "color" is a texture
# 0 is the 1st Blender texture channel
shader.setSampler("color", 0)

# Vertex shader
VertexProgram =

"""

void main()

{

 

    // OpenGL glsl code

    gl_TexCoord[0] = gl_MultiTexCoord0;  

    gl_Position = ftransform();


}

"""

# Fragment shader
FragmentProgram =

"""


// texture passed from main part of program

uniform sampler2D color;


void main()

{

    // Get texture from color map

    vec3 texture   = (texture2D(color, gl_TexCoord[0].st).xyz);          

      

    // Use it

    gl_FragColor = vec4(texture, 1.0);

  

}


"""

# run the program
main()


Example Blend:


samplerCube

Note:
Uses a Blender environment map.  Not an glsl cube map.

Note:
Must be loaded as an environmental map.  Not as an image.

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object named Cube
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)
 
# "color" is a blender environmental map
# 0 is the 1st Blender texture channel
shader.setSampler("color", 0)

# Vertex shader
VertexProgram =

"""

void main()

{

 

    // OpenGL glsl

    gl_TexCoord[0] = gl_MultiTexCoord0;  

    gl_Position = ftransform();


}

"""

# Fragment shader
FragmentProgram =

"""

// texture passed from main part of program

uniform samplerCube color;


void main()

{

    // Get texture from color map

    vec4 texture   = textureCube(color, vec3 (gl_TexCoord[0]));          

      

    // Use it

    gl_FragColor = texture;

  

}


"""

# run the program
main()


Example Blend:


setSource

setSource(vertexProgram, fragmentProgram, apply)

Sets the vertex program and the fragment program that this shader will use.

vertexProgram:
Type:  string

fragmentProgram:
Type:  string

apply:
Type:  bool
   True or 1 = set the material to use the shader.
   False or 0 = set the material to not use the shader

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# get object named Cube
objCube = objList["OBCube"]

# only one mesh on this cube
mesh = objCube.getMesh()

# only one material on this mesh
mat = mesh.materials[0]

# Use Blender Materials Checked?
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)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}

"""


# Import OpenGL code as a string
FragmentProgram =

"""

void main()

{

// Set color to green

gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);

}

"""


# run the program
main()

setUniform1f

setUniform1f(name, fx)

Names a float value and passes it from the main program to the vertex or fragment program.

name:
Type:  string
fx:
Type:  float

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)
 
# name a float variable and pass it to shader
shader.setUniform1f("redChannel", 0.0)

####### end of main program def

# Import OpenGL glsl code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}

"""


# Import OpenGL glsl code as a string
FragmentProgram =

"""

// float passed from main program

uniform float redChannel;


void main()

{

// Turn cube green

gl_FragColor = vec4(redChannel, 1.0, 0.0, 1.0);

}


"""


# run the program
main()

setUniform1i

setUniform1i(name, ix)

Names a interger value and passes it from the main program to the vertex or fragment program.

name:
Type:  string
ix:
Type:  integer

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)
 
# pass  integer  to shader
shader.setUniform1i("Dim", 2)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// integer passed from main program

uniform int Dim;


void main()

{

// Turn cube green half strength

gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0) / Dim;

}


"""


# run the program
main()

setUniform2f

setUniform2f(name, fx, fy)

Used to name two float values and pass them from the main program to the vertex or fragment program.

name:
Type:  string
fx:
Type:  float
fy:
Type:  float

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)
 
# pass vec2 float variable to shader
shader.setUniform2f("RedGreen", 0.0, 1.0)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec2 float passed from main program

uniform vec2 RedGreen;


void main()

{

// Turn cube green

gl_FragColor = vec4( RedGreen, 0.0, 1.0);

}


"""


# run the program
main()

setUniform2i

setUniform2i(name, ix, iy)

Used to pass two integer values from the main program to the vertex or fragment program.

name:
Type:  string
ix:
Type:  integer
iy:
Type:  integer

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# pass ivec2 variable to shader
shader.setUniform2i("MinMax", 0, 10)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec2 integer passed from main program

uniform ivec2 MinMax;


void main()

{

 // code to use MinMax


// Turn cube green

gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);

}


"""


# run the program
main()

setUniform3f

setUniform3f(name, fx,fy,fz)

Used to pass three float values from the main program to the vertex or fragment program.

name:
Type:  string
fx:
Type:  float
fy:
Type:  float
fz:
Type:  float

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# pass vec3 float variable to shader
shader.setUniform3f("RedGreenBlue", 0.0, 1.0, 0.0)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec3 float passed from main program

uniform vec3 RedGreenBlue;


void main()

{

// Turn cube green

gl_FragColor = vec4( RedGreenBlue, 1.0);

}


"""


# run the program
main()

setUniform3i

setUniform3i(name, ix,iy,iz)

Used to pass three integer values from the main program to the vertex  or fragment program.

name:
Type:  string
ix:
Type:  integer
iy:
Type:  integer
iz:
Type:  integer

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# pass ivec3 variable to shader
shader.setUniform3i("MinMaxDefault", 0, 10, 5)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec3 integer passed from main program

uniform ivec3 MinMaxDefault;


void main()

{

// code to use MinMaxDefault


// Turn cube green

gl_FragColor = vec4( RedGreenBlue, 1.0);

}


"""


# run the program
main()

setUniform4f

setUniform4f(name, fx,fy,fz, fw)

Used to pass four float values from the main program to the vertex or fragment program.

name:
Type:  string
fx:
Type:  float
fy:
Type:  float
fz:
Type:  float
fw:
Type:  float

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on Cube
mesh = obj.getMesh(0)
 
# only one material on mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# pass vec4 float variable to shader
shader.setUniform4f("RedGreenBlueAlpha", 0.0, 1.0, 0.0, 1.0)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec4 float passed from main program

uniform vec4 RedGreenBlueAlpha;


void main()

{

// Turn cube green

gl_FragColor = vec4( RedGreenBlueAlpha);

}


"""


# run the program
main()

setUniform4i

setUniform4i(name, ix,iy,iz, iw)

Used to pass four integer values from the main program to the vertex or fragment program

name:
Type:  string
ix:
Type:  integer
iy:
Type:  integer
iz:
Type:  integer
iw:
Type:  integer

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# pass ivec4  variable to shader
shader.setUniform4i("MyVar", 2,  1,  3, 10)

####### end of main program def

# Import OpenGL code as a string
VertexProgram =

"""

void main()

{

// OpenGL glsl

gl_Position = ftransform();

}


"""


# Import OpenGL code as a string
FragmentProgram =

"""

// vec3 float passed from main program

uniform ivec4 MyVar;


void main()

{

// code to use MyVar


// Turn cube green

gl_FragColor = vec4( RedGreenBlue, 1.0);

}


"""


# run the program
main()

setUniformDef

setUniformDef(name, enum)

Used to bridge the gap between Blender and OpenGL GLSL  with predefined functions.

name:
Type:  string

enum:
Type:  (predefined functions)

[mat4] MODELVIEWMATRIX
[mat4] MODELVIEWMATRIX_TRANSPOSE
[mat4] MODELVIEWMATRIX_INVERSE
[mat4] MODELVIEWMATRIX_INVERSETRANSPOSE
[mat4] MODELMATRIX
[mat4] MODELMATRIX_TRANSPOSE
[mat4] MODELMATRIX_INVERSE
[mat4] MODELMATRIX_INVERSETRANSPOSE
[mat4] VIEWMATRIX
[mat4] VIEWMATRIX_TRANSPOSE
[mat4] VIEWMATRIX_INVERSE
[mat4] VIEWMATRIX_INVERSETRANSPOSE
[vec3] CAM_POS
[float] CONSTANT_TIMER

Sample Code

# define the main part of the program
def main():

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh on this Cube
mesh = obj.getMesh(0)
 
# only one material on this mesh
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexProgram, FragmentProgram, True)

# set enum def
enum = GameLogic.MODELVIEWMATRIX_INVERSE
         
# change Blender matrix to OpenGl
shader.setUniformDef('mvi', enum)
                     
####### end of main program def
 
VertexProgram =

"""


// matrix transform from main part of program

uniform mat4 mvi;


// light vector being passed to fragment program

varying vec3 lightVec;


void main()

{

// Convert light position 

lightVec = vec3((mvi * gl_LightSource[0].position).xyz );


// Normalize it

lightVec = normalize(lightVec);


// Required OpenGL glsl code

gl_Position = ftransform();

}


"""


FragmentProgram =

"""

// From VertexProgram

varying vec3 lightVec;


void main()

{

// color to green

vec3 color = vec3(0.0,1.0,0.0);


// transform with lightVec

color = color * lightVec;

 

 // Use it

 gl_FragColor = vec4(color, 1.0);

}


"""

# Run program
main()

setUniformMatrix3

setUniformMatrix3(name, list, transpose)

Transposes the way the matrix is read.  By column or by row.

name:
Type:  string
list:
Type:  3x3 List
   example--([1,0,0], [0,1,0], [0,0,1])
transpose:
Type:  bool
   True = row-major
   False = col-major

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh
mesh = obj.getMesh(0)
 
# only one material
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# Example 3x3 list
exampleList = ([1,0,0], [0,1,0], [0,0,1])

# transpose way OpenGL uniform mat3 variable
# named  "myMatrix" is read
shader.setUniformMatrix3("myMatrix", exampleList, True)

setUniformMatrix4

setUniformMatrix4(name, list, transpose)

Transposes the way the matrix is read.  By column or by row.

name:
Type:  string
list:
Type:  4x4 List
example--([1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1])
transpose:
Type:  bool
   True = row-major
   False = col-major

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh
mesh = obj.getMesh(0)
 
# only one material
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# Use the Identity matrix
identMatrix = ([1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1])

# transpose way OpenGL uniform mat4 variable
# named  "myMatrix" is read
shader.setUniformMatrix4("myMatrix", identMatrix, True)

setUniformfv

setUniformfv( name, list)

Sets a uniform float vec(2 or 3 or 4) variable that is being passed to the Vertex or Fragment program

name:
Type:  string
list:
Type:  list of 2 or 3 or 4.
(The list must match the uniform float vec(2 or 3 or 4) variable.  If the shader variable is a uniform float vec2, use a list of 2.  Etc.)

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh
mesh = obj.getMesh(0)
 
# only one material
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# set uniform float vec4 variable named color
shader.setUniformfv( "color", [ 1.0, 0.0, 0.0, 1.0])

setUniformiv

setUniformiv(name, list)

Sets a uniform integer ivec(2 or 3 or 4) variable that is being passed to the Vertex or Fragment program

name:
Type:  string
list:
Type:  list of 2 or 3 or 4.
(The list must match the uniform integer ivec(2 or 3 or 4) variable.  If the variable being passed is a uniform float ivec2, use a list of 2.  Etc.)

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()

# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh
mesh = obj.getMesh(0)
 
# only one material
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# set uniform float ivec2 variable named xyPos
shader.setUniformiv( "xyPos", [ 1, 0])

validate

validate()

Note:
This function returns None.  It's my understanding that it has been disabled.

Prints the shader info.

Sample Code

# get the current scene
scene = GameLogic.getCurrentScene()

# get a list of the objects in the scene
objList = scene.getObjectList()
 
# Get the object you want to use
obj =  objList['OBCube']
 
# Only one mesh
mesh = obj.getMesh(0)
 
# only one material
mat = mesh.materials[0]
 
# 'Use Blender Materials' checked?
if hasattr( mat, 'getMaterialIndex') == True: 
     
#Get shader envelope
shader = mat.getShader()
     
# shader envelope created?
if shader != None:
     
# set the shader
shader.setSource(VertexShader, FragmentShader, True)
 
# print shader info
shader.validate()





isA

isA(Type)

Checks the Object type.
(KX_GameObject, SCA_ILogicBrick, KX_Scene, etc.)

Type:  String

Return Type:  Bool
1 = True
0 = False

Sample Code

# get the controller
controller = GameLogic.getCurrentController()

# get the object controller attached to
owner = controller.getOwner()

# is owner a GameObject?
gameObject = owner.isA("KX_GameObject")


Blender 3D
Game Engine
Rapid prototyping for 3D games. Test realtime 3D gameplay without having to compile the game code. 3D game models automatically added.  GLSL shaders. Normal Mapping and Parallax Mapping. All OpenGL Lighting modes. This includes transparencies, animated and reflection mapped textures. Multiple textures and materials. UV mapping. Per-pixel lighting and dynamic lighting.  Uses Bullet Physics. Soft body dynamics. Rigid body dynamics. Collision detection and dynamics simulation. Collision bounds of all types. Car physics engine with full support for vehicle dynamics. (Spring reactions, stiffness, damping, tire friction etc.).