PDA

View Full Version : Texture ID in postprocess


mellott124
11-24-2014, 09:25 PM
When working with shaders in Vizard outside of the postprocess library I can set the Texture ID using viz.setUniformInt('texture',0).

How is this done when I define a class derived from postprocess effect library? Also at what texture ID does vizpp_InputTex sit at? Seems with the postprocess examples there's never any reference to the texture ID. I need to know what the IDs of vizpp_InputTex, redTex, greenTex, and blueTex are.

Beginning of my class below

class warp(vizfx.postprocess.BaseShaderEffect):

def _getFragmentCode(self):
return """
#version 120
uniform sampler2D vizpp_InputTex;
uniform sampler2D redTex;
uniform sampler2D blueTex;
uniform sampler2D greenTex;


etc...

farshizzo
11-25-2014, 08:08 AM
You can add textures through the uniforms attribute of the effect class within the _createUniforms method. Here is a simple example:

class WarpEffect(vizfx.postprocess.BaseShaderEffect):

def _getFragmentCode(self):
return """
uniform sampler2D vizpp_InputTex;
uniform sampler2D redTex;
uniform sampler2D blueTex;
uniform sampler2D greenTex;
void main()
{
vec2 uv = gl_TexCoord[0].st;
vec4 color = vec4(1.0);
color.r = texture2D(vizpp_InputTex, texture2D(redTex, uv).rg).r;
color.g = texture2D(vizpp_InputTex, texture2D(greenTex, uv).rg).g;
color.b = texture2D(vizpp_InputTex, texture2D(blueTex, uv).rg).b;
gl_FragColor = color;
}
"""

def _createUniforms(self):

# Create texture objects
redTex = viz.addTexture(...)
greenTex = viz.addTexture(...)
blueTex = viz.addTexture(...)

# Apply textures to effect (automatically assigns uniform IDs)
self.uniforms.addTexture('redTex', redTex)
self.uniforms.addTexture('greenTex', greenTex)
self.uniforms.addTexture('blueTex', blueTex)


Have a look at the Post-Process basics page in the documentation for more info:

http://docs.worldviz.com/vizard/postprocess_basics.htm