|
| Methods: |
| delSource |
setUniform2i |
| getFragmentProg |
setUniform3f |
| getVertexProg |
setUniform3i |
| isValid |
setUniform4f |
| setAttrib |
setUniform4i |
| setNumberOfPasses |
setUniformDef |
| setSampler |
setUniformMatrix3 |
| setSource |
setUniformMatrix4 |
| setUniform1f |
setUniformfv |
| setUniform1i |
setUniformiv |
| setUniform2f |
validate |
|
|
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()
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()
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()
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()
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")
|